From cb46ab2883516f1d5c0e1372db1f2858e8c4f123 Mon Sep 17 00:00:00 2001 From: Gerrit Date: Tue, 20 Feb 2024 11:53:10 +0100 Subject: [PATCH 1/2] Allow passing additional pod labels to deployments. --- .../templates/configmap.yaml | 4 ++++ .../templates/deployment.yaml | 3 +++ charts/gardener-extension-provider-metal/values.yaml | 4 ++++ .../control-plane/templates/cloud-controller-manager.yaml | 3 +++ .../templates/firewall-controller-manager.yaml | 3 +++ charts/internal/control-plane/values.yaml | 2 ++ example/controller-registration.yaml | 4 ++-- pkg/apis/config/types.go | 3 +++ pkg/apis/config/v1alpha1/types.go | 3 +++ pkg/apis/config/v1alpha1/zz_generated.conversion.go | 2 ++ pkg/apis/config/v1alpha1/zz_generated.deepcopy.go | 7 +++++++ pkg/apis/config/zz_generated.deepcopy.go | 7 +++++++ pkg/controller/controlplane/valuesprovider.go | 5 ++++- pkg/controller/worker/machine_controller_manager.go | 1 + 14 files changed, 48 insertions(+), 3 deletions(-) diff --git a/charts/gardener-extension-provider-metal/templates/configmap.yaml b/charts/gardener-extension-provider-metal/templates/configmap.yaml index a30ae7972..80e2761c9 100644 --- a/charts/gardener-extension-provider-metal/templates/configmap.yaml +++ b/charts/gardener-extension-provider-metal/templates/configmap.yaml @@ -29,6 +29,10 @@ data: {{- if .Values.config.egressDestinations }} egressDestinations: {{ toYaml .Values.config.egressDestinations | indent 4 }} +{{- end }} +{{- if .Values.config.additionalPodLabels }} + additionalPodLabels: +{{ toYaml .Values.config.additionalPodLabels | indent 4 }} {{- end }} etcd: storage: diff --git a/charts/gardener-extension-provider-metal/templates/deployment.yaml b/charts/gardener-extension-provider-metal/templates/deployment.yaml index 28d58f1e8..3fc7891c5 100644 --- a/charts/gardener-extension-provider-metal/templates/deployment.yaml +++ b/charts/gardener-extension-provider-metal/templates/deployment.yaml @@ -31,6 +31,9 @@ spec: networking.gardener.cloud/to-private-networks: allowed networking.resources.gardener.cloud/to-all-shoots-kube-apiserver-tcp-443: allowed {{ include "labels" . | indent 8 }} +{{- if and .Values.deployment.labels }} +{{ toYaml .Values.deployment.labels | indent 8 }} +{{- end }} spec: containers: - name: {{ include "name" . }} diff --git a/charts/gardener-extension-provider-metal/values.yaml b/charts/gardener-extension-provider-metal/values.yaml index eca54b708..ad5ee94b1 100644 --- a/charts/gardener-extension-provider-metal/values.yaml +++ b/charts/gardener-extension-provider-metal/values.yaml @@ -6,6 +6,9 @@ image: replicaCount: 1 resources: {} +deployment: + labels: {} + metricsPort: 8080 healthPort: 8081 @@ -48,6 +51,7 @@ metrics: enableScraping: true config: + additionalPodLabels: {} clientConnection: acceptContentTypes: application/json contentType: application/json diff --git a/charts/internal/control-plane/templates/cloud-controller-manager.yaml b/charts/internal/control-plane/templates/cloud-controller-manager.yaml index 27f091bd0..f1efd9d69 100644 --- a/charts/internal/control-plane/templates/cloud-controller-manager.yaml +++ b/charts/internal/control-plane/templates/cloud-controller-manager.yaml @@ -50,6 +50,9 @@ spec: networking.gardener.cloud/to-private-networks: "allowed" networking.gardener.cloud/to-public-networks: allowed networking.resources.gardener.cloud/to-kube-apiserver-tcp-443: "allowed" +{{- if .Values.cloudControllerManager.podLabels }} +{{ toYaml .Values.cloudControllerManager.podLabels | indent 8 }} +{{- end }} spec: tolerations: - effect: NoExecute diff --git a/charts/internal/control-plane/templates/firewall-controller-manager.yaml b/charts/internal/control-plane/templates/firewall-controller-manager.yaml index b63f70e9c..3f733fa28 100644 --- a/charts/internal/control-plane/templates/firewall-controller-manager.yaml +++ b/charts/internal/control-plane/templates/firewall-controller-manager.yaml @@ -106,6 +106,9 @@ spec: networking.gardener.cloud/to-shoot-apiserver: "allowed" networking.gardener.cloud/to-runtime-apiserver: "allowed" networking.resources.gardener.cloud/to-kube-apiserver-tcp-443: "allowed" +{{- if .Values.firewallControllerManager.podLabels }} +{{ toYaml .Values.firewallControllerManager.podLabels | indent 8 }} +{{- end }} {{- if .Values.podAnnotations }} annotations: {{ toYaml .Values.podAnnotations | indent 8 }} diff --git a/charts/internal/control-plane/values.yaml b/charts/internal/control-plane/values.yaml index 357d35ec4..df80db0e6 100644 --- a/charts/internal/control-plane/values.yaml +++ b/charts/internal/control-plane/values.yaml @@ -12,6 +12,7 @@ imagePullSecret: imagePullPolicy: IfNotPresent firewallControllerManager: + podLabels: {} replicas: 1 clusterID: cluster-id seedApiURL: address-to-the-seed-apiserver @@ -29,6 +30,7 @@ firewallControllerManager: cloudControllerManager: additionalParameters: [] podAnnotations: {} + podLabels: {} replicas: 1 podNetwork: 192.168.0.0/16 projectID: project-id diff --git a/example/controller-registration.yaml b/example/controller-registration.yaml index 583345871..1bb0ce514 100644 --- a/example/controller-registration.yaml +++ b/example/controller-registration.yaml @@ -5,10 +5,10 @@ metadata: name: provider-metal type: helm providerConfig: - chart: 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 + chart: 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 values: image: - tag: v0.21.3 + tag: v0.22.1 --- apiVersion: core.gardener.cloud/v1beta1 kind: ControllerRegistration diff --git a/pkg/apis/config/types.go b/pkg/apis/config/types.go index fc16ad907..4661c8a85 100644 --- a/pkg/apis/config/types.go +++ b/pkg/apis/config/types.go @@ -18,6 +18,9 @@ type ControllerConfiguration struct { // settings for the proxy server to use when communicating with the apiserver. ClientConnection *componentbaseconfig.ClientConnectionConfiguration + // AdditionalPodLabels are additional labels attached to pods deployed by this extension controller. + AdditionalPodLabels map[string]string + // MachineImages is the list of machine images that are understood by the controller. It maps // logical names and versions to metal-specific identifiers, i.e. AMIs. MachineImages []MachineImage diff --git a/pkg/apis/config/v1alpha1/types.go b/pkg/apis/config/v1alpha1/types.go index 045a86df5..e3711abf7 100644 --- a/pkg/apis/config/v1alpha1/types.go +++ b/pkg/apis/config/v1alpha1/types.go @@ -19,6 +19,9 @@ type ControllerConfiguration struct { // +optional ClientConnection *componentbaseconfigv1alpha1.ClientConnectionConfiguration `json:"clientConnection,omitempty"` + // AdditionalPodLabels are additional labels attached to pods deployed by this extension controller. + AdditionalPodLabels map[string]string `json:"additionalPodLabels,omitempty"` + // MachineImages is the list of machine images that are understood by the controller. It maps // logical names and versions to metal-specific identifiers, i.e. AMIs. MachineImages []MachineImage `json:"machineImages,omitempty"` diff --git a/pkg/apis/config/v1alpha1/zz_generated.conversion.go b/pkg/apis/config/v1alpha1/zz_generated.conversion.go index c9e2c6fbd..a9f770370 100644 --- a/pkg/apis/config/v1alpha1/zz_generated.conversion.go +++ b/pkg/apis/config/v1alpha1/zz_generated.conversion.go @@ -216,6 +216,7 @@ func Convert_config_ClusterAudit_To_v1alpha1_ClusterAudit(in *config.ClusterAudi func autoConvert_v1alpha1_ControllerConfiguration_To_config_ControllerConfiguration(in *ControllerConfiguration, out *config.ControllerConfiguration, s conversion.Scope) error { out.ClientConnection = (*componentbaseconfig.ClientConnectionConfiguration)(unsafe.Pointer(in.ClientConnection)) + out.AdditionalPodLabels = *(*map[string]string)(unsafe.Pointer(&in.AdditionalPodLabels)) out.MachineImages = *(*[]config.MachineImage)(unsafe.Pointer(&in.MachineImages)) out.FirewallInternalPrefixes = *(*[]string)(unsafe.Pointer(&in.FirewallInternalPrefixes)) if err := Convert_v1alpha1_ETCD_To_config_ETCD(&in.ETCD, &out.ETCD, s); err != nil { @@ -244,6 +245,7 @@ func Convert_v1alpha1_ControllerConfiguration_To_config_ControllerConfiguration( func autoConvert_config_ControllerConfiguration_To_v1alpha1_ControllerConfiguration(in *config.ControllerConfiguration, out *ControllerConfiguration, s conversion.Scope) error { out.ClientConnection = (*configv1alpha1.ClientConnectionConfiguration)(unsafe.Pointer(in.ClientConnection)) + out.AdditionalPodLabels = *(*map[string]string)(unsafe.Pointer(&in.AdditionalPodLabels)) out.MachineImages = *(*[]MachineImage)(unsafe.Pointer(&in.MachineImages)) out.FirewallInternalPrefixes = *(*[]string)(unsafe.Pointer(&in.FirewallInternalPrefixes)) if err := Convert_config_ETCD_To_v1alpha1_ETCD(&in.ETCD, &out.ETCD, s); err != nil { diff --git a/pkg/apis/config/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/config/v1alpha1/zz_generated.deepcopy.go index 0299746cb..1b40db863 100644 --- a/pkg/apis/config/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/config/v1alpha1/zz_generated.deepcopy.go @@ -56,6 +56,13 @@ func (in *ControllerConfiguration) DeepCopyInto(out *ControllerConfiguration) { *out = new(configv1alpha1.ClientConnectionConfiguration) **out = **in } + if in.AdditionalPodLabels != nil { + in, out := &in.AdditionalPodLabels, &out.AdditionalPodLabels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } if in.MachineImages != nil { in, out := &in.MachineImages, &out.MachineImages *out = make([]MachineImage, len(*in)) diff --git a/pkg/apis/config/zz_generated.deepcopy.go b/pkg/apis/config/zz_generated.deepcopy.go index 318204967..4b13415e9 100644 --- a/pkg/apis/config/zz_generated.deepcopy.go +++ b/pkg/apis/config/zz_generated.deepcopy.go @@ -56,6 +56,13 @@ func (in *ControllerConfiguration) DeepCopyInto(out *ControllerConfiguration) { *out = new(componentbaseconfig.ClientConnectionConfiguration) **out = **in } + if in.AdditionalPodLabels != nil { + in, out := &in.AdditionalPodLabels, &out.AdditionalPodLabels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } if in.MachineImages != nil { in, out := &in.MachineImages, &out.MachineImages *out = make([]MachineImage, len(*in)) diff --git a/pkg/controller/controlplane/valuesprovider.go b/pkg/controller/controlplane/valuesprovider.go index c54d6bbb1..e12e489ab 100644 --- a/pkg/controller/controlplane/valuesprovider.go +++ b/pkg/controller/controlplane/valuesprovider.go @@ -528,7 +528,7 @@ func (vp *valuesProvider) GetControlPlaneChartValues( return nil, fmt.Errorf("could not get ca from secret: %w", err) } - ccmValues, err := getCCMChartValues(ctx, sshSecret, cpConfig, infrastructureConfig, infrastructure, cluster, checksums, scaledDown, mclient, metalControlPlane, nws, secretsReader) + ccmValues, err := getCCMChartValues(ctx, vp.controllerConfig, sshSecret, cpConfig, infrastructureConfig, infrastructure, cluster, checksums, scaledDown, mclient, metalControlPlane, nws, secretsReader) if err != nil { return nil, err } @@ -893,6 +893,7 @@ func (vp *valuesProvider) GetStorageClassesChartValues(_ context.Context, contro // getCCMChartValues collects and returns the CCM chart values. func getCCMChartValues( ctx context.Context, + config config.ControllerConfiguration, sshSecret *corev1.Secret, cpConfig *apismetal.ControlPlaneConfig, infrastructureConfig *apismetal.InfrastructureConfig, @@ -1000,6 +1001,7 @@ func getCCMChartValues( "checksum/secret-cloudprovider": checksums[v1beta1constants.SecretNameCloudProvider], "checksum/configmap-cloud-provider-config": checksums[metal.CloudProviderConfigName], }, + "podLabels": config.AdditionalPodLabels, "secrets": map[string]any{ "server": serverSecret.Name, }, @@ -1200,6 +1202,7 @@ func (vp *valuesProvider) getFirewallControllerManagerChartValues(ctx context.Co // This will break the firewall-only case actually only used in our test env. // TODO: deletion of the firewall is not yet implemented. "replicas": extensionscontroller.GetReplicas(cluster, 1), + "podLabels": vp.controllerConfig.AdditionalPodLabels, "clusterID": string(cluster.Shoot.GetUID()), "seedApiURL": seedApiURL, "shootApiURL": fmt.Sprintf("https://api.%s", *cluster.Shoot.Spec.DNS.Domain), diff --git a/pkg/controller/worker/machine_controller_manager.go b/pkg/controller/worker/machine_controller_manager.go index f6a9815f2..afc7eb65d 100644 --- a/pkg/controller/worker/machine_controller_manager.go +++ b/pkg/controller/worker/machine_controller_manager.go @@ -48,6 +48,7 @@ func (w *workerDelegate) GetMachineControllerManagerChartValues(ctx context.Cont "namespace": map[string]interface{}{ "uid": namespace.UID, }, + "podLabels": w.controllerConfig.AdditionalPodLabels, }, nil } From 3241b91d723eb6f76e37f1d65a1e1485b709488c Mon Sep 17 00:00:00 2001 From: Gerrit Date: Tue, 20 Feb 2024 17:05:19 +0100 Subject: [PATCH 2/2] Fix indent. --- .../gardener-extension-provider-metal/templates/configmap.yaml | 2 +- example/controller-registration.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/gardener-extension-provider-metal/templates/configmap.yaml b/charts/gardener-extension-provider-metal/templates/configmap.yaml index 80e2761c9..43334b062 100644 --- a/charts/gardener-extension-provider-metal/templates/configmap.yaml +++ b/charts/gardener-extension-provider-metal/templates/configmap.yaml @@ -32,7 +32,7 @@ data: {{- end }} {{- if .Values.config.additionalPodLabels }} additionalPodLabels: -{{ toYaml .Values.config.additionalPodLabels | indent 4 }} +{{ toYaml .Values.config.additionalPodLabels | indent 6 }} {{- end }} etcd: storage: diff --git a/example/controller-registration.yaml b/example/controller-registration.yaml index 1bb0ce514..bd0b9332e 100644 --- a/example/controller-registration.yaml +++ b/example/controller-registration.yaml @@ -5,7 +5,7 @@ metadata: name: provider-metal type: helm providerConfig: - chart: H4sIAAAAAAAAA+0ca2/cNjKf9SsIuUXbQ6R92gkE5FDXdhPfJbFh+9I7FEWglehdxVpRFSU7bpr/fsOXRL1WKzt12kaEAa+omeGQnBkOh0Mt3cTHEU4s/D7FEQ1IZMUJuQ58qFrj1A1Hj+5dxlCe7O7y/1Cq//nvyWw+me5O9/ZY/WRvNp4/Qrv3b7q7ZDR1E4QeJYSkm+C63v9Fy7Jz/g9WbpLat+46vGsbbIL35vPW+Z/O5uX5n0LV+BEaf8qOtpUvfP7dOHiDEzbvDrqeGG4c54/mxB6bho+plwRxyqv20QscrpHHRAJdkgSlK4yeSxFCr5i8oFMpPiiXKCNy19hBnaJmXKumxza0bXzusfkSSrf++8Szl+Q+bXTp/+7sScX+P5mPdwf9f4gyGi2Js2QS4KYY0RWyPGTa9gj+rnHkk2S0DNJVtrA9sh4pYSl+rFzvaqTQLY9EaULCEGQnwcuAplALEmUD2bJQIRt99a3npki09Obo7Pz45PV38hG/d9dxiEdt5NhahA7Ey9PQjbAjiB5Hl4kLUJmXZomq/IkkVzgRD6ZhjEboFHh2l1haMRy5ixBTVBqGLI6JtHCyMoiW3Nh5JEmwl6KCN1TizYh16n9+E9at/ymGyYBRoXf2BHv7f9PxbDwd/L+HKH3m/+0KhzEs0XYa9/IFO+z/ZDrdq8z/dG862P8HKR8+WMjHl0GEkcncNBNZHz8a3a4aw4P1gUMbOpHQXeCQ2uBI2lf4VpDjD9kCJxEGObIDMmJNlWi0kLh2w0zy9OEDCiIvzPycUxtJxA2M1HGrDDIqDmqBkO3zluq9CCIQnsjDHN0+wyF2KbZfA3ONnOWsBWtYIQRnCLE3wSVaufQ0gffvkUlX7nR3z4Fm37DmoSkGb6fuEuUYcRJE6SUyv6bff02rkAmOCQ1SktxuIgF9xE0EnTsThM5q/a5OiI/jkNyucZRKPz8XDjqCrYc+XJ9bK76c0sf+g89zGSzXbmzxyb8GP4gkFoHZvEmCFLfGCLr8//nerGL/n7Cqwf4/QJHWp6TVb/jEnqh5FbavFCa4CiLfYS44yMMrNzaYpPhu6jpgCcRmv9laNwuORKLgOjeYUl4tjIwwzE6DOWfkf4dKkOUUzRm0Yoe3SN+WpdRBvzMiG3tdJqcZtc89ZZ+03En/e0YDO/R/d16L/80msyeD/j9E+VSKncvGH6rMopVchREUy7L4f70jXHBtJcd2LtrUlgSU1NteSDIfvA83jFfuhBPKh0Du78VgZGJ/b1TspaTnhQHwCpARGBEAEz0Efiv1Dq8FZj0Px6weGEsvbmNM+VAl+NcsSLCPzA76dp0ACmiOb3bx14QvWeaDrGp7cqVh9mNHR8z5+DXuOyqA0a9dhpC3t8gSmvZskeP0a1OglJeUZqlau94KPOdjvoIpPkuVXHtS8j8WENuI3LqYNbd8CV25ccPwGKYlidxQ7EwKJtreb+CnlWQra6yhHfTj8X9fHcHwrmEFb+EWLxNM6SGmaRBxLc35rL/ZwGEDmZ7D5vp+wBChd8R/yW2Z4qTh1QZWmghtHCecer4yLhTcGJh09ciskEvpa2W9q70GTFui2DlkoRWA7oLRDtLbbmwJqKmU611lccEJ9VbYz8J2RgSCreB0Nnwcpu555MZ0RdJTnATE7yLTgFJYZlj4cbKfwUAr/kQouJGqDm5LuHxqWeUFOY/DLLraglYJXifWIlRt4KKhFfYuyBWOultSkAUuE6j33YgcrNTiCyItZVeDDLCEeUqS7TAZYIGZhvRo2xEtYEstH+z/GDDJK3n+ba0L4ELnntZVrqJmfpYQWkj6hvlX6sIxuue/FVw1FbtJyq2F8FQ2mJUyqQpe0dnJtMHC8D3SaRaCRQoDr9EYVEDau5QDnmMvwUyhPOJj/5B4V8rf+tf5yeta0wK8ULFGrI2cdTf4d93otZQ++78igNdvA7h5/zeZzKaT6v5vBuDD/u8Bir5tUpFYsQM6zGd7613gH7L3ozH2WMMJvg4Yny8CZsZuXwZrWLnRmL+Jwd64tKT5svKAZJFcRyjwwkI8jvSjU2/1cjs+9gQBpQmSgDYo3A2IIpIqJ1PZ5i3Da7mrBUvPFc3WWqiVK2Fz3Kw0Dd/yAD76yr6QXNo/wMCfuukKmVtFbs3veJfF4QPwoPNVWQtaWN0YGrgDs1uxBaPrAmdqhGG4ksBT6+S5l4CAR8vScpkQAFrhLD+IcpDZcH5jtmBQRpPhpEmGC6Adds7hZmGKJAtswGLCuhlEWrqAlYBABmvcQj3m/pGpCbIkJ/0hs31OlFIpgAinNyQBZa7FO1KiuLBgeChOQBBA/cOQ3GB/O3wfpLwfRpwtQCEtCdMbOwmuWYrJVuiwjyNZ4sHg1QkBmgXbAZJSix3mFQNgpV5szeezgnKHVXiqOTi6CGrLZJjvAes+WR2sTll3N6UZ5LoH0uTC5j7JZ9vqssuicO0vi1ftgO/jR6f2WhzzmWU6Lc6gwIhLbmBuNMh6DUNVyKiFRg0eiLB5q9sYJxpk2S/Rk42AJrSpw1rS6liX4MY/G8GmcNQ8NNLajLTIYpUMayVmaUbQzntW4WVJAtNkJZg9QAP0WdnllHzlvzm2XWCe30Ye1ceFtbTC4I8vsJta+Rr6bMMS2oQItPGNFbAIyzWMEGX8+a3M5Xg2xzuWaOcCq9pKUEqu6j8UZfyuwQiWEYFWSIxF3NUqVtfWBjjKicLYzxGqtG94Rlj/Hgi8Ls5v8AKsy5WSv55zWcGWloktCjpXEupA7uo4UHm/LKj5AWWroKYqpc7J10Wom5mgd7BkIfOx2UZLtt1E6Cf5qoVKxRcqr2ultuQrawH20HJ9n8Xlnjmta+ImN0UqSJiu2qmJ902M5LZJZizonc6XFvlOx8XRtW7jhG1+ebR/eHT29ujl0cHF8cnrt6/3Xx2dn+4fHOWQCPF8kx/BI3C0ShZvxaF/hi/LtbKeuU1O7o7aucTd1QlV/B6/2n9+9AaYPTl7e/Lm6Oyns+OLGq8OGvFMR+2EddR45LppksLgGkaS0tOELLDex1Waxs+LHb8oMe/vSMzab+VX1ehS89SywkKMrJcvLi5OtRdBFKSBGx7i0L2VltBBk3EOkWDXD3rzyrBuH4TVXUNvgNalUFkYYTU0crlTUQvRbWNuuB+bEo+EDro4OK0GfnKPTMfJK5tCVgXG7yhSgalxg2PEyjUJszV+xfZ6DV0WxlRjdc0Ahdp0uwb3VaO2lIcmZmqqpMExGTqJQnC22MajXZ3Y/AQe3vc8Rvh1t1u4g9zLSyZMt05ew8TH34ctwn7DK5Sfdh1msI9bnotoPfw65muwrD56j71MP/XckePC3d3z0m5cveQDwnbmR+9jZqf13XQBYaErfNuas5dn9dXwEBIOBbSKjqOG19ykNTTImtwiQ7CMlpKYhGR5+2/Gq1nOHFwRmvKJkDhCgGvufEUCPXUurxuZrY/lVZH71FfEB7z5VNm2XuK9nXD357dLWTbw/gUFbT9h6RP/BZMAnl6S8ctgi8xf4u0CwZ33f+aV+z/w48l0iP8+RJFav0zRtyxU1RQ9/Q5NqimAMd/Zj64nCxARFTA+Jf5hLh4/cPH4c0SOYaf3n8i9doOQ7VI4eZotOjt874jxX8Eq9dH/ZOF6d7kI3KH/871J7f7HZDyc/zxIYelzumbzOXazdEWS4Ddxpe3qKXdZiuxAkQtxRkLcR7/7aG6ShcwZslhW3/OEZDH3jCykZfKVI7tGaTfBQGXGBhUPWhyuoWYEMpBm4kU5TtVYp4OLoFDpd/EaHJiFZIcZQ+77BlT8uGHWhP+K819ZDGOJ691ui2fXey0ioX5eW2bC/IdZJ+4Rkvgy40nOdZ0ut8UVah7sSLhzVuvVPdtQ9dz0i3eV2C+AsgdunllWJh/huiXLI5zNc9E23KbJ/7HjUP5jkU9Qq3YIBH8d8C1L6UaoDhAHmgRrL7Szi7bRyZdHWnkcwQbNDYPflBSC+wy7YP6T8myHXODFTkBCycMp8VScRdSeR9RzQyzJ8Z0l1R9csc2kus6BXuFaBYu+Qf9EfQFRe/WOLMQP8DaLHyPYSAkBz1J+GVfGJDw9OVeAw4Ys8DtgPGCLrNUI8wtKQfFWzgZ3coKtdEgmW9rUjbliNs4gw+wmBdJF2JBvkgWgkYKzEsLIKHAx+xXiOyIT2mKOUHAZeKjNrkqw1PWuGhtUyZulWb0JmL71HSpFyu7XZv6k5FlVlEW3q3WVAdXVOM+Q2oKev8VKBDDAXRJIiS8e+ywU91kKoUV2upH4tPLYi4F7OQo/CBX/w/wFaEKGx9UwbeDQyJP8NU+mgx/YMLyDxYYrj0A+L8XZPs3+5uH9vz7+vzT5vbcAHf7/dHdevf8z3ZsN9/8epDTe/5Gi/el377UcqW2SNi4TsmaHtqFvsUQQfqyBvvn5g6lOHEzHvDg4NR+b7J3pbHdy8fGXb/pxwBNHMPYtkQBkgdiAqaSWzBYpMVblo3xe+bjK+Z14UQc5m/h4qAHKZ99SIRPJgRYzgXYrQfDSkSXwKIiaMEA1xEp7zN4DAs/jMXtxCi6TxVeRnNPiiB6GMGBZhMXSaoh4/sXJ4YmDLlYBFasS2xokBHw+dvMHHBBYTsFA+jwLKCIoJNESJ8AOeJY+y/5iH465zHjeAzrjN1lY1Rq5FFFCIva/9mmd768n9pNd9lkAtMA4gjWda5Rv95MUEamz6t3maU5NAn0n+p9MCe4S30v5TTW5mB+zI9IicLddZmd+VmrJc9n5fMbHoXyoyU91+Cj1OiP93DZ+U7nD+i+3fNu7AV3x/+m8mv89n46H7/89SNm0/ivX9rMG8T/3AP3NS7f+izPx+3wAtEP/Z7Mn1fj/eHfQ/4cpIiOYxwxUBrCDlisvUQ6ajJI0pelWPgnF1salg/hawfbDsZYfvB/euLfUMPRjNgdNjCJSgT58NIwimOMUZoK/0ZwHBz0dPx0bRb4Ur5gYhpbmKD8WkIf4xW6jkropsqXKwf0NgHk0WcA0Jc06aMZSEsRBwKY223JVHXTphhTDSNRyMx308y9GJdOS1xk7qClZg910ZKkogbwpvqOlbcRuRkVaKM/4MkTKipiKM10Qim8/Fq67/nMRksVo7TLHa7TIghAcbEZ6JG7WseRrQ2UMaVSFdC0JWYb4bZHMLnAtd+3vzSUalyhzxj5EKyryT8RO7MnEfv/X7tWk1ivzn89Yz6bihW3bhlHyLB1DJHipLD3mpxo7O1CXsog35Z+slLryGGF7aSOq7sAsbhF394sLJ4CpFIsRBjri2kx+hUXh8peGutWqbtXITDTDy1lruuXO1LftSxhN38GAvRUzEQxo9I6SSGlR8U2KRgj+tYjJWGQEyU85TLg2lr+YwDSm8lWBxu8EMLgNHzoQr4tr95XbwMWVe1WhLtEL/kr34vNb8YZKcqrfdDearqznl4yF0Wi8il6D0a6M8ydxCVy94De71QOXMbHrKe5fq5fyPrVR6XvpHnRD4/X7ykJAaldKji9fQ+9hXjCPrjZeAm67AmzkXzAUCqPYViuW/ETM4FwOZShDGcpQhjKUoQxlKEMZylCGMpShDGUoQxnKUIYylL9h+T8cHdQpAHgAAA== + chart: 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 values: image: tag: v0.22.1