# File lib/AWS/EC2/image_attributes.rb, line 22
22:       def modify_image_attribute( options = {} )
23: 
24:         # defaults
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:         # OperationType is not required if modifying a product code.
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:         # test options provided and make sure they are valid
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