...

Source file src/sigs.k8s.io/kustomize/api/internal/utils/makeResIds.go

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

     1  // Copyright 2022 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package utils
     5  
     6  import (
     7  	"fmt"
     8  	"strings"
     9  
    10  	"sigs.k8s.io/kustomize/kyaml/resid"
    11  	"sigs.k8s.io/kustomize/kyaml/yaml"
    12  )
    13  
    14  // MakeResIds returns all of an RNode's current and previous Ids
    15  func MakeResIds(n *yaml.RNode) ([]resid.ResId, error) {
    16  	var result []resid.ResId
    17  	apiVersion := n.Field(yaml.APIVersionField)
    18  	var group, version string
    19  	if apiVersion != nil {
    20  		group, version = resid.ParseGroupVersion(yaml.GetValue(apiVersion.Value))
    21  	}
    22  	result = append(result, resid.NewResIdWithNamespace(
    23  		resid.Gvk{Group: group, Version: version, Kind: n.GetKind()}, n.GetName(), n.GetNamespace()),
    24  	)
    25  	prevIds, err := PrevIds(n)
    26  	if err != nil {
    27  		return nil, err
    28  	}
    29  	result = append(result, prevIds...)
    30  	return result, nil
    31  }
    32  
    33  // PrevIds returns all of an RNode's previous Ids
    34  func PrevIds(n *yaml.RNode) ([]resid.ResId, error) {
    35  	var ids []resid.ResId
    36  	// TODO: merge previous names and namespaces into one list of
    37  	//     pairs on one annotation so there is no chance of error
    38  	annotations := n.GetAnnotations(
    39  		BuildAnnotationPreviousNames,
    40  		BuildAnnotationPreviousNamespaces,
    41  		BuildAnnotationPreviousKinds)
    42  	if _, ok := annotations[BuildAnnotationPreviousNames]; !ok {
    43  		return nil, nil
    44  	}
    45  	names := strings.Split(annotations[BuildAnnotationPreviousNames], ",")
    46  	ns := strings.Split(annotations[BuildAnnotationPreviousNamespaces], ",")
    47  	kinds := strings.Split(annotations[BuildAnnotationPreviousKinds], ",")
    48  	// This should never happen
    49  	if len(names) != len(ns) || len(names) != len(kinds) {
    50  		return nil, fmt.Errorf(
    51  			"number of previous names, " +
    52  				"number of previous namespaces, " +
    53  				"number of previous kinds not equal")
    54  	}
    55  	apiVersion := n.GetApiVersion()
    56  	group, version := resid.ParseGroupVersion(apiVersion)
    57  	ids = make([]resid.ResId, 0, len(names))
    58  	for i := range names {
    59  		gvk := resid.Gvk{
    60  			Group:   group,
    61  			Version: version,
    62  			Kind:    kinds[i],
    63  		}
    64  		ids = append(ids, resid.NewResIdWithNamespace(
    65  			gvk, names[i], ns[i]))
    66  	}
    67  	return ids, nil
    68  }
    69  

View as plain text