From db673d80d6431181b08b5dd3771a6fcdbce365ff Mon Sep 17 00:00:00 2001 From: sflxn Date: Wed, 6 Feb 2019 16:01:57 -0800 Subject: [PATCH] Fixed creating clusters in different namespaces when pivoting There was a bug that prevented pivoting because a desired namespace was specified in the cluster.yaml file. It needs to ensure the the namespace on the target cluster before pivoting. Also, ensuring namespace after getting the target cluster kubeconfig requires a loop with exp backoff in some environments. Fixes #735 --- .../clusterdeployer/clusterdeployer.go | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) 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)