diff --git a/hack/testdata/multi-resource.yaml b/hack/testdata/multi-resource.yaml new file mode 100644 index 00000000000..7acb111c78d --- /dev/null +++ b/hack/testdata/multi-resource.yaml @@ -0,0 +1,19 @@ +# Tests that initial failures to not block subsequent applies. +# Pod must be before namespace, so it initially fails. Second +# apply of pod should succeed, since namespace finally exists. +apiVersion: v1 +kind: Pod +metadata: + name: test-pod + namespace: multi-resource-ns + labels: + name: test-pod-label +spec: + containers: + - name: kubernetes-pause + image: k8s.gcr.io/pause:2.0 +--- +apiVersion: v1 +kind: Namespace +metadata: + name: multi-resource-ns diff --git a/test/cmd/apply.sh b/test/cmd/apply.sh index 0181b8e3c7e..f9d5f8d8040 100755 --- a/test/cmd/apply.sh +++ b/test/cmd/apply.sh @@ -274,6 +274,19 @@ __EOF__ # cleanup kubectl delete --kustomize hack/testdata/kustomize + ## kubectl apply multiple resources with initial failure. + # Pre-Condition: no POD exists + kube::test::get_object_assert pods "{{range.items}}{{${id_field:?}}}:{{end}}" '' + # First pass, namespace is created, but pod is not (since namespace does not exist yet). + kubectl apply -f hack/testdata/multi-resource.yaml "${kube_flags[@]:?}" + output_message=$(! kubectl get pods test-pod 2>&1 "${kube_flags[@]:?}") + kube::test::if_has_string "${output_message}" 'pods "test-pod" not found' + # Second pass, pod is created (now that namespace exists). + kubectl apply -f hack/testdata/multi-resource.yaml "${kube_flags[@]:?}" + kube::test::get_object_assert 'pod test-pod' "{{${id_field}}}" 'test-pod' + # cleanup + kubectl delete -f hack/testdata/multi-resource.yaml + set +o nounset set +o errexit }