diff --git a/api/k8sdeps/kunstruct/factory.go b/api/k8sdeps/kunstruct/factory.go index 36e24aea0..ee3cd4597 100644 --- a/api/k8sdeps/kunstruct/factory.go +++ b/api/k8sdeps/kunstruct/factory.go @@ -52,7 +52,9 @@ func (kf *KunstructuredFactoryImpl) SliceFromBytes( if err != nil { return nil, err } - result = append(result, &UnstructAdapter{Unstructured: out}) + if !kf.skipResource(out) { + result = append(result, &UnstructAdapter{Unstructured: out}) + } } } if err != io.EOF { @@ -116,6 +118,22 @@ func (kf *KunstructuredFactoryImpl) validate(u unstructured.Unstructured) error return nil } +// nonKustomizableResourceAnnotation if set on a Resource will cause Kustomize to +// ignore the Resource rather than Kustomize it. +const ignoredByKustomizeResourceAnnotation = "config.kubernetes.io/local-config" + +// skipResource returns true if the Resource should not be accumulated +func (kf *KunstructuredFactoryImpl) skipResource(u unstructured.Unstructured) bool { + an := u.GetAnnotations() + if an == nil { + // annotation unset + return false + } + // check if the Resource has opt-ed out of kustomize + _, found := an[ignoredByKustomizeResourceAnnotation] + return found +} + func checkListItemNil(in interface{}) (bool, string) { switch v := in.(type) { case map[string]interface{}: diff --git a/api/k8sdeps/kunstruct/factory_test.go b/api/k8sdeps/kunstruct/factory_test.go index b52a73a35..97d2203b7 100644 --- a/api/k8sdeps/kunstruct/factory_test.go +++ b/api/k8sdeps/kunstruct/factory_test.go @@ -105,6 +105,25 @@ metadata: expectedOut: []ifc.Kunstructured{testConfigMap, testConfigMap}, expectedErr: false, }, + { + name: "localConfigYaml", + input: []byte(` +apiVersion: v1 +kind: ConfigMap +metadata: + name: winnie-skip + annotations: + # this annotation causes the Resource to be ignored by kustomize + config.kubernetes.io/local-config: "" +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: winnie +`), + expectedOut: []ifc.Kunstructured{testConfigMap}, + expectedErr: false, + }, { name: "garbageInOneOfTwoObjects", input: []byte(`