Skip to content

Commit 6c1ffc6

Browse files
handle multiple namespaces scenarios for cluster delete
1 parent a8083c0 commit 6c1ffc6

File tree

3 files changed

+84
-48
lines changed

3 files changed

+84
-48
lines changed

clusterctl/clusterdeployer/clusterclient.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,11 @@ func (c *clusterClient) CreateMachineObjects(machines []*clusterv1.Machine, name
239239
return nil
240240
}
241241

242-
func (c *clusterClient) DeleteClusterObjects(namespace string) error {
242+
func (c *clusterClient) DeleteClusterObjects() error {
243+
return c.DeleteClusterObjectsInNamespace(apiv1.NamespaceDefault)
244+
}
245+
246+
func (c *clusterClient) DeleteClusterObjectsInNamespace(namespace string) error {
243247
err := c.clientSet.ClusterV1alpha1().Clusters(namespace).DeleteCollection(newDeleteOptions(), metav1.ListOptions{})
244248
if err != nil {
245249
return fmt.Errorf("error deleting cluster objects: %v", err)
@@ -251,7 +255,11 @@ func (c *clusterClient) DeleteClusterObjects(namespace string) error {
251255
return nil
252256
}
253257

254-
func (c *clusterClient) DeleteMachineDeploymentObjects(namespace string) error {
258+
func (c *clusterClient) DeleteMachineDeploymentObjects() error {
259+
return c.DeleteMachineDeploymentObjectsInNamespace(apiv1.NamespaceDefault)
260+
}
261+
262+
func (c *clusterClient) DeleteMachineDeploymentObjectsInNamespace(namespace string) error {
255263
err := c.clientSet.ClusterV1alpha1().MachineDeployments(namespace).DeleteCollection(newDeleteOptions(), metav1.ListOptions{})
256264
if err != nil {
257265
return fmt.Errorf("error deleting machine deployment objects: %v", err)
@@ -263,7 +271,11 @@ func (c *clusterClient) DeleteMachineDeploymentObjects(namespace string) error {
263271
return nil
264272
}
265273

266-
func (c *clusterClient) DeleteMachineSetObjects(namespace string) error {
274+
func (c *clusterClient) DeleteMachineSetObjects() error {
275+
return c.DeleteMachineSetObjectsInNamespace(apiv1.NamespaceDefault)
276+
}
277+
278+
func (c *clusterClient) DeleteMachineSetObjectsInNamespace(namespace string) error {
267279
err := c.clientSet.ClusterV1alpha1().MachineSets(namespace).DeleteCollection(newDeleteOptions(), metav1.ListOptions{})
268280
if err != nil {
269281
return fmt.Errorf("error deleting machine set objects: %v", err)
@@ -275,7 +287,11 @@ func (c *clusterClient) DeleteMachineSetObjects(namespace string) error {
275287
return nil
276288
}
277289

278-
func (c *clusterClient) DeleteMachineObjects(namespace string) error {
290+
func (c *clusterClient) DeleteMachineObjects() error {
291+
return c.DeleteMachineObjectsInNamespace(apiv1.NamespaceDefault)
292+
}
293+
294+
func (c *clusterClient) DeleteMachineObjectsInNamespace(namespace string) error {
279295
err := c.clientSet.ClusterV1alpha1().Machines(namespace).DeleteCollection(newDeleteOptions(), metav1.ListOptions{})
280296
if err != nil {
281297
return fmt.Errorf("error deleting machine objects: %v", err)

clusterctl/clusterdeployer/clusterdeployer.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,14 @@ type ClusterClient interface {
6565
CreateMachineDeploymentObjects([]*clusterv1.MachineDeployment, string) error
6666
CreateMachineSetObjects([]*clusterv1.MachineSet, string) error
6767
CreateMachineObjects([]*clusterv1.Machine, string) error
68-
DeleteClusterObjects(string) error
69-
DeleteMachineDeploymentObjects(string) error
70-
DeleteMachineSetObjects(string) error
71-
DeleteMachineObjects(string) error
68+
DeleteClusterObjectsInNamespace(string) error
69+
DeleteClusterObjects() error
70+
DeleteMachineDeploymentObjectsInNamespace(string) error
71+
DeleteMachineDeploymentObjects() error
72+
DeleteMachineSetObjectsInNamespace(string) error
73+
DeleteMachineSetObjects() error
74+
DeleteMachineObjectsInNamespace(string) error
75+
DeleteMachineObjects() error
7276
UpdateClusterObjectEndpoint(string, string, string) error
7377
Close() error
7478
}
@@ -223,7 +227,7 @@ func (d *ClusterDeployer) Delete(internalClient ClusterClient, namespace string)
223227
}
224228

225229
glog.Info("Copying objects from internal cluster to external cluster")
226-
if err = pivot(internalClient, externalClient); err != nil {
230+
if err = pivotNamespace(internalClient, externalClient, namespace); err != nil {
227231
return fmt.Errorf("unable to copy objects from internal to external cluster: %v", err)
228232
}
229233

@@ -399,10 +403,6 @@ func waitForKubeconfigReady(provider ProviderDeployer, cluster *clusterv1.Cluste
399403
return kubeconfig, err
400404
}
401405

402-
func pivot(from, to ClusterClient) error {
403-
return pivotNamespace(from, to, apiv1.NamespaceDefault)
404-
}
405-
406406
func pivotNamespace(from, to ClusterClient, namespace string) error {
407407
if err := from.WaitForClusterV1alpha1Ready(); err != nil {
408408
return fmt.Errorf("cluster v1alpha1 resource not ready on source cluster")
@@ -471,22 +471,22 @@ func pivotNamespace(from, to ClusterClient, namespace string) error {
471471
func deleteObjectsInNamespace(client ClusterClient, namespace string) error {
472472
var errors []string
473473
glog.Infof("Deleting machine deployments")
474-
if err := client.DeleteMachineDeploymentObjects(namespace); err != nil {
474+
if err := client.DeleteMachineDeploymentObjectsInNamespace(namespace); err != nil {
475475
err = fmt.Errorf("error deleting machine deployments: %v", err)
476476
errors = append(errors, err.Error())
477477
}
478478
glog.Infof("Deleting machine sets")
479-
if err := client.DeleteMachineSetObjects(namespace); err != nil {
479+
if err := client.DeleteMachineSetObjectsInNamespace(namespace); err != nil {
480480
err = fmt.Errorf("error deleting machine sets: %v", err)
481481
errors = append(errors, err.Error())
482482
}
483483
glog.Infof("Deleting machines")
484-
if err := client.DeleteMachineObjects(namespace); err != nil {
484+
if err := client.DeleteMachineObjectsInNamespace(namespace); err != nil {
485485
err = fmt.Errorf("error deleting machines: %v", err)
486486
errors = append(errors, err.Error())
487487
}
488488
glog.Infof("Deleting clusters")
489-
if err := client.DeleteClusterObjects(namespace); err != nil {
489+
if err := client.DeleteClusterObjectsInNamespace(namespace); err != nil {
490490
err = fmt.Errorf("error deleting clusters: %v", err)
491491
errors = append(errors, err.Error())
492492
}

clusterctl/clusterdeployer/clusterdeployer_test.go

Lines changed: 51 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -83,28 +83,32 @@ func (m *mockProviderComponentsStore) Load() (string, error) {
8383
}
8484

8585
type testClusterClient struct {
86-
ApplyErr error
87-
DeleteErr error
88-
WaitForClusterV1alpha1ReadyErr error
89-
GetClusterObjectsErr error
90-
GetClusterObjectErr error
91-
GetClusterObjectsInNamespaceErr error
92-
GetMachineDeploymentObjectsErr error
93-
GetMachineDeploymentObjectsInNamespaceErr error
94-
GetMachineSetObjectsErr error
95-
GetMachineSetObjectsInNamespaceErr error
96-
GetMachineObjectsErr error
97-
GetMachineObjectsInNamespaceErr error
98-
CreateClusterObjectErr error
99-
CreateMachineObjectsErr error
100-
CreateMachineSetObjectsErr error
101-
CreateMachineDeploymentsObjectsErr error
102-
DeleteClusterObjectsErr error
103-
DeleteMachineObjectsErr error
104-
DeleteMachineSetObjectsErr error
105-
DeleteMachineDeploymentsObjectsErr error
106-
UpdateClusterObjectEndpointErr error
107-
CloseErr error
86+
ApplyErr error
87+
DeleteErr error
88+
WaitForClusterV1alpha1ReadyErr error
89+
GetClusterObjectsErr error
90+
GetClusterObjectErr error
91+
GetClusterObjectsInNamespaceErr error
92+
GetMachineDeploymentObjectsErr error
93+
GetMachineDeploymentObjectsInNamespaceErr error
94+
GetMachineSetObjectsErr error
95+
GetMachineSetObjectsInNamespaceErr error
96+
GetMachineObjectsErr error
97+
GetMachineObjectsInNamespaceErr error
98+
CreateClusterObjectErr error
99+
CreateMachineObjectsErr error
100+
CreateMachineSetObjectsErr error
101+
CreateMachineDeploymentsObjectsErr error
102+
DeleteClusterObjectsErr error
103+
DeleteClusterObjectsInNamespaceErr error
104+
DeleteMachineObjectsErr error
105+
DeleteMachineObjectsInNamespaceErr error
106+
DeleteMachineSetObjectsErr error
107+
DeleteMachineSetObjectsInNamespaceErr error
108+
DeleteMachineDeploymentsObjectsErr error
109+
DeleteMachineDeploymentsObjectsInNamespaceErr error
110+
UpdateClusterObjectEndpointErr error
111+
CloseErr error
108112

109113
clusters map[string][]*clusterv1.Cluster
110114
machineDeployments map[string][]*clusterv1.MachineDeployment
@@ -217,19 +221,35 @@ func (c *testClusterClient) CreateMachineObjects(machines []*clusterv1.Machine,
217221
return c.CreateMachineObjectsErr
218222
}
219223

220-
func (c *testClusterClient) DeleteClusterObjects(namespace string) error {
224+
func (c *testClusterClient) DeleteClusterObjectsInNamespace(ns string) error {
225+
return c.DeleteClusterObjectsInNamespaceErr
226+
}
227+
228+
func (c *testClusterClient) DeleteClusterObjects() error {
221229
return c.DeleteClusterObjectsErr
222230
}
223231

224-
func (c *testClusterClient) DeleteMachineDeploymentObjects(namespace string) error {
232+
func (c *testClusterClient) DeleteMachineDeploymentObjectsInNamespace(namespace string) error {
233+
return c.DeleteMachineDeploymentsObjectsInNamespaceErr
234+
}
235+
236+
func (c *testClusterClient) DeleteMachineDeploymentObjects() error {
225237
return c.DeleteMachineDeploymentsObjectsErr
226238
}
227239

228-
func (c *testClusterClient) DeleteMachineSetObjects(namespace string) error {
240+
func (c *testClusterClient) DeleteMachineSetObjectsInNamespace(namespace string) error {
241+
return c.DeleteMachineSetObjectsInNamespaceErr
242+
}
243+
244+
func (c *testClusterClient) DeleteMachineSetObjects() error {
229245
return c.DeleteMachineSetObjectsErr
230246
}
231247

232-
func (c *testClusterClient) DeleteMachineObjects(namespace string) error {
248+
func (c *testClusterClient) DeleteMachineObjectsInNamespace(namespace string) error {
249+
return c.DeleteMachineObjectsInNamespaceErr
250+
}
251+
252+
func (c *testClusterClient) DeleteMachineObjects() error {
233253
return c.DeleteMachineObjectsErr
234254
}
235255

@@ -761,11 +781,11 @@ func TestDeleteBasicScenarios(t *testing.T) {
761781
{"error creating machine sets", metav1.NamespaceDefault, nil, nil, &testClusterClient{CreateMachineSetObjectsErr: fmt.Errorf("create machine sets error")}, &testClusterClient{machineSets: defaultNamespaceMachineSets}, "unable to copy objects from internal to external cluster: error moving MachineSet 'machine-set-name-1': create machine sets error"},
762782
{"error creating machine deployments", metav1.NamespaceDefault, nil, nil, &testClusterClient{CreateMachineDeploymentsObjectsErr: fmt.Errorf("create machine deployments error")}, &testClusterClient{machineDeployments: defaultNamespaceMachineDeployments}, "unable to copy objects from internal to external cluster: error moving MachineDeployment 'machine-deployment-name-1': create machine deployments error"},
763783
{"error creating cluster", metav1.NamespaceDefault, nil, nil, &testClusterClient{CreateClusterObjectErr: fmt.Errorf("create cluster error")}, &testClusterClient{clusters: defaultNamespaceClusters}, "unable to copy objects from internal to external cluster: error moving Cluster 'cluster-name-1': create cluster error"},
764-
{"error deleting machines", metav1.NamespaceDefault, nil, nil, &testClusterClient{DeleteMachineObjectsErr: fmt.Errorf("delete machines error")}, &testClusterClient{}, "unable to finish deleting objects in external cluster, resources may have been leaked: error(s) encountered deleting objects from external cluster: [error deleting machines: delete machines error]"},
765-
{"error deleting machine sets", metav1.NamespaceDefault, nil, nil, &testClusterClient{DeleteMachineSetObjectsErr: fmt.Errorf("delete machine sets error")}, &testClusterClient{}, "unable to finish deleting objects in external cluster, resources may have been leaked: error(s) encountered deleting objects from external cluster: [error deleting machine sets: delete machine sets error]"},
766-
{"error deleting machine deployments", metav1.NamespaceDefault, nil, nil, &testClusterClient{DeleteMachineDeploymentsObjectsErr: fmt.Errorf("delete machine deployments error")}, &testClusterClient{}, "unable to finish deleting objects in external cluster, resources may have been leaked: error(s) encountered deleting objects from external cluster: [error deleting machine deployments: delete machine deployments error]"},
767-
{"error deleting clusters", metav1.NamespaceDefault, nil, nil, &testClusterClient{DeleteClusterObjectsErr: fmt.Errorf("delete clusters error")}, &testClusterClient{}, "unable to finish deleting objects in external cluster, resources may have been leaked: error(s) encountered deleting objects from external cluster: [error deleting clusters: delete clusters error]"},
768-
{"error deleting machines and clusters", metav1.NamespaceDefault, nil, nil, &testClusterClient{DeleteMachineObjectsErr: fmt.Errorf("delete machines error"), DeleteClusterObjectsErr: fmt.Errorf("delete clusters error")}, &testClusterClient{}, "unable to finish deleting objects in external cluster, resources may have been leaked: error(s) encountered deleting objects from external cluster: [error deleting machines: delete machines error, error deleting clusters: delete clusters error]"},
784+
{"error deleting machines", metav1.NamespaceDefault, nil, nil, &testClusterClient{DeleteMachineObjectsInNamespaceErr: fmt.Errorf("delete machines error")}, &testClusterClient{}, "unable to finish deleting objects in external cluster, resources may have been leaked: error(s) encountered deleting objects from external cluster: [error deleting machines: delete machines error]"},
785+
{"error deleting machine sets", metav1.NamespaceDefault, nil, nil, &testClusterClient{DeleteMachineSetObjectsInNamespaceErr: fmt.Errorf("delete machine sets error")}, &testClusterClient{}, "unable to finish deleting objects in external cluster, resources may have been leaked: error(s) encountered deleting objects from external cluster: [error deleting machine sets: delete machine sets error]"},
786+
{"error deleting machine deployments", metav1.NamespaceDefault, nil, nil, &testClusterClient{DeleteMachineDeploymentsObjectsInNamespaceErr: fmt.Errorf("delete machine deployments error")}, &testClusterClient{}, "unable to finish deleting objects in external cluster, resources may have been leaked: error(s) encountered deleting objects from external cluster: [error deleting machine deployments: delete machine deployments error]"},
787+
{"error deleting clusters", metav1.NamespaceDefault, nil, nil, &testClusterClient{DeleteClusterObjectsInNamespaceErr: fmt.Errorf("delete clusters error")}, &testClusterClient{}, "unable to finish deleting objects in external cluster, resources may have been leaked: error(s) encountered deleting objects from external cluster: [error deleting clusters: delete clusters error]"},
788+
{"error deleting machines and clusters", metav1.NamespaceDefault, nil, nil, &testClusterClient{DeleteMachineObjectsInNamespaceErr: fmt.Errorf("delete machines error"), DeleteClusterObjectsInNamespaceErr: fmt.Errorf("delete clusters error")}, &testClusterClient{}, "unable to finish deleting objects in external cluster, resources may have been leaked: error(s) encountered deleting objects from external cluster: [error deleting machines: delete machines error, error deleting clusters: delete clusters error]"},
769789
}
770790
for _, tc := range testCases {
771791
t.Run(tc.name, func(t *testing.T) {

0 commit comments

Comments
 (0)