diff --git a/CHANGELOG.md b/CHANGELOG.md index 569b61b6a..d88ad9ac7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Table of Contents +- [v1.34.0](#v1340) - [v1.33.0](#v1330) - [v1.32.1](#v1321) - [v1.32.0](#v1320) @@ -77,6 +78,19 @@ - [v0.2.0](#v020) - [v0.1.0](#v010) +## [v1.34.0] + +> Release date: 2024/02/08 + +### Fixes + +- Correct consumer_groups -> consumers reference and allow importing their relationships + from upstream using `default_lookup_tags`. + [#1212](https://github.com/Kong/deck/pull/1212) + [go-database-reconciler #57](https://github.com/Kong/go-database-reconciler/pull/57) +- CLI fix: error out if `deck file addplugins` gets a `--selector` but no `--config`. + [#1211](https://github.com/Kong/deck/pull/1211) + ## [v1.33.0] > Release date: 2024/02/01 @@ -1569,6 +1583,7 @@ No breaking changes have been introduced in this release. Debut release of decK +[v1.34.0]: https://github.com/kong/deck/compare/v1.33.0...v1.34.0 [v1.33.0]: https://github.com/kong/deck/compare/v1.32.1...v1.33.0 [v1.32.1]: https://github.com/kong/deck/compare/v1.32.0...v1.32.1 [v1.32.0]: https://github.com/kong/deck/compare/v1.31.1...v1.32.0 diff --git a/go.mod b/go.mod index 8992bacef..785840e37 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/fatih/color v1.15.0 github.com/google/go-cmp v0.6.0 github.com/kong/go-apiops v0.1.29 - github.com/kong/go-database-reconciler v1.5.0 + github.com/kong/go-database-reconciler v1.7.0 github.com/kong/go-kong v0.51.1-0.20240125175037-0c077f5b9ac7 github.com/mitchellh/go-homedir v1.1.0 github.com/spf13/cobra v1.8.0 @@ -115,8 +115,8 @@ require ( golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect golang.org/x/mod v0.14.0 // indirect golang.org/x/net v0.19.0 // indirect - golang.org/x/sys v0.16.0 // indirect - golang.org/x/term v0.16.0 // indirect + golang.org/x/sys v0.17.0 // indirect + golang.org/x/term v0.17.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.16.1 // indirect google.golang.org/protobuf v1.31.0 // indirect diff --git a/go.sum b/go.sum index 930828b13..a13faea56 100644 --- a/go.sum +++ b/go.sum @@ -182,8 +182,8 @@ github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y7 github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/kong/go-apiops v0.1.29 h1:c+AB8MmGIr+K01Afm4GB2xaOmJnD/8KWMJQkr9qssnc= github.com/kong/go-apiops v0.1.29/go.mod h1:ZNdiTZyVrAssB4wjEYWV7BfpcV9UME9LxnDDZhMPuNU= -github.com/kong/go-database-reconciler v1.5.0 h1:OHUmFFse5nUqcO7FvChITBK9PoXEhZdw95dE4arlhxs= -github.com/kong/go-database-reconciler v1.5.0/go.mod h1:KtstdZjxNI7+jZJRT896iDsS0Yte1x1sX4B2TaaASgk= +github.com/kong/go-database-reconciler v1.7.0 h1:Nztq15nVwwstqstQYveK+zEgVfA2bSaQh7fdfvlO4fo= +github.com/kong/go-database-reconciler v1.7.0/go.mod h1:A45z0CFwPRMuBfJUlgdfLQw32svOkkjnQfZBNXTiU28= github.com/kong/go-kong v0.51.1-0.20240125175037-0c077f5b9ac7 h1:/iV93Gwv410lIeJx8VCfCA4fpuvSuTw2LqZpDXsIE9Q= github.com/kong/go-kong v0.51.1-0.20240125175037-0c077f5b9ac7/go.mod h1:YNkLvjxfOqS+BZ1J2YWOy/83wc26JM5QJbAukoeg1sY= github.com/kong/go-slugify v1.0.0 h1:vCFAyf2sdoSlBtLcrmDWUFn0ohlpKiKvQfXZkO5vSKY= @@ -420,15 +420,16 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= -golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= +golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/tests/integration/sync_test.go b/tests/integration/sync_test.go index 03791cf27..684cec6f6 100644 --- a/tests/integration/sync_test.go +++ b/tests/integration/sync_test.go @@ -4863,3 +4863,55 @@ func Test_Sync_LookupRoutesTags(t *testing.T) { require.Error(t, sync(pluginsLookupStateFile)) require.EqualError(t, err, "building state: route foo for plugin rate-limiting-advanced: entity not found") } + +// test scope: +// - 3.5.0+ +// - konnect +func Test_Sync_ConsumerGroupConsumerFromUpstream(t *testing.T) { + t.Setenv("DECK_KONNECT_CONTROL_PLANE_NAME", "default") + runWhenEnterpriseOrKonnect(t, ">=3.4.0") + setup(t) + + client, err := getTestClient() + if err != nil { + t.Fatalf(err.Error()) + } + + expectedState := utils.KongRawState{ + ConsumerGroups: []*kong.ConsumerGroupObject{ + { + ConsumerGroup: &kong.ConsumerGroup{ + ID: kong.String("c0f6c818-470c-4df7-8515-c8e904765fcc"), + Name: kong.String("group-1"), + Tags: kong.StringSlice("project:the-project", "managed-by:deck"), + }, + Consumers: []*kong.Consumer{ + { + ID: kong.String("97cab250-1b0a-4119-aa2e-0756e8931034"), + Username: kong.String("consumer-1"), + Tags: kong.StringSlice("project:the-project", "managed-by:the-background-process"), + }, + }, + }, + }, + Consumers: []*kong.Consumer{ + { + ID: kong.String("97cab250-1b0a-4119-aa2e-0756e8931034"), + Username: kong.String("consumer-1"), + Tags: kong.StringSlice("project:the-project", "managed-by:the-background-process"), + }, + }, + } + + // simulate the following scenario: + // - a consumer-group defined with a set of tags, ideally managed by decK + // - a consumer defined with another set of tags, ideally managed by an external process + // - the consumer -> consumer-group relationship, ideally managed by an external process + require.NoError(t, sync("testdata/sync/031-consumer-group-consumers-from-upstream/initial.yaml")) + testKongState(t, client, false, expectedState, nil) + + // referencing the relationship in a file without the consumer would still work + // if default_lookup_tags are defined to pull consumers from upstream. + require.NoError(t, sync("testdata/sync/031-consumer-group-consumers-from-upstream/consumer-groups.yaml")) + testKongState(t, client, false, expectedState, nil) +} diff --git a/tests/integration/testdata/sync/025-consumer-groups-scoped-plugins/kong3x.yaml b/tests/integration/testdata/sync/025-consumer-groups-scoped-plugins/kong3x.yaml index ca22940db..c3cde3528 100644 --- a/tests/integration/testdata/sync/025-consumer-groups-scoped-plugins/kong3x.yaml +++ b/tests/integration/testdata/sync/025-consumer-groups-scoped-plugins/kong3x.yaml @@ -20,7 +20,6 @@ consumer_groups: name: silver consumers: - username: bar - - username: baz plugins: - name: rate-limiting-advanced config: diff --git a/tests/integration/testdata/sync/031-consumer-group-consumers-from-upstream/consumer-groups.yaml b/tests/integration/testdata/sync/031-consumer-group-consumers-from-upstream/consumer-groups.yaml new file mode 100644 index 000000000..72a3efa18 --- /dev/null +++ b/tests/integration/testdata/sync/031-consumer-group-consumers-from-upstream/consumer-groups.yaml @@ -0,0 +1,14 @@ +_format_version: "3.0" +_info: + defaults: {} + select_tags: + - project:the-project + - managed-by:deck + default_lookup_tags: + consumers: + - managed-by:the-background-process + - project:the-project +consumer_groups: +- name: group-1 + consumers: + - username: consumer-1 \ No newline at end of file diff --git a/tests/integration/testdata/sync/031-consumer-group-consumers-from-upstream/initial.yaml b/tests/integration/testdata/sync/031-consumer-group-consumers-from-upstream/initial.yaml new file mode 100644 index 000000000..08099bbb6 --- /dev/null +++ b/tests/integration/testdata/sync/031-consumer-group-consumers-from-upstream/initial.yaml @@ -0,0 +1,16 @@ +_format_version: "3.0" +consumer_groups: +- id: c0f6c818-470c-4df7-8515-c8e904765fcc + name: group-1 + tags: + - project:the-project + - managed-by:deck +consumers: +- id: 97cab250-1b0a-4119-aa2e-0756e8931034 + username: consumer-1 + groups: + - id: c0f6c818-470c-4df7-8515-c8e904765fcc + name: group-1 + tags: + - project:the-project + - managed-by:the-background-process \ No newline at end of file