diff --git a/CHANGELOG.md b/CHANGELOG.md index e79441435..29c458a47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ## Unreleased +BUG FIXES: +* CRDs: Fix a bug where the `config` field in `ProxyDefaults` CR was not synced to Consul because + `apiextensions.k8s.io/v1` requires CRD spec to have structured schema. [[GH-921](https://github.com/hashicorp/consul-helm/pull/921)] + ## 0.32.0-beta1 (Apr 16, 2021) IMPROVEMENTS: diff --git a/templates/crd-proxydefaults.yaml b/templates/crd-proxydefaults.yaml index e3e9a979d..adb33d4fb 100644 --- a/templates/crd-proxydefaults.yaml +++ b/templates/crd-proxydefaults.yaml @@ -54,6 +54,7 @@ spec: config: description: Config is an arbitrary map of configuration values used by Connect proxies. Any values that your proxy allows can be configured globally here. Supports JSON config values. See https://www.consul.io/docs/connect/proxies/envoy#configuration-formatting type: object + x-kubernetes-preserve-unknown-fields: true expose: description: Expose controls the default expose path configuration for Envoy. properties: diff --git a/test/acceptance/tests/controller/controller_test.go b/test/acceptance/tests/controller/controller_test.go index a152295ad..7c2272fc6 100644 --- a/test/acceptance/tests/controller/controller_test.go +++ b/test/acceptance/tests/controller/controller_test.go @@ -92,6 +92,14 @@ func TestController(t *testing.T) { proxyDefaultEntry, ok := entry.(*api.ProxyConfigEntry) require.True(r, ok, "could not cast to ProxyConfigEntry") require.Equal(r, api.MeshGatewayModeLocal, proxyDefaultEntry.MeshGateway.Mode) + require.Equal(r, "tcp", proxyDefaultEntry.Config["protocol"]) + require.Equal(r, float64(3), proxyDefaultEntry.Config["number"]) + require.Equal(r, true, proxyDefaultEntry.Config["bool"]) + require.Equal(r, []interface{}{"item1", "item2"}, proxyDefaultEntry.Config["array"]) + require.Equal(r, map[string]interface{}{"key": "value"}, proxyDefaultEntry.Config["map"]) + require.Equal(r, "/health", proxyDefaultEntry.Expose.Paths[0].Path) + require.Equal(r, 22000, proxyDefaultEntry.Expose.Paths[0].ListenerPort) + require.Equal(r, 8080, proxyDefaultEntry.Expose.Paths[0].LocalPathPort) // service-router entry, _, err = consulClient.ConfigEntries().Get(api.ServiceRouter, "router", nil) diff --git a/test/acceptance/tests/fixtures/crds/proxydefaults.yaml b/test/acceptance/tests/fixtures/crds/proxydefaults.yaml index 1172c6ac6..040da247f 100644 --- a/test/acceptance/tests/fixtures/crds/proxydefaults.yaml +++ b/test/acceptance/tests/fixtures/crds/proxydefaults.yaml @@ -4,7 +4,18 @@ metadata: name: global spec: config: - foo: '{"http":{"name":"envoy.zipkin","config":{"collector_cluster":"zipkin","collector_endpoint":"/api/v1/spans","shared_span_context":false}}}' - members: 3 + protocol: "tcp" + number: 3 + bool: true + array: + - item1 + - item2 + map: + key: value meshGateway: mode: local + expose: + paths: + - path: /health + listenerPort: 22000 + localPathPort: 8080