22: def modify_image_attribute( options = {} )
23:
24:
25: options = { :image_id => "",
26: :attribute => "launchPermission",
27: :operation_type => "",
28: :user_id => [],
29: :group => [],
30: :product_code => [] }.merge(options)
31:
32: raise ArgumentError, "No ':image_id' provided" if options[:image_id].nil? || options[:image_id].empty?
33: raise ArgumentError, "No ':attribute' provided" if options[:attribute].nil? || options[:attribute].empty?
34:
35:
36: unless options[:attribute] == 'productCodes'
37: raise ArgumentError, "No ':operation_type' provided" if options[:operation_type].nil? || options[:operation_type].empty?
38: end
39:
40: params = {
41: "ImageId" => options[:image_id],
42: "Attribute" => options[:attribute],
43: "OperationType" => options[:operation_type]
44: }
45:
46:
47: case options[:attribute]
48: when "launchPermission"
49:
50: unless options[:operation_type] == "add" || options[:operation_type] == "remove"
51: raise ArgumentError, ":operation_type was #{options[:operation_type].to_s} but must be either 'add' or 'remove'"
52: end
53:
54: if (options[:user_id].nil? || options[:user_id].empty?) && (options[:group].nil? || options[:group].empty?)
55: raise ArgumentError, "Option :attribute=>'launchPermission' requires ':user_id' or ':group' options to also be specified"
56: end
57: params.merge!(pathlist("UserId", options[:user_id])) unless options[:user_id].nil?
58: params.merge!(pathlist("Group", options[:group])) unless options[:group].nil?
59: when "productCodes"
60: if (options[:product_code].nil? || options[:product_code].empty?)
61: raise ArgumentError, "Option :attribute=>'productCodes' requires ':product_code' to be specified"
62: end
63: params.merge!(pathlist("ProductCode", options[:product_code])) unless options[:product_code].nil?
64: else
65: raise ArgumentError, "attribute : #{options[:attribute].to_s} is not an known attribute."
66: end
67:
68: return response_generator(:action => "ModifyImageAttribute", :params => params)
69:
70: end