...

Source file src/sigs.k8s.io/kustomize/api/internal/builtins/NamespaceTransformer.go

Documentation: sigs.k8s.io/kustomize/api/internal/builtins

     1  // Code generated by pluginator on NamespaceTransformer; DO NOT EDIT.
     2  // pluginator {(devel)  unknown   }
     3  
     4  package builtins
     5  
     6  import (
     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/kustomize/kyaml/errors"
    13  	"sigs.k8s.io/yaml"
    14  )
    15  
    16  // Change or set the namespace of non-cluster level resources.
    17  type NamespaceTransformerPlugin struct {
    18  	types.ObjectMeta       `json:"metadata,omitempty" yaml:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
    19  	FieldSpecs             []types.FieldSpec                `json:"fieldSpecs,omitempty" yaml:"fieldSpecs,omitempty"`
    20  	UnsetOnly              bool                             `json:"unsetOnly" yaml:"unsetOnly"`
    21  	SetRoleBindingSubjects namespace.RoleBindingSubjectMode `json:"setRoleBindingSubjects" yaml:"setRoleBindingSubjects"`
    22  }
    23  
    24  func (p *NamespaceTransformerPlugin) Config(
    25  	_ *resmap.PluginHelpers, c []byte) (err error) {
    26  	p.Namespace = ""
    27  	p.FieldSpecs = nil
    28  	if err := yaml.Unmarshal(c, p); err != nil {
    29  		return errors.WrapPrefixf(err, "unmarshalling NamespaceTransformer config")
    30  	}
    31  	switch p.SetRoleBindingSubjects {
    32  	case namespace.AllServiceAccountSubjects, namespace.DefaultSubjectsOnly, namespace.NoSubjects:
    33  		// valid
    34  	case namespace.SubjectModeUnspecified:
    35  		p.SetRoleBindingSubjects = namespace.DefaultSubjectsOnly
    36  	default:
    37  		return errors.Errorf("invalid value %q for setRoleBindingSubjects: "+
    38  			"must be one of %q, %q or %q", p.SetRoleBindingSubjects,
    39  			namespace.DefaultSubjectsOnly, namespace.NoSubjects, namespace.AllServiceAccountSubjects)
    40  	}
    41  
    42  	return nil
    43  }
    44  
    45  func (p *NamespaceTransformerPlugin) Transform(m resmap.ResMap) error {
    46  	if len(p.Namespace) == 0 {
    47  		return nil
    48  	}
    49  	for _, r := range m.Resources() {
    50  		if r.IsNilOrEmpty() {
    51  			// Don't mutate empty objects?
    52  			continue
    53  		}
    54  		r.StorePreviousId()
    55  		if err := r.ApplyFilter(namespace.Filter{
    56  			Namespace:              p.Namespace,
    57  			FsSlice:                p.FieldSpecs,
    58  			SetRoleBindingSubjects: p.SetRoleBindingSubjects,
    59  			UnsetOnly:              p.UnsetOnly,
    60  		}); err != nil {
    61  			return err
    62  		}
    63  		matches := m.GetMatchingResourcesByCurrentId(r.CurId().Equals)
    64  		if len(matches) != 1 {
    65  			return fmt.Errorf(
    66  				"namespace transformation produces ID conflict: %+v", matches)
    67  		}
    68  	}
    69  	return nil
    70  }
    71  
    72  func NewNamespaceTransformerPlugin() resmap.TransformerPlugin {
    73  	return &NamespaceTransformerPlugin{}
    74  }
    75  

View as plain text