# File lib/ec2/ec2.rb, line 901
    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