def manage_security_group_ingress(name, from_port, to_port, protocol, action, source_ip_ranges, source_groups = [])
call_params = { 'GroupName' => name.to_s,
'IpPermissions.1.IpProtocol' => protocol.to_s,
'IpPermissions.1.FromPort' => from_port.to_s,
'IpPermissions.1.ToPort' => to_port.to_s }
source_ip_ranges.each_index do |i|
call_params.merge!({"IpPermissions.1.IpRanges.#{i+1}.CidrIp" => source_ip_ranges[i].to_s})
end
source_groups.each_index do |i|
call_params.merge!({"IpPermissions.1.Groups.#{i+1}.GroupName" => source_groups[i]['group_name'].to_s,
"IpPermissions.1.Groups.#{i+1}.UserId"=> source_groups[i]['owner'].to_s.gsub(/-/,'')})
end
unless ['Authorize', 'Revoke'].include?(action.capitalize)
raise AwsError.new("Invalid action #{action} - must be one of \'Authorize\' or \'Revoke\'")
end
link = generate_request("#{action.capitalize}SecurityGroupIngress", call_params)
request_info(link, RightBoolResponseParser.new(:logger => @logger))
rescue Exception
on_exception
end