diff --git a/pkg/extras/RemoveTransformer.go b/pkg/extras/RemoveTransformer.go new file mode 100644 index 0000000..51b7ef0 --- /dev/null +++ b/pkg/extras/RemoveTransformer.go @@ -0,0 +1,46 @@ +package extras + +import ( + "fmt" + + "sigs.k8s.io/kustomize/api/resmap" + "sigs.k8s.io/kustomize/api/types" + "sigs.k8s.io/kustomize/kyaml/errors" + "sigs.k8s.io/yaml" +) + +type RemoveTransformerPlugin struct { + Targets []*types.Selector `json:"targets,omitempty" yaml:"targets,omitempty"` +} + +func (p *RemoveTransformerPlugin) Config( + h *resmap.PluginHelpers, c []byte) (err error) { + err = yaml.Unmarshal(c, p) + if err != nil { + return err + } + return err +} + +func (p *RemoveTransformerPlugin) Transform(m resmap.ResMap) error { + if p.Targets == nil { + return fmt.Errorf("must specify at least one target") + } + for _, t := range p.Targets { + resources, err := m.Select(*t) + if err != nil { + return errors.WrapPrefixf(err, "while selecting target %s", t.String()) + } + for _, r := range resources { + err = m.Remove(r.CurId()) + if err != nil { + return errors.WrapPrefixf(err, "while removing resource %s", r.CurId().String()) + } + } + } + return nil +} + +func NewRemoveTransformerPlugin() resmap.TransformerPlugin { + return &RemoveTransformerPlugin{} +} diff --git a/pkg/plugins/builtinplugintype_string.go b/pkg/plugins/builtinplugintype_string.go index 0b304a4..3b51cfe 100644 --- a/pkg/plugins/builtinplugintype_string.go +++ b/pkg/plugins/builtinplugintype_string.go @@ -28,11 +28,12 @@ func _() { _ = x[HelmChartInflationGenerator-17] _ = x[ReplacementTransformer-18] _ = x[GitConfigMapGenerator-19] + _ = x[RemoveTransformer-20] } -const _BuiltinPluginType_name = "UnknownAnnotationsTransformerConfigMapGeneratorIAMPolicyGeneratorHashTransformerImageTagTransformerLabelTransformerNamespaceTransformerPatchJson6902TransformerPatchStrategicMergeTransformerPatchTransformerPrefixSuffixTransformerPrefixTransformerSuffixTransformerReplicaCountTransformerSecretGeneratorValueAddTransformerHelmChartInflationGeneratorReplacementTransformerGitConfigMapGenerator" +const _BuiltinPluginType_name = "UnknownAnnotationsTransformerConfigMapGeneratorIAMPolicyGeneratorHashTransformerImageTagTransformerLabelTransformerNamespaceTransformerPatchJson6902TransformerPatchStrategicMergeTransformerPatchTransformerPrefixSuffixTransformerPrefixTransformerSuffixTransformerReplicaCountTransformerSecretGeneratorValueAddTransformerHelmChartInflationGeneratorReplacementTransformerGitConfigMapGeneratorRemoveTransformer" -var _BuiltinPluginType_index = [...]uint16{0, 7, 29, 47, 65, 80, 99, 115, 135, 159, 189, 205, 228, 245, 262, 285, 300, 319, 346, 368, 389} +var _BuiltinPluginType_index = [...]uint16{0, 7, 29, 47, 65, 80, 99, 115, 135, 159, 189, 205, 228, 245, 262, 285, 300, 319, 346, 368, 389, 406} func (i BuiltinPluginType) String() string { if i < 0 || i >= BuiltinPluginType(len(_BuiltinPluginType_index)-1) { diff --git a/pkg/plugins/factories.go b/pkg/plugins/factories.go index 87595e2..c6d8ba5 100644 --- a/pkg/plugins/factories.go +++ b/pkg/plugins/factories.go @@ -38,6 +38,7 @@ const ( HelmChartInflationGenerator ReplacementTransformer GitConfigMapGenerator + RemoveTransformer ) var stringToBuiltinPluginTypeMap map[string]BuiltinPluginType @@ -109,6 +110,7 @@ var TransformerFactories = map[BuiltinPluginType]func() resmap.TransformerPlugin ReplacementTransformer: extras.NewExtendedReplacementTransformerPlugin, ReplicaCountTransformer: builtins.NewReplicaCountTransformerPlugin, ValueAddTransformer: builtins.NewValueAddTransformerPlugin, + RemoveTransformer: extras.NewRemoveTransformerPlugin, // Do not wired SortOrderTransformer as a builtin plugin. // We only want it to be available in the top-level kustomization. // See: https://github.com/kubernetes-sigs/kustomize/issues/3913 diff --git a/tests/multi-replacement/functions/02_multi-transformation.yaml b/tests/multi-replacement/functions/02_multi-transformation.yaml index db0d991..333f531 100644 --- a/tests/multi-replacement/functions/02_multi-transformation.yaml +++ b/tests/multi-replacement/functions/02_multi-transformation.yaml @@ -3,7 +3,7 @@ kind: ReplacementTransformer metadata: name: replacement-transformer annotations: - config.kubernetes.io/prune-local: "true" + ## config.kaweezle.com/prune-local: "true" config.kubernetes.io/function: | exec: path: ../../krmfnbuiltin diff --git a/tests/multi-replacement/functions/03_multi-transformation.yaml b/tests/multi-replacement/functions/03_multi-transformation.yaml new file mode 100644 index 0000000..395bb1b --- /dev/null +++ b/tests/multi-replacement/functions/03_multi-transformation.yaml @@ -0,0 +1,10 @@ +apiVersion: builtin +kind: RemoveTransformer +metadata: + name: replacement-transformer + annotations: + config.kubernetes.io/function: | + exec: + path: ../../krmfnbuiltin +targets: + - annotationSelector: config.kaweezle.com/local-config