Skip to content

Commit 06222f7

Browse files
Add tests for generic removal via plugin
Signed-off-by: Danil Grigorev <[email protected]>
1 parent f2d4da3 commit 06222f7

File tree

4 files changed

+84
-6
lines changed

4 files changed

+84
-6
lines changed

cmd/plugin/cmd/delete.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ var deleteCmd = &cobra.Command{
8282
# Important! As a consequence of this operation, all the corresponding resources managed by
8383
# the AWS infrastructure provider and Cluster API Providers are orphaned and there might be
8484
# ongoing costs incurred as a result of this.
85-
capioperator delete --core cluster-api --infrastructure aws
85+
capioperator delete --core --infrastructure aws
8686
8787
# Delete the AWS infrastructure provider and related CRDs. Please note that this forces deletion of
8888
# all the related objects (e.g. AWSClusters, AWSMachines etc.).
@@ -118,7 +118,7 @@ func init() {
118118
"Forces the deletion of the provider's CRDs (and of all the related objects)")
119119

120120
deleteCmd.Flags().BoolVar(&deleteOpts.coreProvider, "core", false,
121-
"Core provider (e.g. cluster-api) to delete from the management cluster")
121+
"Core provider to delete from the management cluster. If not set, core provider is not removed. Cluster cannot have more then 1 core provider in total.")
122122
deleteCmd.Flags().StringSliceVarP(&deleteOpts.infrastructureProviders, "infrastructure", "i", nil,
123123
"Infrastructure provider and namespace (e.g. aws:<namespace>) to delete from the management cluster")
124124
deleteCmd.Flags().StringSliceVarP(&deleteOpts.bootstrapProviders, "bootstrap", "b", nil,
@@ -335,6 +335,8 @@ func deleteProviders(ctx context.Context, client ctrlclient.Client, providerList
335335
}
336336

337337
if deleteOpts.includeCRDs && len(providerList.GetItems()) == 0 {
338+
log.Info("Removing CRDs")
339+
338340
group := gvk.GroupKind()
339341
group.Kind = strings.Replace(strings.ToLower(group.Kind), "list", "s", 1)
340342
crd := &apiextensionsv1.CustomResourceDefinition{ObjectMeta: metav1.ObjectMeta{Name: group.String()}}
@@ -344,5 +346,7 @@ func deleteProviders(ctx context.Context, client ctrlclient.Client, providerList
344346
}
345347
}
346348

349+
log.Info("All requested providers are deleted")
350+
347351
return ready, nil
348352
}

cmd/plugin/cmd/delete_test.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ import (
2020
"testing"
2121

2222
. "github.com/onsi/gomega"
23+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2324
"k8s.io/apimachinery/pkg/fields"
25+
26+
operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
27+
ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
2428
)
2529

2630
func TestSelectorFromProvider(t *testing.T) {
@@ -70,3 +74,47 @@ func TestSelectorFromProvider(t *testing.T) {
7074
})
7175
}
7276
}
77+
78+
func TestDeleteProviders(t *testing.T) {
79+
tests := []struct {
80+
name string
81+
list genericProviderList
82+
providers []genericProvider
83+
selector fields.Set
84+
}{{
85+
name: "Delete providers",
86+
list: &operatorv1.AddonProviderList{},
87+
providers: []genericProvider{&operatorv1.AddonProvider{
88+
ObjectMeta: metav1.ObjectMeta{
89+
Name: "addon",
90+
Namespace: "default",
91+
},
92+
}, &operatorv1.AddonProvider{
93+
ObjectMeta: metav1.ObjectMeta{
94+
Name: "other",
95+
Namespace: "default",
96+
},
97+
}},
98+
selector: fields.Set{"metadata.namespace": "default"},
99+
}}
100+
101+
for _, tt := range tests {
102+
t.Run(tt.name, func(t *testing.T) {
103+
g := NewWithT(t)
104+
for _, provider := range tt.providers {
105+
g.Expect(env.Create(ctx, provider)).To(Succeed())
106+
}
107+
108+
_, err := deleteProviders(ctx, env, tt.list, ctrlclient.MatchingFieldsSelector{
109+
Selector: fields.SelectorFromSet(tt.selector),
110+
})
111+
g.Expect(err).NotTo(HaveOccurred())
112+
113+
for _, genericProvider := range tt.providers {
114+
g.Eventually(func() error {
115+
return env.Get(ctx, ctrlclient.ObjectKeyFromObject(genericProvider), genericProvider)
116+
}, waitShort).Should(HaveOccurred())
117+
}
118+
})
119+
}
120+
}

cmd/plugin/cmd/suite_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ import (
2424

2525
"sigs.k8s.io/cluster-api-operator/internal/envtest"
2626
ctrl "sigs.k8s.io/controller-runtime"
27+
"sigs.k8s.io/controller-runtime/pkg/client"
28+
29+
operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
2730
)
2831

2932
const (
@@ -41,6 +44,24 @@ func TestMain(m *testing.M) {
4144

4245
env = envtest.New()
4346

47+
if err := env.Manager.GetCache().IndexField(ctx, &operatorv1.AddonProvider{},
48+
"metadata.name",
49+
func(obj client.Object) []string {
50+
return []string{obj.GetName()}
51+
},
52+
); err != nil {
53+
panic(fmt.Sprintf("Error setting up name index field: %v", err))
54+
}
55+
56+
if err := env.Manager.GetCache().IndexField(ctx, &operatorv1.AddonProvider{},
57+
"metadata.namespace",
58+
func(obj client.Object) []string {
59+
return []string{obj.GetNamespace()}
60+
},
61+
); err != nil {
62+
panic(fmt.Sprintf("Error setting up namespace index field: %v", err))
63+
}
64+
4465
go func() {
4566
if err := env.Start(ctx); err != nil {
4667
panic(fmt.Sprintf("Failed to start the envtest manager: %v", err))

cmd/plugin/cmd/utils.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
clusterctlv1 "sigs.k8s.io/cluster-api/cmd/clusterctl/api/v1alpha3"
3434
ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
3535

36+
admissionv1 "k8s.io/api/admissionregistration/v1"
3637
operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
3738

3839
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
@@ -48,6 +49,14 @@ var (
4849
scheme = runtime.NewScheme()
4950
)
5051

52+
func init() {
53+
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
54+
utilruntime.Must(apiextensionsv1.AddToScheme(scheme))
55+
utilruntime.Must(operatorv1.AddToScheme(scheme))
56+
utilruntime.Must(admissionv1.AddToScheme(scheme))
57+
utilruntime.Must(clusterctlv1.AddToScheme(scheme))
58+
}
59+
5160
type genericProvider interface {
5261
ctrlclient.Object
5362
operatorv1.GenericProvider
@@ -70,10 +79,6 @@ func CreateKubeClient(kubeconfigPath, kubeconfigContext string) (ctrlclient.Clie
7079
return nil, fmt.Errorf("error loading client config: %w", err)
7180
}
7281

73-
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
74-
utilruntime.Must(apiextensionsv1.AddToScheme(scheme))
75-
utilruntime.Must(operatorv1.AddToScheme(scheme))
76-
7782
client, err := ctrlclient.New(config, ctrlclient.Options{Scheme: scheme})
7883
if err != nil {
7984
return nil, fmt.Errorf("error creating client: %w", err)

0 commit comments

Comments
 (0)