@@ -137,7 +137,7 @@ func (rm *resourceManager) syncSGRules(
137
137
) (err error ) {
138
138
rlog := ackrtlog .FromContext (ctx )
139
139
exit := rlog .Trace ("rm.syncSGRules" )
140
- defer exit (err )
140
+ defer func () { exit (err ) }( )
141
141
142
142
toAddIngress := []* svcapitypes.IPPermission {}
143
143
toAddEgress := []* svcapitypes.IPPermission {}
@@ -218,7 +218,9 @@ func (rm *resourceManager) createSecurityGroupRules(
218
218
) (err error ) {
219
219
rlog := ackrtlog .FromContext (ctx )
220
220
exit := rlog .Trace ("rm.createSecurityGroupRules" )
221
- defer exit (err )
221
+ defer func () { exit (err ) }()
222
+
223
+ ingressRules := []* svcsdk.IpPermission {}
222
224
223
225
// Authorize ingress rules
224
226
for _ , i := range ingress {
@@ -235,18 +237,27 @@ func (rm *resourceManager) createSecurityGroupRules(
235
237
userIDGroupPair .VpcId = r .ko .Spec .VPCID
236
238
}
237
239
}
240
+ ingressRules = append (ingressRules , ipInput )
241
+ }
242
+
243
+ // API can only handle 1000 rules at a time. Send in batches of 1000.
244
+ for i := 0 ; i < len (ingressRules ); i += 1000 {
245
+ end := i + 1000
246
+ if end > len (ingressRules ) {
247
+ end = len (ingressRules )
248
+ }
238
249
req := & svcsdk.AuthorizeSecurityGroupIngressInput {
239
250
GroupId : r .ko .Status .ID ,
240
- IpPermissions : []* svcsdk.IpPermission {ipInput },
241
- // TODO: TagSpecs
251
+ IpPermissions : ingressRules [i :end ],
242
252
}
243
- _ , err : = rm .sdkapi .AuthorizeSecurityGroupIngressWithContext (ctx , req )
253
+ _ , err = rm .sdkapi .AuthorizeSecurityGroupIngressWithContext (ctx , req )
244
254
rm .metrics .RecordAPICall ("CREATE" , "AuthorizeSecurityGroupIngress" , err )
245
255
if err != nil {
246
256
return err
247
257
}
248
258
}
249
259
260
+ egressRules := []* svcsdk.IpPermission {}
250
261
// Authorize egress rules
251
262
for _ , e := range egress {
252
263
ipInput := rm .newIPPermission (* e )
@@ -262,10 +273,18 @@ func (rm *resourceManager) createSecurityGroupRules(
262
273
userIDGroupPair .VpcId = r .ko .Spec .VPCID
263
274
}
264
275
}
276
+ egressRules = append (egressRules , ipInput )
277
+ }
278
+
279
+ // API can only handle 1000 rules at a time. Send in batches of 1000.
280
+ for i := 0 ; i < len (egressRules ); i += 1000 {
281
+ end := i + 1000
282
+ if end > len (egressRules ) {
283
+ end = len (egressRules )
284
+ }
265
285
req := & svcsdk.AuthorizeSecurityGroupEgressInput {
266
286
GroupId : r .ko .Status .ID ,
267
- IpPermissions : []* svcsdk.IpPermission {ipInput },
268
- // TODO: TagSpecs
287
+ IpPermissions : egressRules [i :end ],
269
288
}
270
289
_ , err = rm .sdkapi .AuthorizeSecurityGroupEgressWithContext (ctx , req )
271
290
rm .metrics .RecordAPICall ("CREATE" , "AuthorizeSecurityGroupEgress" , err )
@@ -287,7 +306,7 @@ func (rm *resourceManager) deleteDefaultSecurityGroupRule(
287
306
) (err error ) {
288
307
rlog := ackrtlog .FromContext (ctx )
289
308
exit := rlog .Trace ("rm.deleteDefaultSecurityGroupRule" )
290
- defer exit (err )
309
+ defer func () { exit (err ) }( )
291
310
292
311
ipRange := & svcsdk.IpRange {
293
312
CidrIp : toStrPtr ("0.0.0.0/0" ),
@@ -328,14 +347,32 @@ func (rm *resourceManager) deleteSecurityGroupRules(
328
347
) (err error ) {
329
348
rlog := ackrtlog .FromContext (ctx )
330
349
exit := rlog .Trace ("rm.deleteSecurityGroupRules" )
331
- defer exit (err )
350
+ defer func () { exit (err ) }( )
332
351
333
352
// Revoke ingress rules
353
+ ingressRules := []* svcsdk.IpPermission {}
334
354
for _ , i := range ingress {
335
355
ipInput := rm .newIPPermission (* i )
356
+ for _ , userIDGroupPair := range ipInput .UserIdGroupPairs {
357
+ if userIDGroupPair .GroupId == nil && userIDGroupPair .GroupName == nil {
358
+ userIDGroupPair .GroupId = r .ko .Status .ID
359
+ }
360
+ if userIDGroupPair .VpcId == nil {
361
+ userIDGroupPair .VpcId = r .ko .Spec .VPCID
362
+ }
363
+ }
364
+ ingressRules = append (ingressRules , ipInput )
365
+ }
366
+
367
+ // API can only handle 1000 rules at a time. Send in batches of 1000.
368
+ for i := 0 ; i < len (ingressRules ); i += 1000 {
369
+ end := i + 1000
370
+ if end > len (ingressRules ) {
371
+ end = len (ingressRules )
372
+ }
336
373
req := & svcsdk.RevokeSecurityGroupIngressInput {
337
374
GroupId : r .ko .Status .ID ,
338
- IpPermissions : [] * svcsdk. IpPermission { ipInput } ,
375
+ IpPermissions : ingressRules [ i : end ] ,
339
376
}
340
377
_ , err = rm .sdkapi .RevokeSecurityGroupIngressWithContext (ctx , req )
341
378
rm .metrics .RecordAPICall ("DELETE" , "RevokeSecurityGroupIngress" , err )
@@ -345,12 +382,29 @@ func (rm *resourceManager) deleteSecurityGroupRules(
345
382
}
346
383
347
384
// Revoke egress rules
385
+ egressRules := []* svcsdk.IpPermission {}
348
386
for _ , e := range egress {
349
387
ipInput := rm .newIPPermission (* e )
388
+ for _ , userIDGroupPair := range ipInput .UserIdGroupPairs {
389
+ if userIDGroupPair .GroupId == nil && userIDGroupPair .GroupName == nil {
390
+ userIDGroupPair .GroupId = r .ko .Status .ID
391
+ }
392
+ if userIDGroupPair .VpcId == nil {
393
+ userIDGroupPair .VpcId = r .ko .Spec .VPCID
394
+ }
395
+ }
396
+ egressRules = append (egressRules , ipInput )
397
+ }
398
+
399
+ // API can only handle 1000 rules at a time. Send in batches of 1000.
400
+ for i := 0 ; i < len (egressRules ); i += 1000 {
401
+ end := i + 1000
402
+ if end > len (egressRules ) {
403
+ end = len (egressRules )
404
+ }
350
405
req := & svcsdk.RevokeSecurityGroupEgressInput {
351
406
GroupId : r .ko .Status .ID ,
352
- IpPermissions : []* svcsdk.IpPermission {ipInput },
353
- // TODO: TagSpecs?
407
+ IpPermissions : egressRules [i :end ],
354
408
}
355
409
_ , err = rm .sdkapi .RevokeSecurityGroupEgressWithContext (ctx , req )
356
410
rm .metrics .RecordAPICall ("DELETE" , "RevokeSecurityGroupEgress" , err )
0 commit comments