Unverified Commit 1db3ab57 authored by Derek Nola's avatar Derek Nola Committed by GitHub

[Release-1.21] Secrets Encryption: Add RetryOnConflict around updating nodes (#5497)

* Add RetryOnConflict around updating nodes Signed-off-by: 's avatarDerek Nola <derek.nola@suse.com>
parent f563cda5
...@@ -18,6 +18,7 @@ import ( ...@@ -18,6 +18,7 @@ import (
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/pager" "k8s.io/client-go/tools/pager"
"k8s.io/client-go/tools/record" "k8s.io/client-go/tools/record"
"k8s.io/client-go/util/retry"
) )
const ( const (
...@@ -57,7 +58,7 @@ func Register( ...@@ -57,7 +58,7 @@ func Register(
} }
// onChangeNode handles changes to Nodes. We are looking for a specific annotation change // onChangeNode handles changes to Nodes. We are looking for a specific annotation change
func (h *handler) onChangeNode(key string, node *corev1.Node) (*corev1.Node, error) { func (h *handler) onChangeNode(nodeName string, node *corev1.Node) (*corev1.Node, error) {
if node == nil { if node == nil {
return nil, nil return nil, nil
} }
...@@ -80,8 +81,16 @@ func (h *handler) onChangeNode(key string, node *corev1.Node) (*corev1.Node, err ...@@ -80,8 +81,16 @@ func (h *handler) onChangeNode(key string, node *corev1.Node) (*corev1.Node, err
return node, err return node, err
} }
ann = EncryptionReencryptActive + "-" + reencryptHash ann = EncryptionReencryptActive + "-" + reencryptHash
err = retry.RetryOnConflict(retry.DefaultRetry, func() error {
node, err = h.nodes.Get(nodeName, metav1.GetOptions{})
if err != nil {
return err
}
node.Annotations[EncryptionHashAnnotation] = ann node.Annotations[EncryptionHashAnnotation] = ann
node, err = h.nodes.Update(node) _, err = h.nodes.Update(node)
return err
})
if err != nil { if err != nil {
h.recorder.Event(node, corev1.EventTypeWarning, secretsUpdateErrorEvent, err.Error()) h.recorder.Event(node, corev1.EventTypeWarning, secretsUpdateErrorEvent, err.Error())
return node, err return node, err
...@@ -94,12 +103,17 @@ func (h *handler) onChangeNode(key string, node *corev1.Node) (*corev1.Node, err ...@@ -94,12 +103,17 @@ func (h *handler) onChangeNode(key string, node *corev1.Node) (*corev1.Node, err
// If skipping, revert back to the previous stage // If skipping, revert back to the previous stage
if h.controlConfig.EncryptSkip { if h.controlConfig.EncryptSkip {
err = retry.RetryOnConflict(retry.DefaultRetry, func() error {
node, err = h.nodes.Get(nodeName, metav1.GetOptions{})
if err != nil {
return err
}
BootstrapEncryptionHashAnnotation(node, h.controlConfig.Runtime) BootstrapEncryptionHashAnnotation(node, h.controlConfig.Runtime)
if node, err := h.nodes.Update(node); err != nil { _, err = h.nodes.Update(node)
return err
})
return node, err return node, err
} }
return node, nil
}
// Remove last key // Remove last key
curKeys, err := GetEncryptionKeys(h.controlConfig.Runtime) curKeys, err := GetEncryptionKeys(h.controlConfig.Runtime)
...@@ -118,7 +132,14 @@ func (h *handler) onChangeNode(key string, node *corev1.Node) (*corev1.Node, err ...@@ -118,7 +132,14 @@ func (h *handler) onChangeNode(key string, node *corev1.Node) (*corev1.Node, err
h.recorder.Event(node, corev1.EventTypeWarning, secretsUpdateErrorEvent, err.Error()) h.recorder.Event(node, corev1.EventTypeWarning, secretsUpdateErrorEvent, err.Error())
return node, err return node, err
} }
if err := WriteEncryptionHashAnnotation(h.controlConfig.Runtime, node, EncryptionReencryptFinished); err != nil { err = retry.RetryOnConflict(retry.DefaultRetry, func() error {
node, err = h.nodes.Get(nodeName, metav1.GetOptions{})
if err != nil {
return err
}
return WriteEncryptionHashAnnotation(h.controlConfig.Runtime, node, EncryptionReencryptFinished)
})
if err != nil {
h.recorder.Event(node, corev1.EventTypeWarning, secretsUpdateErrorEvent, err.Error()) h.recorder.Event(node, corev1.EventTypeWarning, secretsUpdateErrorEvent, err.Error())
return node, err return node, err
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment