@@ -131,7 +131,7 @@ func RemoveConsumerPlugins(targetContentPlugins []file.FPlugin) []file.FPlugin {
131131}
132132
133133func syncMain (ctx context.Context , filenames []string , dry bool , parallelism ,
134- delay int , workspace string , enableJSONOutput bool ,
134+ delay int , workspace string , enableJSONOutput bool , noDeletes bool ,
135135) error {
136136 // read target file
137137 if enableJSONOutput {
@@ -157,6 +157,13 @@ func syncMain(ctx context.Context, filenames []string, dry bool, parallelism,
157157 }
158158
159159 cmd := "sync"
160+
161+ isPartialApply := false
162+ if noDeletes {
163+ cmd = "apply"
164+ isPartialApply = true
165+ }
166+
160167 if dry {
161168 cmd = "diff"
162169 }
@@ -248,21 +255,24 @@ func syncMain(ctx context.Context, filenames []string, dry bool, parallelism,
248255 return err
249256 }
250257
251- dumpConfig .LookUpSelectorTagsConsumerGroups , err = determineLookUpSelectorTagsConsumerGroups (* targetContent )
252- if err != nil {
253- return fmt .Errorf ("error determining lookup selector tags for consumer groups: %w" , err )
254- }
255-
256- if dumpConfig .LookUpSelectorTagsConsumerGroups != nil {
257- consumerGroupsGlobal , err := dump .GetAllConsumerGroups (ctx , kongClient , dumpConfig .LookUpSelectorTagsConsumerGroups )
258+ // Consumer groups are a 3.4+ feature
259+ if parsedKongVersion .GTE (reconcilerUtils .Kong340Version ) {
260+ dumpConfig .LookUpSelectorTagsConsumerGroups , err = determineLookUpSelectorTagsConsumerGroups (* targetContent )
258261 if err != nil {
259- return fmt .Errorf ("error retrieving global consumer groups via lookup selector tags: %w" , err )
262+ return fmt .Errorf ("error determining lookup selector tags for consumer groups : %w" , err )
260263 }
261- for _ , c := range consumerGroupsGlobal {
262- targetContent . ConsumerGroups = append ( targetContent . ConsumerGroups ,
263- file. FConsumerGroupObject { ConsumerGroup : * c . ConsumerGroup } )
264+
265+ if dumpConfig . LookUpSelectorTagsConsumerGroups != nil || isPartialApply {
266+ consumerGroupsGlobal , err := dump . GetAllConsumerGroups ( ctx , kongClient , dumpConfig . LookUpSelectorTagsConsumerGroups )
264267 if err != nil {
265- return fmt .Errorf ("error adding global consumer group %v: %w" , * c .ConsumerGroup .Name , err )
268+ return fmt .Errorf ("error retrieving global consumer groups via lookup selector tags: %w" , err )
269+ }
270+ for _ , c := range consumerGroupsGlobal {
271+ targetContent .ConsumerGroups = append (targetContent .ConsumerGroups ,
272+ file.FConsumerGroupObject {ConsumerGroup : * c .ConsumerGroup })
273+ if err != nil {
274+ return fmt .Errorf ("error adding global consumer group %v: %w" , * c .ConsumerGroup .Name , err )
275+ }
266276 }
267277 }
268278 }
@@ -272,7 +282,7 @@ func syncMain(ctx context.Context, filenames []string, dry bool, parallelism,
272282 return fmt .Errorf ("error determining lookup selector tags for consumers: %w" , err )
273283 }
274284
275- if dumpConfig .LookUpSelectorTagsConsumers != nil {
285+ if dumpConfig .LookUpSelectorTagsConsumers != nil || isPartialApply {
276286 consumersGlobal , err := dump .GetAllConsumers (ctx , kongClient , dumpConfig .LookUpSelectorTagsConsumers )
277287 if err != nil {
278288 return fmt .Errorf ("error retrieving global consumers via lookup selector tags: %w" , err )
@@ -290,7 +300,7 @@ func syncMain(ctx context.Context, filenames []string, dry bool, parallelism,
290300 return fmt .Errorf ("error determining lookup selector tags for routes: %w" , err )
291301 }
292302
293- if dumpConfig .LookUpSelectorTagsRoutes != nil {
303+ if dumpConfig .LookUpSelectorTagsRoutes != nil || isPartialApply {
294304 routesGlobal , err := dump .GetAllRoutes (ctx , kongClient , dumpConfig .LookUpSelectorTagsRoutes )
295305 if err != nil {
296306 return fmt .Errorf ("error retrieving global routes via lookup selector tags: %w" , err )
@@ -308,7 +318,7 @@ func syncMain(ctx context.Context, filenames []string, dry bool, parallelism,
308318 return fmt .Errorf ("error determining lookup selector tags for services: %w" , err )
309319 }
310320
311- if dumpConfig .LookUpSelectorTagsServices != nil {
321+ if dumpConfig .LookUpSelectorTagsServices != nil || isPartialApply {
312322 servicesGlobal , err := dump .GetAllServices (ctx , kongClient , dumpConfig .LookUpSelectorTagsServices )
313323 if err != nil {
314324 return fmt .Errorf ("error retrieving global services via lookup selector tags: %w" , err )
@@ -373,7 +383,7 @@ func syncMain(ctx context.Context, filenames []string, dry bool, parallelism,
373383 }
374384
375385 totalOps , err := performDiff (
376- ctx , currentState , targetState , dry , parallelism , delay , kongClient , mode == modeKonnect , enableJSONOutput )
386+ ctx , currentState , targetState , dry , parallelism , delay , kongClient , mode == modeKonnect , enableJSONOutput , noDeletes )
377387 if err != nil {
378388 if enableJSONOutput {
379389 var errs reconcilerUtils.ErrArray
@@ -502,7 +512,7 @@ func fetchCurrentState(ctx context.Context, client *kong.Client, dumpConfig dump
502512
503513func performDiff (ctx context.Context , currentState , targetState * state.KongState ,
504514 dry bool , parallelism int , delay int , client * kong.Client , isKonnect bool ,
505- enableJSONOutput bool ,
515+ enableJSONOutput bool , noDeletes bool ,
506516) (int , error ) {
507517 s , err := diff .NewSyncer (diff.SyncerOpts {
508518 CurrentState : currentState ,
@@ -511,6 +521,7 @@ func performDiff(ctx context.Context, currentState, targetState *state.KongState
511521 StageDelaySec : delay ,
512522 NoMaskValues : noMaskValues ,
513523 IsKonnect : isKonnect ,
524+ NoDeletes : noDeletes ,
514525 })
515526 if err != nil {
516527 return 0 , err
0 commit comments