|
1 | 1 | package secret
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "reflect" |
| 5 | + |
4 | 6 | "github.com/pkg/errors"
|
5 | 7 |
|
6 | 8 | corev1 "k8s.io/api/core/v1"
|
@@ -71,11 +73,15 @@ func ReadStringData(getter Getter, key client.ObjectKey) (map[string]string, err
|
71 | 73 | return nil, err
|
72 | 74 | }
|
73 | 75 |
|
| 76 | + return dataToStringData(secret.Data), nil |
| 77 | +} |
| 78 | + |
| 79 | +func dataToStringData(data map[string][]byte) map[string]string { |
74 | 80 | stringData := make(map[string]string)
|
75 |
| - for k, v := range secret.Data { |
| 81 | + for k, v := range data { |
76 | 82 | stringData[k] = string(v)
|
77 | 83 | }
|
78 |
| - return stringData, nil |
| 84 | + return stringData |
79 | 85 | }
|
80 | 86 |
|
81 | 87 | // 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) {
|
163 | 169 | }
|
164 | 170 | return true, nil
|
165 | 171 | }
|
| 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