-
Notifications
You must be signed in to change notification settings - Fork 1k
Expand file tree
/
Copy pathstructure_label_selector.go
More file actions
96 lines (84 loc) · 2.72 KB
/
structure_label_selector.go
File metadata and controls
96 lines (84 loc) · 2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// Copyright IBM Corp. 2017, 2025
// SPDX-License-Identifier: MPL-2.0
package kubernetes
import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Flatteners
func flattenLabelSelector(in *metav1.LabelSelector) []interface{} {
att := make(map[string]interface{})
if len(in.MatchLabels) > 0 {
att["match_labels"] = in.MatchLabels
}
if len(in.MatchExpressions) > 0 {
att["match_expressions"] = flattenLabelSelectorRequirement(in.MatchExpressions)
}
return []interface{}{att}
}
func flattenNamespaceSelector(in *metav1.LabelSelector) []interface{} {
att := make(map[string]interface{})
if len(in.MatchLabels) > 0 {
att["match_labels"] = in.MatchLabels
}
if len(in.MatchExpressions) > 0 {
att["match_expressions"] = flattenLabelSelectorRequirement(in.MatchExpressions)
}
return []interface{}{att}
}
func flattenLabelSelectorRequirement(in []metav1.LabelSelectorRequirement) []interface{} {
att := make([]interface{}, len(in))
for i, n := range in {
m := make(map[string]interface{})
m["key"] = n.Key
m["operator"] = n.Operator
m["values"] = newStringSet(schema.HashString, n.Values)
att[i] = m
}
return att
}
// Expanders
func expandLabelSelector(l []interface{}) *metav1.LabelSelector {
if len(l) == 0 || l[0] == nil {
return &metav1.LabelSelector{}
}
in := l[0].(map[string]interface{})
obj := &metav1.LabelSelector{}
if v, ok := in["match_labels"].(map[string]interface{}); ok && len(v) > 0 {
obj.MatchLabels = expandStringMap(v)
}
if v, ok := in["match_expressions"].([]interface{}); ok && len(v) > 0 {
obj.MatchExpressions = expandLabelSelectorRequirement(v)
}
return obj
}
func expandNamespaceSelector(n []interface{}) *metav1.LabelSelector {
if len(n) == 0 || n[0] == nil {
return &metav1.LabelSelector{}
}
in := n[0].(map[string]interface{})
obj := &metav1.LabelSelector{}
if v, ok := in["match_labels"].(map[string]interface{}); ok && len(v) > 0 {
obj.MatchLabels = expandStringMap(v)
}
//We are using labelSelector metav1, due to NamespaceSelector not existing as a type in metav1
if v, ok := in["match_expressions"].([]interface{}); ok && len(v) > 0 {
obj.MatchExpressions = expandLabelSelectorRequirement(v)
}
return obj
}
func expandLabelSelectorRequirement(l []interface{}) []metav1.LabelSelectorRequirement {
if len(l) == 0 || l[0] == nil {
return []metav1.LabelSelectorRequirement{}
}
obj := make([]metav1.LabelSelectorRequirement, len(l))
for i, n := range l {
in := n.(map[string]interface{})
obj[i] = metav1.LabelSelectorRequirement{
Key: in["key"].(string),
Operator: metav1.LabelSelectorOperator(in["operator"].(string)),
Values: sliceOfString(in["values"].(*schema.Set).List()),
}
}
return obj
}