diff --git a/cmd/clusterctl/clusterdeployer/clusterdeployer.go b/cmd/clusterctl/clusterdeployer/clusterdeployer.go index 64a1e62c4790..d44fb39a4a3e 100644 --- a/cmd/clusterctl/clusterdeployer/clusterdeployer.go +++ b/cmd/clusterctl/clusterdeployer/clusterdeployer.go @@ -27,6 +27,7 @@ import ( "sigs.k8s.io/cluster-api/cmd/clusterctl/clusterdeployer/provider" "sigs.k8s.io/cluster-api/cmd/clusterctl/phases" clusterv1 "sigs.k8s.io/cluster-api/pkg/apis/cluster/v1alpha1" + "sigs.k8s.io/cluster-api/pkg/util" ) type ClusterDeployer struct { @@ -102,6 +103,20 @@ func (d *ClusterDeployer) Create(cluster *clusterv1.Cluster, machines []*cluster } defer closeClient(targetClient, "target") + klog.Info("Creating namespace on target cluster") + addNamespaceToTarget := func() (bool, error) { + err = targetClient.EnsureNamespace(cluster.Namespace) + if err != nil { + return false, nil + } + return true, nil + } + + err = util.Retry(addNamespaceToTarget, 0) + if err != nil { + return errors.Wrapf(err, "unable to ensure namespace %q in targetCluster", cluster.Namespace) + } + if d.addonComponents != "" { if err := phases.ApplyAddons(targetClient, d.addonComponents); err != nil { return errors.Wrap(err, "unable to apply addons to target cluster") @@ -119,11 +134,6 @@ func (d *ClusterDeployer) Create(cluster *clusterv1.Cluster, machines []*cluster return errors.Wrap(err, "unable to save provider components to target cluster") } - err = targetClient.EnsureNamespace(cluster.Namespace) - if err != nil { - return errors.Wrapf(err, "unable to ensure namespace %q in targetCluster", cluster.Namespace) - } - // For some reason, endpoint doesn't get updated in bootstrap cluster sometimes. So we // update the target cluster endpoint as well to be sure. klog.Infof("Updating target cluster object with control plane endpoint running on %s", controlPlaneMachine.Name)