diff --git a/cmd/common.go b/cmd/common.go index 1a0e80f14..2ce8a3528 100644 --- a/cmd/common.go +++ b/cmd/common.go @@ -155,6 +155,12 @@ func syncMain(ctx context.Context, filenames []string, dry bool, parallelism, if err != nil { return err } + + err = validateSkipConsumersWithLookupTags(targetContent) + if err != nil { + return err + } + if dumpConfig.SkipConsumers { targetContent.Consumers = []file.FConsumer{} targetContent.ConsumerGroups = []file.FConsumerGroupObject{} @@ -451,6 +457,15 @@ func syncMain(ctx context.Context, filenames []string, dry bool, parallelism, return nil } +func validateSkipConsumersWithLookupTags(targetContent *file.Content) error { + if dumpConfig.SkipConsumers && targetContent.Info != nil && targetContent.Info.LookUpSelectorTags != nil && + (targetContent.Info.LookUpSelectorTags.Consumers != nil || + targetContent.Info.LookUpSelectorTags.ConsumerGroups != nil) { + return errors.New("cannot use --skip-consumers with default lookup tags for consumers or consumer groups") + } + return nil +} + func addUniqueConsumersInTargetContent(targetContent *file.Content, consumers []*kong.Consumer, consumerGroupObject *file.FConsumerGroupObject, consumersExistInTargetContent bool, diff --git a/tests/integration/sync_test.go b/tests/integration/sync_test.go index e02dd4e2e..2f87cbdd7 100644 --- a/tests/integration/sync_test.go +++ b/tests/integration/sync_test.go @@ -8597,6 +8597,25 @@ func Test_Sync_SkipConsumersWithConsumerGroups_Konnect(t *testing.T) { }) } +func Test_Sync_SkipConsumersWithDefaultLookUp_ConsumersAndConsumerGroup_Tag(t *testing.T) { + runWhenEnterpriseOrKonnect(t, ">=3.0.0") + setup(t) + + ctx := context.Background() + + t.Run("--skip-consumers-with-default-lookup-consumer flag set", func(t *testing.T) { + err := sync(ctx, "testdata/sync/049-skip-consumers-default-lookup-tags/consumers.yaml", "--skip-consumers") + require.Error(t, err) + assert.ErrorContains(t, err, "cannot use --skip-consumers with default lookup tags for consumers or consumer groups") + }) + + t.Run("--skip-consumers-with-default-lookup-consumer-group flag set", func(t *testing.T) { + err := sync(ctx, "testdata/sync/049-skip-consumers-default-lookup-tags/consumer-groups.yaml", "--skip-consumers") + require.Error(t, err) + assert.ErrorContains(t, err, "cannot use --skip-consumers with default lookup tags for consumers or consumer groups") + }) +} + func Test_Sync_Partials_Plugins(t *testing.T) { runWhen(t, "enterprise", ">=3.10.0") diff --git a/tests/integration/testdata/sync/049-skip-consumers-default-lookup-tags/consumer-groups.yaml b/tests/integration/testdata/sync/049-skip-consumers-default-lookup-tags/consumer-groups.yaml new file mode 100644 index 000000000..961c1e6ab --- /dev/null +++ b/tests/integration/testdata/sync/049-skip-consumers-default-lookup-tags/consumer-groups.yaml @@ -0,0 +1,29 @@ +_format_version: "3.0" +_info: + select_tags: + - my-service + default_lookup_tags: + consumer_groups: + - my-consumer-group +services: + - name: my-service + host: example.com + port: 443 + protocol: https + path: /api + tags: + - my-service +plugins: + - name: rate-limiting-advanced + consumer: my-consumer-username + service: my-service + config: + limit: + - 30000 + window_size: + - 60 + strategy: local + window_type: fixed + namespace: my-namespace + tags: + - my-service \ No newline at end of file diff --git a/tests/integration/testdata/sync/049-skip-consumers-default-lookup-tags/consumers.yaml b/tests/integration/testdata/sync/049-skip-consumers-default-lookup-tags/consumers.yaml new file mode 100644 index 000000000..1cc1394bb --- /dev/null +++ b/tests/integration/testdata/sync/049-skip-consumers-default-lookup-tags/consumers.yaml @@ -0,0 +1,29 @@ +_format_version: "3.0" +_info: + select_tags: + - my-service + default_lookup_tags: + consumers: + - MyConsumerTag +services: + - name: my-service + host: example.com + port: 443 + protocol: https + path: /api + tags: + - my-service +plugins: + - name: rate-limiting-advanced + consumer: my-consumer-username + service: my-service + config: + limit: + - 30000 + window_size: + - 60 + strategy: local + window_type: fixed + namespace: my-namespace + tags: + - my-service \ No newline at end of file