@@ -18,7 +18,12 @@ package controllers
18
18
19
19
import (
20
20
"context"
21
+ "fmt"
21
22
23
+ infrav1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
24
+ clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
25
+
26
+ "github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2022-03-01/containerservice"
22
27
"github.com/pkg/errors"
23
28
"sigs.k8s.io/cluster-api/util/secret"
24
29
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -78,6 +83,50 @@ func (r *azureManagedControlPlaneService) Reconcile(ctx context.Context) error {
78
83
return errors .Wrap (err , "failed to reconcile kubeconfig secret" )
79
84
}
80
85
86
+ if err := r .deleteUnmanagedAgentPools (ctx ); err != nil {
87
+ return errors .Wrap (err , "failed to delete unmanaged agent pools" )
88
+ }
89
+
90
+ return nil
91
+ }
92
+
93
+ func (r * azureManagedControlPlaneService ) deleteUnmanagedAgentPools (ctx context.Context ) error {
94
+ ctx , log , done := tele .StartSpanWithLogger (ctx , "controllers.azureManagedControlPlaneService.deleteUnmanagedAgentPools" )
95
+ defer done ()
96
+ clusterName := r .scope .ManagedClusterSpec ().ResourceName ()
97
+ listOptions := []client.ListOption {
98
+ client .MatchingLabels (map [string ]string {clusterv1 .ClusterNameLabel : clusterName }),
99
+ }
100
+ managedMachinePools := & infrav1.AzureManagedMachinePoolList {}
101
+ if err := r .kubeclient .List (ctx , managedMachinePools , listOptions ... ); err != nil {
102
+ return fmt .Errorf ("failed to list managed machine pools for cluster %s: %w" , clusterName , err )
103
+ }
104
+ poolMap := make (map [string ]struct {})
105
+ for _ , pool := range managedMachinePools .Items {
106
+ poolMap [* pool .Spec .Name ] = struct {}{}
107
+ }
108
+
109
+ agentPoolsClient := containerservice .NewAgentPoolsClientWithBaseURI (r .scope .BaseURI (), r .scope .SubscriptionID ())
110
+ azure .SetAutoRestClientDefaults (& agentPoolsClient .Client , r .scope .Authorizer ())
111
+
112
+ result , err := agentPoolsClient .List (ctx , r .scope .ManagedClusterSpec ().ResourceGroupName (), clusterName )
113
+ if err != nil {
114
+ return errors .Wrap (err , "failed to list agent pools" )
115
+ }
116
+ for result .NotDone () {
117
+ for _ , pool := range result .Values () {
118
+ if _ , ok := poolMap [* pool .Name ]; ok {
119
+ continue
120
+ }
121
+ log .Info ("start delete node group" , "nodeGroupName" , pool , "clusterName" , clusterName )
122
+ if _ , err = agentPoolsClient .Delete (ctx , r .scope .ManagedClusterSpec ().ResourceGroupName (), clusterName , * pool .Name ); err != nil {
123
+ return errors .Wrap (err , fmt .Sprintf ("failed to delete agent pool %s in cluster %s" , * pool .Name , clusterName ))
124
+ }
125
+ }
126
+ if err = result .NextWithContext (ctx ); err != nil {
127
+ return errors .Wrap (err , "failed to list agent pools" )
128
+ }
129
+ }
81
130
return nil
82
131
}
83
132
0 commit comments