mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-07-17 17:52:12 +00:00
Adds new helper function retrieveGroupingLabel()
This commit is contained in:
@@ -22,6 +22,26 @@ const (
|
|||||||
GroupingHash = "kustomize.config.k8s.io/inventory-hash"
|
GroupingHash = "kustomize.config.k8s.io/inventory-hash"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// retrieveGroupingLabel returns the string value of the GroupingLabel
|
||||||
|
// for the passed object. Returns error if the passed object is nil or
|
||||||
|
// is not a grouping object.
|
||||||
|
func retrieveGroupingLabel(obj runtime.Object) (string, error) {
|
||||||
|
var groupingLabel string
|
||||||
|
if obj == nil {
|
||||||
|
return "", fmt.Errorf("Grouping object is nil.\n")
|
||||||
|
}
|
||||||
|
accessor, err := meta.Accessor(obj)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
labels := accessor.GetLabels()
|
||||||
|
groupingLabel, exists := labels[GroupingLabel]
|
||||||
|
if !exists {
|
||||||
|
return "", fmt.Errorf("Grouping label does not exist for grouping object: %s\n", GroupingLabel)
|
||||||
|
}
|
||||||
|
return strings.TrimSpace(groupingLabel), nil
|
||||||
|
}
|
||||||
|
|
||||||
// isGroupingObject returns true if the passed object has the
|
// isGroupingObject returns true if the passed object has the
|
||||||
// grouping label.
|
// grouping label.
|
||||||
// TODO(seans3): Check type is ConfigMap.
|
// TODO(seans3): Check type is ConfigMap.
|
||||||
@@ -29,13 +49,9 @@ func isGroupingObject(obj runtime.Object) bool {
|
|||||||
if obj == nil {
|
if obj == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
accessor, err := meta.Accessor(obj)
|
groupingLabel, err := retrieveGroupingLabel(obj)
|
||||||
if err == nil {
|
if err == nil && len(groupingLabel) > 0 {
|
||||||
labels := accessor.GetLabels()
|
return true
|
||||||
_, exists := labels[GroupingLabel]
|
|
||||||
if exists {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ var pod1Name = "pod-1"
|
|||||||
var pod2Name = "pod-2"
|
var pod2Name = "pod-2"
|
||||||
var pod3Name = "pod-3"
|
var pod3Name = "pod-3"
|
||||||
|
|
||||||
|
var testGroupingLabel = "test-app-label"
|
||||||
|
|
||||||
var groupingObj = unstructured.Unstructured{
|
var groupingObj = unstructured.Unstructured{
|
||||||
Object: map[string]interface{}{
|
Object: map[string]interface{}{
|
||||||
"apiVersion": "v1",
|
"apiVersion": "v1",
|
||||||
@@ -30,7 +32,7 @@ var groupingObj = unstructured.Unstructured{
|
|||||||
"name": groupingObjName,
|
"name": groupingObjName,
|
||||||
"namespace": testNamespace,
|
"namespace": testNamespace,
|
||||||
"labels": map[string]interface{}{
|
"labels": map[string]interface{}{
|
||||||
GroupingLabel: "true",
|
GroupingLabel: testGroupingLabel,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -109,6 +111,67 @@ var nilInfo = &resource.Info{
|
|||||||
Object: nil,
|
Object: nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var groupingObjLabelWithSpace = unstructured.Unstructured{
|
||||||
|
Object: map[string]interface{}{
|
||||||
|
"apiVersion": "v1",
|
||||||
|
"kind": "ConfigMap",
|
||||||
|
"metadata": map[string]interface{}{
|
||||||
|
"name": groupingObjName,
|
||||||
|
"namespace": testNamespace,
|
||||||
|
"labels": map[string]interface{}{
|
||||||
|
GroupingLabel: "\tgrouping-label ",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRetrieveGroupingLabel(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
obj runtime.Object
|
||||||
|
groupingLabel string
|
||||||
|
isError bool
|
||||||
|
}{
|
||||||
|
// Nil grouping object throws error.
|
||||||
|
{
|
||||||
|
obj: nil,
|
||||||
|
groupingLabel: "",
|
||||||
|
isError: true,
|
||||||
|
},
|
||||||
|
// Pod is not a grouping object.
|
||||||
|
{
|
||||||
|
obj: &pod2,
|
||||||
|
groupingLabel: "",
|
||||||
|
isError: true,
|
||||||
|
},
|
||||||
|
// Retrieves label without preceding/trailing whitespace.
|
||||||
|
{
|
||||||
|
obj: &groupingObjLabelWithSpace,
|
||||||
|
groupingLabel: "grouping-label",
|
||||||
|
isError: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
obj: &groupingObj,
|
||||||
|
groupingLabel: testGroupingLabel,
|
||||||
|
isError: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
actual, err := retrieveGroupingLabel(test.obj)
|
||||||
|
if test.isError && err == nil {
|
||||||
|
t.Errorf("Did not receive expected error.\n")
|
||||||
|
}
|
||||||
|
if !test.isError {
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Received unexpected error: %s\n", err)
|
||||||
|
}
|
||||||
|
if test.groupingLabel != actual {
|
||||||
|
t.Errorf("Expected grouping label (%s), got (%s)\n", test.groupingLabel, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestIsGroupingObject(t *testing.T) {
|
func TestIsGroupingObject(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
obj runtime.Object
|
obj runtime.Object
|
||||||
|
|||||||
Reference in New Issue
Block a user