/
secret.go
58 lines (53 loc) · 2.01 KB
/
secret.go
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
package reconcile
import (
"context"
"fmt"
"github.com/openshift/cluster-logging-operator/internal/utils/comparators"
"github.com/openshift/cluster-logging-operator/internal/utils/comparators/secrets"
log "github.com/ViaQ/logerr/v2/log/static"
"github.com/openshift/cluster-logging-operator/internal/constants"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/client-go/tools/record"
"k8s.io/client-go/util/retry"
"sigs.k8s.io/controller-runtime/pkg/client"
)
// Secret reconciles a Secret to the desired spec returning an error
// if there is an issue creating or updating to the desired state
func Secret(er record.EventRecorder, k8Client client.Client, desired *corev1.Secret, opts ...comparators.ComparisonOption) error {
reason := constants.EventReasonGetObject
updateReason := ""
retryErr := retry.RetryOnConflict(retry.DefaultRetry, func() error {
current := &corev1.Secret{}
key := client.ObjectKeyFromObject(desired)
if err := k8Client.Get(context.TODO(), key, current); err != nil {
if errors.IsNotFound(err) {
reason = constants.EventReasonCreateObject
return k8Client.Create(context.TODO(), desired)
}
return fmt.Errorf("failed to get %v Secret: %w", key, err)
}
if secrets.AreSame(current, desired, opts...) {
// identical; no need to update.
log.V(3).Info("Secret are the same skipping update")
return nil
}
current.Data = desired.Data
current.Labels = desired.Labels
current.Annotations = desired.Annotations
current.OwnerReferences = desired.OwnerReferences
reason = constants.EventReasonUpdateObject
return k8Client.Update(context.TODO(), current)
})
eventType := corev1.EventTypeNormal
msg := fmt.Sprintf("%s Secret %s/%s", reason, desired.Namespace, desired.Name)
if updateReason != "" {
msg = fmt.Sprintf("%s because of change in %s.", msg, updateReason)
}
if retryErr != nil {
eventType = corev1.EventTypeWarning
msg = fmt.Sprintf("Unable to %s: %v", msg, retryErr)
}
er.Event(desired, eventType, reason, msg)
return retryErr
}