def describe_security_groups(list=[])
link = generate_request("DescribeSecurityGroups", amazonize_list('GroupName', list))
request_cache_or_info( :describe_security_groups, link, QEc2DescribeSecurityGroupsParser, @@bench, list.blank?) do |parser|
result = []
parser.result.each do |item|
result_item = { :aws_owner => item[:owner_id],
:aws_group_name => item[:group_name],
:aws_description => item[:group_description] }
aws_perms = []
item[:ip_permissions].each do |permission|
result_perm = {}
result_perm[:from_port] = permission[:from_port]
result_perm[:to_port] = permission[:to_port]
result_perm[:protocol] = permission[:ip_protocol]
Array(permission[:ip_ranges]).each do |ip_range|
perm = result_perm.dup
if @params[:eucalyptus] then perm[:cidr_ip] = ip_range
else perm[:cidr_ips] = ip_range
end
aws_perms << perm
end
Array(permission[:groups]).each do |group|
perm = result_perm.dup
perm[:group] = group[:group_name]
perm[:owner] = group[:user_id]
unless @params[:port_based_group_ingress]
perm.delete(:from_port)
perm.delete(:to_port)
perm.delete(:protocol)
end
aws_perms << perm
end
end
result_item[:aws_perms] = aws_perms.uniq
result << result_item
end
result
end
rescue Exception
on_exception
end