diff --git a/charts/kvisor/templates/_helpers.tpl b/charts/kvisor/templates/_helpers.tpl index 20788377..44689878 100644 --- a/charts/kvisor/templates/_helpers.tpl +++ b/charts/kvisor/templates/_helpers.tpl @@ -265,6 +265,15 @@ When storage-stats-enabled (without eBPF): {{- toYaml $secCtx -}} {{- end -}} +{{/* +Resolve cloud provider for --cloud-provider arg. +Only used as a fallback when controller.extraArgs.cloud-provider is not set. +*/}} +{{- define "kvisor.cloudProvider" -}} +{{- $global := .Values.global | default dict -}} +{{- dig "castai" "provider" "" $global -}} +{{- end }} + {{/*https://github.com/kubernetes/kubernetes/issues/91514#issuecomment-2209311103*/}} {{- define "GOMEMLIMITEnv" -}} {{- $memory := . -}} diff --git a/charts/kvisor/templates/controller.yaml b/charts/kvisor/templates/controller.yaml index 5cfa0216..e59b8a01 100644 --- a/charts/kvisor/templates/controller.yaml +++ b/charts/kvisor/templates/controller.yaml @@ -76,6 +76,13 @@ spec: {{- if eq .Values.agent.enabled true }} - "--agent-enabled=true" {{- end }} + {{- $extraArgs := .Values.controller.extraArgs | default dict }} + {{- if not (hasKey $extraArgs "cloud-provider") }} + {{- $cloudProvider := include "kvisor.cloudProvider" . }} + {{- if $cloudProvider }} + - "--cloud-provider={{ $cloudProvider }}" + {{- end }} + {{- end }} {{- if .Values.controller.netflow.staticCIDRs.mappings }} - "--cloud-provider-static-cidrs-file=/etc/kvisor/static-cidrs/static-cidrs.yaml" {{- end }} diff --git a/charts/kvisor/tests/cloud-provider/test.yaml b/charts/kvisor/tests/cloud-provider/test.yaml new file mode 100644 index 00000000..6bf091c6 --- /dev/null +++ b/charts/kvisor/tests/cloud-provider/test.yaml @@ -0,0 +1,184 @@ +suite: cloud provider configuration tests +templates: + - controller.yaml + - secret.yaml +values: + - values.yaml +tests: + - it: should not include --cloud-provider arg when neither extraArgs nor global is set + asserts: + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=gcp" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=gke" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=aws" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=eks" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=azure" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=aks" + template: controller.yaml + documentIndex: 0 + + - it: should use global.castai.provider as fallback + set: + global.castai.provider: eks + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=eks" + template: controller.yaml + documentIndex: 0 + + - it: should prefer extraArgs.cloud-provider over global + set: + global.castai.provider: eks + controller.extraArgs.cloud-provider: gcp + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=gcp" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=eks" + template: controller.yaml + documentIndex: 0 + + - it: should use extraArgs.cloud-provider when global is not set + set: + controller.extraArgs.cloud-provider: aws + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=aws" + template: controller.yaml + documentIndex: 0 + + - it: should use global.castai.provider as fallback for azure + set: + global.castai.provider: azure + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=azure" + template: controller.yaml + documentIndex: 0 + + - it: should not include --cloud-provider arg when global.castai.provider is empty string + set: + global.castai.provider: "" + asserts: + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=gcp" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=gke" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=aws" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=eks" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=azure" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=aks" + template: controller.yaml + documentIndex: 0 + + - it: should not include --cloud-provider arg when other extraArgs are set but neither cloud-provider nor global is set + set: + controller.extraArgs: + log-level: debug + asserts: + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=gcp" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=gke" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=aws" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=eks" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=azure" + template: controller.yaml + documentIndex: 0 + - notContains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=aks" + template: controller.yaml + documentIndex: 0 + - contains: + path: spec.template.spec.containers[0].args + content: "--log-level=debug" + template: controller.yaml + documentIndex: 0 + + - it: should pass through other extraArgs unchanged + set: + global.castai.provider: eks + controller.extraArgs: + log-level: debug + image-scan-enabled: "true" + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: "--cloud-provider=eks" + template: controller.yaml + documentIndex: 0 + - contains: + path: spec.template.spec.containers[0].args + content: "--log-level=debug" + template: controller.yaml + documentIndex: 0 + - contains: + path: spec.template.spec.containers[0].args + content: "--image-scan-enabled=true" + template: controller.yaml + documentIndex: 0 diff --git a/charts/kvisor/tests/cloud-provider/values.yaml b/charts/kvisor/tests/cloud-provider/values.yaml new file mode 100644 index 00000000..a226a106 --- /dev/null +++ b/charts/kvisor/tests/cloud-provider/values.yaml @@ -0,0 +1,9 @@ +agent: + enabled: true + +controller: + enabled: true + +castai: + apiKey: test-api-key + clusterID: test-cluster-id