1// Code generated by pluginator on NamespaceTransformer; DO NOT EDIT.
2// pluginator {unknown  1970-01-01T00:00:00Z  }
3
4package builtins
5
6import (
7	"fmt"
8
9	"sigs.k8s.io/kustomize/api/filters/namespace"
10	"sigs.k8s.io/kustomize/api/resmap"
11	"sigs.k8s.io/kustomize/api/types"
12	"sigs.k8s.io/yaml"
13)
14
15// Change or set the namespace of non-cluster level resources.
16type NamespaceTransformerPlugin struct {
17	types.ObjectMeta `json:"metadata,omitempty" yaml:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
18	FieldSpecs       []types.FieldSpec `json:"fieldSpecs,omitempty" yaml:"fieldSpecs,omitempty"`
19}
20
21func (p *NamespaceTransformerPlugin) Config(
22	_ *resmap.PluginHelpers, c []byte) (err error) {
23	p.Namespace = ""
24	p.FieldSpecs = nil
25	return yaml.Unmarshal(c, p)
26}
27
28func (p *NamespaceTransformerPlugin) Transform(m resmap.ResMap) error {
29	if len(p.Namespace) == 0 {
30		return nil
31	}
32	for _, r := range m.Resources() {
33		if r.IsNilOrEmpty() {
34			// Don't mutate empty objects?
35			continue
36		}
37		r.StorePreviousId()
38		if err := r.ApplyFilter(namespace.Filter{
39			Namespace: p.Namespace,
40			FsSlice:   p.FieldSpecs,
41		}); err != nil {
42			return err
43		}
44		matches := m.GetMatchingResourcesByCurrentId(r.CurId().Equals)
45		if len(matches) != 1 {
46			return fmt.Errorf(
47				"namespace transformation produces ID conflict: %+v", matches)
48		}
49	}
50	return nil
51}
52
53func NewNamespaceTransformerPlugin() resmap.TransformerPlugin {
54	return &NamespaceTransformerPlugin{}
55}
56