Skip to content

Instantly share code, notes, and snippets.

@ptone
Forked from apsoto/gist:2869888
Created February 20, 2014 17:30
Show Gist options
  • Save ptone/9119047 to your computer and use it in GitHub Desktop.
Save ptone/9119047 to your computer and use it in GitHub Desktop.
require 'rubygems'
require 'activesupport'
require 'aws'
require 'graphviz'
ec2 = Aws::Ec2.new(ENV["AMAZON_ACCESS_KEY_ID"], ENV["AMAZON_SECRET_ACCESS_KEY"])
g = ec2.describe_security_groups
gv = GraphViz::new( "structs", "type" => "graph" )
# add node for each group
g.each{|group| gv.add_node(group[:aws_group_name], :shape => "box", :color => "lightblue") }
# add edges between nodes
#g.each{|group| group[:aws_perms].each{|perm| gv.add_edge(group[:aws_group_name], perm[:group]) unless perm[:group].nil? || perm[:group] == group[:aws_group_name]} } ; nil
g.each do |group|
group[:aws_perms].each do |perm|
if !perm[:group].nil?
gv.add_edge(group[:aws_group_name], perm[:group]) unless perm[:group] == group[:aws_group_name]
elsif !perm[:cidr_ips].nil?
node_name = "#{perm[:protocol]}:#{perm[:cidr_ips]}:#{perm[:from_port]}-#{perm[:to_port]}"
gv.add_node(node_name)
gv.add_edge(group[:aws_group_name], node_name)
end
end
end; nil
gv.output( "output" => "png", :file => "output.png")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment