// Copyright 2019 The Kubernetes Authors. // SPDX-License-Identifier: Apache-2.0 //go:generate pluginator package main import ( "fmt" "sigs.k8s.io/kustomize/api/filters/namespace" "sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/types" "sigs.k8s.io/yaml" ) // Change or set the namespace of non-cluster level resources. type plugin struct { types.ObjectMeta `json:"metadata,omitempty" yaml:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` FieldSpecs []types.FieldSpec `json:"fieldSpecs,omitempty" yaml:"fieldSpecs,omitempty"` } //noinspection GoUnusedGlobalVariable var KustomizePlugin plugin func (p *plugin) Config( _ *resmap.PluginHelpers, c []byte) (err error) { p.Namespace = "" p.FieldSpecs = nil return yaml.Unmarshal(c, p) } func (p *plugin) Transform(m resmap.ResMap) error { if len(p.Namespace) == 0 { return nil } for _, r := range m.Resources() { if r.IsEmpty() { // Don't mutate empty objects? continue } r.StorePreviousId() if err := r.ApplyFilter(namespace.Filter{ Namespace: p.Namespace, FsSlice: p.FieldSpecs, }); err != nil { return err } matches := m.GetMatchingResourcesByCurrentId(r.CurId().Equals) if len(matches) != 1 { return fmt.Errorf( "namespace transformation produces ID conflict: %+v", matches) } } return nil }