From 0ead5944992924247005125edb144d52cc75bc03 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..0ba48946ce41 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 %q on target cluster", cluster.Namespace) + 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 target cluster", 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)