Fix missing conflict retry with server-side apply

Signed-off-by: Jakub Jaruszewski <jjaruszewski@man.poznan.pl>
pull/32088/head
Jakub Jaruszewski 5 months ago
parent 96c152cb1a
commit 8a45247161
No known key found for this signature in database
GPG Key ID: 43268828175AE8A3

@ -318,20 +318,23 @@ func (c *Client) makeCreateApplyFunc(serverSideApply, forceConflicts, dryRun boo
slog.String("fieldValidationDirective", string(fieldValidationDirective))) slog.String("fieldValidationDirective", string(fieldValidationDirective)))
return func(target *resource.Info) error { return func(target *resource.Info) error {
err := patchResourceServerSide(target, dryRun, forceConflicts, fieldValidationDirective)
logger := c.Logger().With( logger := c.Logger().With(
slog.String("namespace", target.Namespace), slog.String("namespace", target.Namespace),
slog.String("name", target.Name), slog.String("name", target.Name),
slog.String("gvk", target.Mapping.GroupVersionKind.String())) slog.String("gvk", target.Mapping.GroupVersionKind.String()))
if err != nil {
logger.Debug("Error creating resource via patch", slog.Any("error", err))
return err
}
logger.Debug("Created resource via patch") return retry.RetryOnConflict(
retry.DefaultRetry,
func() error {
err := patchResourceServerSide(target, dryRun, forceConflicts, fieldValidationDirective)
if err != nil {
logger.Debug("Error creating resource via patch", slog.Any("error", err))
return err
}
return nil logger.Debug("Created resource via patch")
return nil
})
} }
} }

@ -53,6 +53,7 @@ import (
k8sfake "k8s.io/client-go/kubernetes/fake" k8sfake "k8s.io/client-go/kubernetes/fake"
"k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest/fake" "k8s.io/client-go/rest/fake"
"k8s.io/client-go/util/retry"
cmdtesting "k8s.io/kubectl/pkg/cmd/testing" cmdtesting "k8s.io/kubectl/pkg/cmd/testing"
) )
@ -273,9 +274,13 @@ func TestCreate(t *testing.T) {
}, },
ExpectedErrorContains: "Operation cannot be fulfilled on resourcequotas \"quota\": the object has been modified; " + ExpectedErrorContains: "Operation cannot be fulfilled on resourcequotas \"quota\": the object has been modified; " +
"please apply your changes to the latest version and try again", "please apply your changes to the latest version and try again",
ExpectedActions: []string{ ExpectedActions: func() []string { // expect helm to retry on conflict, workaround for: https://github.com/kubernetes/kubernetes/issues/67761
"/namespaces/default/pods/dolphin:PATCH", actions := make([]string, retry.DefaultRetry.Steps)
}, for i := range actions {
actions[i] = "/namespaces/default/pods/dolphin:PATCH"
}
return actions
}(),
}, },
} }

Loading…
Cancel
Save