From 66f75543ae07903ca5a85eac07889afb19d3304a 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. 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)