22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/demeter/commands/generate.rb', line 22
def start
res = @ec2.describe_security_groups
res[:security_groups].each do |object|
name_tag = object['tags'].detect{|tag| tag['key'].downcase == 'name'}
sg_key = name_tag ? project_key(name_tag['value']) : project_key(object.group_name)
Demeter::set_var("security_group.#{sg_key}.id", object.group_id)
Demeter::set_var(object.group_id, "<% security_group.#{sg_key}.id %>")
end
resp = @ec2.describe_security_groups({group_ids: @ids})
template = {
'environments' => [@options['environment']],
'security_groups' => []
}
resp[:security_groups].each do |_sg|
name_tag = _sg['tags'].detect{|tag| tag['key'].downcase == 'name'}
sg_key = name_tag ? project_key(name_tag['value']) : project_key(_sg.group_name)
sg_template = {
'name' => (name_tag ? name_tag['value'] : _sg.group_name),
'vpc_id' => '<% env.vpc_id %>',
'ingress' => [],
'egress' => []
}
_sg['ip_permissions'].each do |_rule|
rule = {
'protocol' => _rule.ip_protocol,
'from_port' => _rule.from_port.to_i,
'to_port' => _rule.to_port.to_i,
}
if !_rule['user_id_group_pairs'].empty?
rule['source_security_groups'] = []
_rule['user_id_group_pairs'].each do |_group|
group_key = Demeter::vars[_group['group_id']] ? Demeter::vars[_group['group_id']] : _group['group_id']
rule['source_security_groups'] << group_key
end
end
if !_rule['ip_ranges'].empty?
rule['cidr_blocks'] = []
_rule['ip_ranges'].each do |_range|
rule['cidr_blocks'] << _range['cidr_ip']
end
end
sg_template['ingress'] << rule
end
_sg['ip_permissions_egress'].each do |_rule|
rule = {
'protocol' => _rule.ip_protocol,
'from_port' => _rule.from_port.to_i,
'to_port' => _rule.to_port.to_i,
}
if !_rule['user_id_group_pairs'].empty?
rule['source_security_groups'] = []
_rule['user_id_group_pairs'].each do |_group|
group_key = Demeter::vars[_group['group_id']] ? Demeter::vars[_group['group_id']] : _group['group_id']
rule['source_security_groups'] << group_key
end
end
if !_rule['ip_ranges'].empty?
rule['cidr_blocks'] = []
_rule['ip_ranges'].each do |_range|
rule['cidr_blocks'] << _range['cidr_ip']
end
end
sg_template['egress'] << rule
end
template['security_groups'] << sg_template
end
puts template.to_yaml.gsub('"', '')
end
|