...
1
2
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
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
34 func PrevIds(n *yaml.RNode) ([]resid.ResId, error) {
35 var ids []resid.ResId
36
37
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
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