diff --git a/clouddriver-kubernetes/src/main/java/com/netflix/spinnaker/clouddriver/kubernetes/op/manifest/KubernetesDeployManifestOperation.java b/clouddriver-kubernetes/src/main/java/com/netflix/spinnaker/clouddriver/kubernetes/op/manifest/KubernetesDeployManifestOperation.java index 718d9053a8..2e55972881 100644 --- a/clouddriver-kubernetes/src/main/java/com/netflix/spinnaker/clouddriver/kubernetes/op/manifest/KubernetesDeployManifestOperation.java +++ b/clouddriver-kubernetes/src/main/java/com/netflix/spinnaker/clouddriver/kubernetes/op/manifest/KubernetesDeployManifestOperation.java @@ -228,12 +228,16 @@ private List getManifestsFromDescription() { // check `manifest` for backwards compatibility until all existing stages have been updated. @SuppressWarnings("deprecation") KubernetesManifest manifest = description.getManifest(); - log.warn( - "Relying on deprecated single manifest input (account: {}, kind: {}, name: {})", - accountName, - manifest.getKind(), - manifest.getName()); - inputManifests = ImmutableList.of(manifest); + + // manifest may be null as well, so check + if (manifest != null) { + log.warn( + "Relying on deprecated single manifest input (account: {}, kind: {}, name: {})", + accountName, + manifest.getKind(), + manifest.getName()); + inputManifests = ImmutableList.of(manifest); + } } inputManifests = inputManifests.stream().filter(Objects::nonNull).collect(Collectors.toList()); return inputManifests; diff --git a/clouddriver-kubernetes/src/test/java/com/netflix/spinnaker/clouddriver/kubernetes/op/KubernetesDeployManifestOperationTest.java b/clouddriver-kubernetes/src/test/java/com/netflix/spinnaker/clouddriver/kubernetes/op/KubernetesDeployManifestOperationTest.java index 2af5aeee24..5b05816d08 100644 --- a/clouddriver-kubernetes/src/test/java/com/netflix/spinnaker/clouddriver/kubernetes/op/KubernetesDeployManifestOperationTest.java +++ b/clouddriver-kubernetes/src/test/java/com/netflix/spinnaker/clouddriver/kubernetes/op/KubernetesDeployManifestOperationTest.java @@ -503,6 +503,13 @@ void replaceStrategyWithLabelSelector() { anyString()); } + @Test + void deployEmptyResource() { + KubernetesDeployManifestDescription deployManifestDescription = + baseDeployDescription("deploy/empty-resource.yml"); + deploy(deployManifestDescription); + } + private static KubernetesDeployManifestDescription baseDeployDescription(String manifest) { return baseDeployDescription(manifest, false); } diff --git a/clouddriver-kubernetes/src/test/resources/com/netflix/spinnaker/clouddriver/kubernetes/op/deploy/empty-resource.yml b/clouddriver-kubernetes/src/test/resources/com/netflix/spinnaker/clouddriver/kubernetes/op/deploy/empty-resource.yml new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/clouddriver-kubernetes/src/test/resources/com/netflix/spinnaker/clouddriver/kubernetes/op/deploy/empty-resource.yml @@ -0,0 +1 @@ +