@@ -33,8 +33,8 @@ def get_group_permission(ip_permissions, group_name, protocol, from_port, to_por
33
33
end
34
34
35
35
# a fairly naive matching algorithm, since the shape of ip_permissions is
36
- # quite different than the shape of our ingress rules
37
- def check_ingress_rule ( rule , ip_permissions )
36
+ # quite different than the shape of our rules
37
+ def check_rule ( rule , ip_permissions )
38
38
if ( rule . has_key? :security_group )
39
39
group_name = rule [ :security_group ]
40
40
protocols = rule [ :protocol ] || [ 'tcp' , 'udp' , 'icmp' ]
@@ -43,7 +43,7 @@ def check_ingress_rule(rule, ip_permissions)
43
43
to_port = rule [ :port ] || rule [ :to_port ] || ( protocol == 'icmp' ? -1 : 65535 )
44
44
get_group_permission ( ip_permissions , group_name , protocol , from_port , to_port )
45
45
end
46
- msg = "Could not find ingress rule for #{ group_name } "
46
+ msg = "Could not find rule for #{ group_name } "
47
47
else
48
48
protocol = rule [ :protocol ] || 'tcp'
49
49
from_port = rule [ :port ] || rule [ :from_port ] || ( protocol == 'icmp' ? -1 : 1 )
@@ -55,18 +55,18 @@ def check_ingress_rule(rule, ip_permissions)
55
55
perm [ :ip_ranges ] . any? { |ip | ip [ :cidr_ip ] == rule [ :cidr ] }
56
56
end
57
57
58
- msg = "Could not find ingress rule for #{ protocol } from port #{ from_port } to #{ to_port } with CIDR #{ rule [ :cidr ] } "
58
+ msg = "Could not find rule for #{ protocol } from port #{ from_port } to #{ to_port } with CIDR #{ rule [ :cidr ] } "
59
59
end
60
60
[ match , msg ]
61
61
end
62
62
63
- def has_ingress_rule ( rule , ip_permissions )
64
- match , msg = check_ingress_rule ( rule , ip_permissions )
63
+ def has_rule ( rule , ip_permissions )
64
+ match , msg = check_rule ( rule , ip_permissions )
65
65
expect ( match ) . to eq ( true ) , msg
66
66
end
67
67
68
- def doesnt_have_ingress_rule ( rule , ip_permissions )
69
- match , msg = check_ingress_rule ( rule , ip_permissions )
68
+ def doesnt_have_rule ( rule , ip_permissions )
69
+ match , msg = check_rule ( rule , ip_permissions )
70
70
expect ( match ) . to eq ( false ) , msg
71
71
end
72
72
@@ -89,6 +89,15 @@ def doesnt_have_ingress_rule(rule, ip_permissions)
89
89
:cidr => '0.0.0.0/0'
90
90
}
91
91
] ,
92
+ :egress => [
93
+ {
94
+ :security_group => @name ,
95
+ } , {
96
+ :protocol => 'tcp' ,
97
+ :port => 8080 ,
98
+ :cidr => '0.0.0.0/0'
99
+ }
100
+ ] ,
92
101
:tags => {
93
102
:department => 'engineering' ,
94
103
:project => 'cloud' ,
@@ -125,13 +134,18 @@ def doesnt_have_ingress_rule(rule, ip_permissions)
125
134
126
135
it "with the specified ingress rules" do
127
136
# perform a naive match
128
- @config [ :ingress ] . all? { |rule | has_ingress_rule ( rule , @group . ip_permissions ) }
137
+ @config [ :ingress ] . all? { |rule | has_rule ( rule , @group . ip_permissions ) }
138
+ end
139
+
140
+ it "with the specified egress rules" do
141
+ # perform a naive match
142
+ @config [ :egress ] . all? { |rule | has_rule ( rule , @group . ip_permissions ) }
129
143
end
130
144
131
145
it 'should be able to modify the ingress rules and recreate the security group' do
132
146
new_rules = [ {
133
147
:protocol => 'tcp' ,
134
- :port => 80 ,
148
+ :port => 8080 ,
135
149
:cidr => '0.0.0.0/0'
136
150
} ]
137
151
new_config = @config . dup . update ( { :ingress => new_rules } )
@@ -141,8 +155,25 @@ def doesnt_have_ingress_rule(rule, ip_permissions)
141
155
# should still have the original rules
142
156
@group = get_group ( @config [ :name ] )
143
157
144
- new_rules . all? { |rule | has_ingress_rule ( rule , @group . ip_permissions ) }
145
- @config [ :ingress ] . all? { |rule | doesnt_have_ingress_rule ( rule , @group . ip_permissions ) }
158
+ new_rules . all? { |rule | has_rule ( rule , @group . ip_permissions ) }
159
+ @config [ :ingress ] . all? { |rule | doesnt_have_rule ( rule , @group . ip_permissions ) }
160
+ end
161
+
162
+ it 'should be able to modify the egress rules and recreate the security group' do
163
+ new_rules = [ {
164
+ :protocol => 'tcp' ,
165
+ :port => 80 ,
166
+ :cidr => '0.0.0.0/0'
167
+ } ]
168
+ new_config = @config . dup . update ( { :egress => new_rules } )
169
+ result = PuppetManifest . new ( @template , new_config ) . apply
170
+ expect ( result . exit_code ) . to eq ( 2 )
171
+
172
+ # should still have the original rules
173
+ @group = get_group ( @config [ :name ] )
174
+
175
+ new_rules . all? { |rule | has_rule ( rule , @group . ip_permissions_egress ) }
176
+ @config [ :egress ] . all? { |rule | doesnt_have_rule ( rule , @group . ip_permissions_egress ) }
146
177
end
147
178
148
179
describe 'that another group depends on in a secondary manifest' do
@@ -204,6 +235,13 @@ def doesnt_have_ingress_rule(rule, ip_permissions)
204
235
:cidr => '0.0.0.0/0'
205
236
} ,
206
237
] ,
238
+ :egress => [
239
+ {
240
+ :protocol => 'tcp' ,
241
+ :port => 8080 ,
242
+ :cidr => '0.0.0.0/0'
243
+ } ,
244
+ ] ,
207
245
:tags => {
208
246
:department => 'engineering' ,
209
247
:project => 'cloud' ,
@@ -425,7 +463,7 @@ def expect_rule_matches(ingress_rule, ip_permission)
425
463
end
426
464
427
465
it "with the specified ingress rules" do
428
- @config [ :ingress ] . all? { |rule | has_ingress_rule ( rule , @group . ip_permissions ) }
466
+ @config [ :ingress ] . all? { |rule | has_rule ( rule , @group . ip_permissions ) }
429
467
end
430
468
431
469
rules_to_test = [
@@ -474,8 +512,8 @@ def expect_rule_matches(ingress_rule, ip_permission)
474
512
475
513
@group = get_group ( @config [ :name ] )
476
514
477
- new_rules . all? { |rule | has_ingress_rule ( rule , @group . ip_permissions ) }
478
- @config [ :ingress ] . all? { |rule | doesnt_have_ingress_rule ( rule , @group . ip_permissions ) }
515
+ new_rules . all? { |rule | has_rule ( rule , @group . ip_permissions ) }
516
+ @config [ :ingress ] . all? { |rule | doesnt_have_rule ( rule , @group . ip_permissions ) }
479
517
end
480
518
end
481
519
0 commit comments