diff --git a/core/src/plugins/kubernetes/kubernetes-type/deploy.ts b/core/src/plugins/kubernetes/kubernetes-type/deploy.ts index f7946c99ca..28727ebb2d 100644 --- a/core/src/plugins/kubernetes/kubernetes-type/deploy.ts +++ b/core/src/plugins/kubernetes/kubernetes-type/deploy.ts @@ -24,6 +24,7 @@ import { uniq } from "lodash" import { DOCS_BASE_URL } from "../../../constants" import { kubernetesGetSyncStatus, kubernetesStartSync } from "./sync" import { k8sContainerStopSync } from "../container/sync" +import { isTruthy } from "../../../util/util" export const kubernetesDeployDocs = dedent` Specify one or more Kubernetes manifests to deploy. @@ -44,7 +45,8 @@ export const kubernetesDeployDefinition = (): DeployActionDefinition { // The `spec` field hasn't been validated here yet, // so the value of `files` might be `undefined` instead of a default empty array - let files = config.spec.files || [] + // also we discard any falsy file values in files array + let files = (config.spec.files || []).filter(isTruthy) if (files.length > 0 && !config.spec.kustomize) { if (!config.include) { diff --git a/core/test/data/test-projects/kubernetes-type-conditional-manifests/config.map-list/garden.yml b/core/test/data/test-projects/kubernetes-type-conditional-manifests/config.map-list/garden.yml new file mode 100644 index 0000000000..b346418863 --- /dev/null +++ b/core/test/data/test-projects/kubernetes-type-conditional-manifests/config.map-list/garden.yml @@ -0,0 +1,8 @@ +kind: "Deploy" +type: "kubernetes" +name: "config-map-list" +variables: + foo: false +spec: + files: + - "${var.foo ? 'manifests.yaml' : null}" diff --git a/core/test/data/test-projects/kubernetes-type-conditional-manifests/config.map-list/manifests.yaml b/core/test/data/test-projects/kubernetes-type-conditional-manifests/config.map-list/manifests.yaml new file mode 100644 index 0000000000..1327f2da32 --- /dev/null +++ b/core/test/data/test-projects/kubernetes-type-conditional-manifests/config.map-list/manifests.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +items: + - apiVersion: v1 + data: + foo.json: test + kind: ConfigMap + metadata: + name: foo + - apiVersion: v1 + data: + bar.json: test + kind: ConfigMap + metadata: + name: bar + - apiVersion: v1 + data: + baz.json: test + kind: ConfigMap + metadata: + name: baz +kind: ConfigMapList diff --git a/core/test/data/test-projects/kubernetes-type-conditional-manifests/garden.yml b/core/test/data/test-projects/kubernetes-type-conditional-manifests/garden.yml new file mode 100644 index 0000000000..9722c148c1 --- /dev/null +++ b/core/test/data/test-projects/kubernetes-type-conditional-manifests/garden.yml @@ -0,0 +1,7 @@ +apiVersion: garden.io/v1 +kind: Project +name: test-kubernetes-type-conditional-manifests +environments: + - name: local +providers: + - name: local-kubernetes diff --git a/core/test/data/test-projects/kubernetes-type/config-map-list/manifests.yaml b/core/test/data/test-projects/kubernetes-type/config-map-list/manifests.yaml index e09f886ec3..1327f2da32 100644 --- a/core/test/data/test-projects/kubernetes-type/config-map-list/manifests.yaml +++ b/core/test/data/test-projects/kubernetes-type/config-map-list/manifests.yaml @@ -1,21 +1,21 @@ apiVersion: v1 items: -- apiVersion: v1 - data: - foo.json: test - kind: ConfigMap - metadata: - name: foo -- apiVersion: v1 - data: - bar.json: test - kind: ConfigMap - metadata: - name: bar -- apiVersion: v1 - data: - baz.json: test - kind: ConfigMap - metadata: - name: baz + - apiVersion: v1 + data: + foo.json: test + kind: ConfigMap + metadata: + name: foo + - apiVersion: v1 + data: + bar.json: test + kind: ConfigMap + metadata: + name: bar + - apiVersion: v1 + data: + baz.json: test + kind: ConfigMap + metadata: + name: baz kind: ConfigMapList diff --git a/core/test/integ/src/plugins/kubernetes/kubernetes-type/config.ts b/core/test/integ/src/plugins/kubernetes/kubernetes-type/config.ts index 3cde6ceb42..ba60bf59b7 100644 --- a/core/test/integ/src/plugins/kubernetes/kubernetes-type/config.ts +++ b/core/test/integ/src/plugins/kubernetes/kubernetes-type/config.ts @@ -9,7 +9,7 @@ import { expect } from "chai" import { cloneDeep } from "lodash" -import { TestGarden } from "../../../../../helpers" +import { TestGarden, getDataDir, makeTestGarden } from "../../../../../helpers" import { ModuleConfig } from "../../../../../../src/config/module" import { apply } from "json-merge-patch" import { getKubernetesTestGarden } from "./common" @@ -174,3 +174,18 @@ describe("configureKubernetesModule", () => { expect(configExclude.include).to.be.undefined }) }) + +describe("configureKubernetesType", () => { + let garden: TestGarden + + before(async () => { + const projectRoot = getDataDir("test-projects", "kubernetes-type-conditional-manifests") + garden = await makeTestGarden(projectRoot) + }) + + it("should resolve fine with null values for manifests in spec.files", async () => { + const graph = await garden.getConfigGraph({ log: garden.log, emit: false }) + const action = graph.getDeploy("config-map-list") + expect(action["_config"].spec.files).to.eql([null]) + }) +})