forked from red-hat-storage/ocs-client-operator
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathk8sutils.go
More file actions
111 lines (89 loc) · 3.21 KB
/
k8sutils.go
File metadata and controls
111 lines (89 loc) · 3.21 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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*
Copyright 2022 Red Hat, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package utils
import (
"fmt"
"maps"
"os"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// OperatorNamespaceEnvVar is the constant for env variable OPERATOR_NAMESPACE
// which is the namespace where operator pod is deployed.
const OperatorNamespaceEnvVar = "OPERATOR_NAMESPACE"
// WatchNamespaceEnvVar is the constant for env variable WATCH_NAMESPACE
// which indicates any other namespace to watch for resources.
const WatchNamespaceEnvVar = "WATCH_NAMESPACE"
// OperatorPodNameEnvVar is the constant for env variable OPERATOR_POD_NAME
const OperatorPodNameEnvVar = "OPERATOR_POD_NAME"
// StorageClientNameEnvVar is the constant for env variable STORAGE_CLIENT_NAME
const StorageClientNameEnvVar = "STORAGE_CLIENT_NAME"
const StatusReporterImageEnvVar = "STATUS_REPORTER_IMAGE"
// Value corresponding to annotation key has subscription channel
const DesiredSubscriptionChannelAnnotationKey = "ocs.openshift.io/subscription.channel"
const runCSIDaemonsetOnMaster = "RUN_CSI_DAEMONSET_ON_MASTER"
// GetOperatorNamespace returns the namespace where the operator is deployed.
func GetOperatorNamespace() string {
return os.Getenv(OperatorNamespaceEnvVar)
}
func GetWatchNamespace() string {
return os.Getenv(WatchNamespaceEnvVar)
}
func ValidateOperatorNamespace() error {
ns := GetOperatorNamespace()
if ns == "" {
return fmt.Errorf("namespace not found for operator")
}
return nil
}
func ValidateStausReporterImage() error {
image := os.Getenv(StatusReporterImageEnvVar)
if image == "" {
return fmt.Errorf("status reporter image not found")
}
return nil
}
// AddLabels adds values from newLabels to the keys on the supplied obj or overwrites values for existing keys on the obj
func AddLabels(obj metav1.Object, newLabels map[string]string) {
labels := obj.GetLabels()
if labels == nil {
labels = map[string]string{}
obj.SetLabels(labels)
}
maps.Copy(labels, newLabels)
}
// AddAnnotation adds label to a resource metadata, returns true if added else false
func AddLabel(obj metav1.Object, key string, value string) bool {
labels := obj.GetLabels()
if labels == nil {
labels = map[string]string{}
obj.SetLabels(labels)
}
if oldValue, exist := labels[key]; !exist || oldValue != value {
labels[key] = value
return true
}
return false
}
// AddAnnotation adds an annotation to a resource metadata, returns true if added else false
func AddAnnotation(obj metav1.Object, key string, value string) bool {
annotations := obj.GetAnnotations()
if annotations == nil {
annotations = map[string]string{}
obj.SetAnnotations(annotations)
}
if oldValue, exist := annotations[key]; !exist || oldValue != value {
annotations[key] = value
return true
}
return false
}