Skip to content

Commit a3d27be

Browse files
committed
fix: add retries when we create providers
Provider creation might fail because webhooks are not initialized yet. To prevent this, we add retries.
1 parent 9a5b0c6 commit a3d27be

File tree

1 file changed

+21
-14
lines changed

1 file changed

+21
-14
lines changed

cmd/plugin/cmd/init.go

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,13 @@ var initCmd = &cobra.Command{
117117
},
118118
}
119119

120+
var backoffOpts = wait.Backoff{
121+
Duration: 500 * time.Millisecond,
122+
Factor: 1.5,
123+
Steps: 10,
124+
Jitter: 0.4,
125+
}
126+
120127
func init() {
121128
initCmd.PersistentFlags().StringVar(&initOpts.kubeconfig, "kubeconfig", "",
122129
"Path to the kubeconfig for the management cluster. If unspecified, default discovery rules apply.")
@@ -188,16 +195,9 @@ func runInit() error {
188195
return fmt.Errorf("cannot deploy CAPI operator: %w", err)
189196
}
190197

191-
opts := wait.Backoff{
192-
Duration: 500 * time.Millisecond,
193-
Factor: 1.5,
194-
Steps: 10,
195-
Jitter: 0.4,
196-
}
197-
198198
log.Info("Waiting for CAPI Operator to be available...")
199199

200-
if err := wait.ExponentialBackoff(opts, func() (bool, error) {
200+
if err := wait.ExponentialBackoff(backoffOpts, func() (bool, error) {
201201
return CheckDeploymentAvailability(ctx, client, capiOperatorLabels)
202202
}); err != nil {
203203
return fmt.Errorf("cannot check CAPI operator availability: %w", err)
@@ -514,14 +514,21 @@ func createGenericProvider(ctx context.Context, client ctrlclient.Client, provid
514514
log.Info("Installing provider", "Type", provider.GetType(), "Name", name, "Version", version, "Namespace", namespace)
515515

516516
// Create the provider
517-
if err := client.Create(ctx, provider); err != nil {
518-
if !apierrors.IsAlreadyExists(err) {
519-
return nil, fmt.Errorf("cannot create provider: %w", err)
520-
}
517+
if err := wait.ExponentialBackoff(backoffOpts, func() (bool, error) {
518+
if err := client.Create(ctx, provider); err != nil {
519+
// If the provider already exists, return immediately and do not retry.
520+
if apierrors.IsAlreadyExists(err) {
521+
log.Info("Provider already exists, skipping creation", "Type", provider.GetType(), "Name", name, "Version", version, "Namespace", namespace)
521522

522-
log.Info("Provider already exists, skipping creation", "Type", provider.GetType(), "Name", name, "Version", version, "Namespace", namespace)
523+
return true, err
524+
}
523525

524-
return nil, err
526+
return false, err
527+
}
528+
529+
return true, nil
530+
}); err != nil {
531+
return nil, fmt.Errorf("cannot create provider: %w", err)
525532
}
526533

527534
return provider, nil

0 commit comments

Comments
 (0)