mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-18 05:05:14 +00:00
This commit optimizes in three ways: 1. For heavily used functions, allocate memory to avoid overhead associated with map and array re-sizing. 2. Where appropriate, limit annotation and label retrievals to only the desired keys. 3. Adjust annotation and label retrieval to avoid unnecessary temporary object creation.
69 lines
2.0 KiB
Go
69 lines
2.0 KiB
Go
// Copyright 2022 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"sigs.k8s.io/kustomize/kyaml/resid"
|
|
"sigs.k8s.io/kustomize/kyaml/yaml"
|
|
)
|
|
|
|
// MakeResIds returns all of an RNode's current and previous Ids
|
|
func MakeResIds(n *yaml.RNode) ([]resid.ResId, error) {
|
|
var result []resid.ResId
|
|
apiVersion := n.Field(yaml.APIVersionField)
|
|
var group, version string
|
|
if apiVersion != nil {
|
|
group, version = resid.ParseGroupVersion(yaml.GetValue(apiVersion.Value))
|
|
}
|
|
result = append(result, resid.NewResIdWithNamespace(
|
|
resid.Gvk{Group: group, Version: version, Kind: n.GetKind()}, n.GetName(), n.GetNamespace()),
|
|
)
|
|
prevIds, err := PrevIds(n)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
result = append(result, prevIds...)
|
|
return result, nil
|
|
}
|
|
|
|
// PrevIds returns all of an RNode's previous Ids
|
|
func PrevIds(n *yaml.RNode) ([]resid.ResId, error) {
|
|
var ids []resid.ResId
|
|
// TODO: merge previous names and namespaces into one list of
|
|
// pairs on one annotation so there is no chance of error
|
|
annotations := n.GetAnnotations(
|
|
BuildAnnotationPreviousNames,
|
|
BuildAnnotationPreviousNamespaces,
|
|
BuildAnnotationPreviousKinds)
|
|
if _, ok := annotations[BuildAnnotationPreviousNames]; !ok {
|
|
return nil, nil
|
|
}
|
|
names := strings.Split(annotations[BuildAnnotationPreviousNames], ",")
|
|
ns := strings.Split(annotations[BuildAnnotationPreviousNamespaces], ",")
|
|
kinds := strings.Split(annotations[BuildAnnotationPreviousKinds], ",")
|
|
// This should never happen
|
|
if len(names) != len(ns) || len(names) != len(kinds) {
|
|
return nil, fmt.Errorf(
|
|
"number of previous names, " +
|
|
"number of previous namespaces, " +
|
|
"number of previous kinds not equal")
|
|
}
|
|
apiVersion := n.GetApiVersion()
|
|
group, version := resid.ParseGroupVersion(apiVersion)
|
|
ids = make([]resid.ResId, 0, len(names))
|
|
for i := range names {
|
|
gvk := resid.Gvk{
|
|
Group: group,
|
|
Version: version,
|
|
Kind: kinds[i],
|
|
}
|
|
ids = append(ids, resid.NewResIdWithNamespace(
|
|
gvk, names[i], ns[i]))
|
|
}
|
|
return ids, nil
|
|
}
|