@@ -33,8 +33,8 @@ def get_group_permission(ip_permissions, group_name, protocol, from_port, to_por
3333 end
3434
3535 # 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 )
3838 if ( rule . has_key? :security_group )
3939 group_name = rule [ :security_group ]
4040 protocols = rule [ :protocol ] || [ 'tcp' , 'udp' , 'icmp' ]
@@ -43,7 +43,7 @@ def check_ingress_rule(rule, ip_permissions)
4343 to_port = rule [ :port ] || rule [ :to_port ] || ( protocol == 'icmp' ? -1 : 65535 )
4444 get_group_permission ( ip_permissions , group_name , protocol , from_port , to_port )
4545 end
46- msg = "Could not find ingress rule for #{ group_name } "
46+ msg = "Could not find rule for #{ group_name } "
4747 else
4848 protocol = rule [ :protocol ] || 'tcp'
4949 from_port = rule [ :port ] || rule [ :from_port ] || ( protocol == 'icmp' ? -1 : 1 )
@@ -55,18 +55,18 @@ def check_ingress_rule(rule, ip_permissions)
5555 perm [ :ip_ranges ] . any? { |ip | ip [ :cidr_ip ] == rule [ :cidr ] }
5656 end
5757
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 ] } "
5959 end
6060 [ match , msg ]
6161 end
6262
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 )
6565 expect ( match ) . to eq ( true ) , msg
6666 end
6767
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 )
7070 expect ( match ) . to eq ( false ) , msg
7171 end
7272
@@ -89,6 +89,15 @@ def doesnt_have_ingress_rule(rule, ip_permissions)
8989 :cidr => '0.0.0.0/0'
9090 }
9191 ] ,
92+ :egress => [
93+ {
94+ :security_group => @name ,
95+ } , {
96+ :protocol => 'tcp' ,
97+ :port => 8080 ,
98+ :cidr => '0.0.0.0/0'
99+ }
100+ ] ,
92101 :tags => {
93102 :department => 'engineering' ,
94103 :project => 'cloud' ,
@@ -125,13 +134,18 @@ def doesnt_have_ingress_rule(rule, ip_permissions)
125134
126135 it "with the specified ingress rules" do
127136 # 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 ) }
129143 end
130144
131145 it 'should be able to modify the ingress rules and recreate the security group' do
132146 new_rules = [ {
133147 :protocol => 'tcp' ,
134- :port => 80 ,
148+ :port => 8080 ,
135149 :cidr => '0.0.0.0/0'
136150 } ]
137151 new_config = @config . dup . update ( { :ingress => new_rules } )
@@ -141,8 +155,25 @@ def doesnt_have_ingress_rule(rule, ip_permissions)
141155 # should still have the original rules
142156 @group = get_group ( @config [ :name ] )
143157
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 ) }
146177 end
147178
148179 describe 'that another group depends on in a secondary manifest' do
@@ -204,6 +235,13 @@ def doesnt_have_ingress_rule(rule, ip_permissions)
204235 :cidr => '0.0.0.0/0'
205236 } ,
206237 ] ,
238+ :egress => [
239+ {
240+ :protocol => 'tcp' ,
241+ :port => 8080 ,
242+ :cidr => '0.0.0.0/0'
243+ } ,
244+ ] ,
207245 :tags => {
208246 :department => 'engineering' ,
209247 :project => 'cloud' ,
@@ -425,7 +463,7 @@ def expect_rule_matches(ingress_rule, ip_permission)
425463 end
426464
427465 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 ) }
429467 end
430468
431469 rules_to_test = [
@@ -474,8 +512,8 @@ def expect_rule_matches(ingress_rule, ip_permission)
474512
475513 @group = get_group ( @config [ :name ] )
476514
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 ) }
479517 end
480518 end
481519
0 commit comments