Skip to content

Commit ae1ca8f

Browse files
author
Nikolas De Giorgis
authored
Add function to secret package (#749)
1 parent 5a232bb commit ae1ca8f

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

pkg/kube/secret/secret.go

+28-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package secret
22

33
import (
4+
"reflect"
5+
46
"github.com/pkg/errors"
57

68
corev1 "k8s.io/api/core/v1"
@@ -71,11 +73,15 @@ func ReadStringData(getter Getter, key client.ObjectKey) (map[string]string, err
7173
return nil, err
7274
}
7375

76+
return dataToStringData(secret.Data), nil
77+
}
78+
79+
func dataToStringData(data map[string][]byte) map[string]string {
7480
stringData := make(map[string]string)
75-
for k, v := range secret.Data {
81+
for k, v := range data {
7682
stringData[k] = string(v)
7783
}
78-
return stringData, nil
84+
return stringData
7985
}
8086

8187
// UpdateField updates a single field in the secret with the provided objectKey
@@ -163,3 +169,23 @@ func Exists(secretGetter Getter, nsName types.NamespacedName) (bool, error) {
163169
}
164170
return true, nil
165171
}
172+
173+
// CreateOrUpdateIfNeeded creates a secret if it doesn't exists, or updates it if needed.
174+
func CreateOrUpdateIfNeeded(getUpdateCreator GetUpdateCreator, secret corev1.Secret) error {
175+
// Check if the secret exists
176+
olsSecret, err := getUpdateCreator.GetSecret(types.NamespacedName{Name: secret.Name, Namespace: secret.Namespace})
177+
if err != nil {
178+
179+
if apiErrors.IsNotFound(err) {
180+
return getUpdateCreator.CreateSecret(secret)
181+
}
182+
return err
183+
}
184+
185+
if reflect.DeepEqual(secret.StringData, dataToStringData(olsSecret.Data)) {
186+
return nil
187+
}
188+
189+
// They are different so we need to update it
190+
return getUpdateCreator.UpdateSecret(secret)
191+
}

0 commit comments

Comments
 (0)