Skip to content

Commit 0a8d3af

Browse files
committed
azure: Delete RoleAssignment after VMScaleSet during cluster deletion
Signed-off-by: Ciprian Hacman <ciprian@hakman.dev>
1 parent 87565e3 commit 0a8d3af

File tree

2 files changed

+18
-16
lines changed

2 files changed

+18
-16
lines changed

pkg/resources/azure/azure.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -575,10 +575,7 @@ func (g *resourceGetter) listDisks(ctx context.Context) ([]*resources.Resource,
575575
func (g *resourceGetter) toDiskResource(disk *compute.Disk) *resources.Resource {
576576
var blocked []string
577577
if disk.ManagedBy != nil {
578-
vm, err := arm.ParseResourceID(*disk.ManagedBy)
579-
if err == nil {
580-
blocked = append(blocked, toKey(typeVMScaleSet, vm.Parent.String()))
581-
}
578+
blocked = append(blocked, toKey(typeVMScaleSetVM, *disk.ManagedBy))
582579
}
583580

584581
return &resources.Resource{
@@ -626,8 +623,10 @@ func (g *resourceGetter) toRoleAssignmentResource(ra *authz.RoleAssignment, vmss
626623
Deleter: g.deleteRoleAssignment,
627624
Blocks: []string{
628625
toKey(typeResourceGroup, g.resourceGroupID()),
629-
toKey(typeVMScaleSet, *vmss.ID),
630626
},
627+
// Wait for the VMSS to be deleted before removing role assignments,
628+
// to avoid permission issues during VMSS teardown.
629+
Blocked: []string{toKey(typeVMScaleSet, *vmss.ID)},
631630
}
632631
}
633632

pkg/resources/azure/azure_test.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package azure
1919
import (
2020
"fmt"
2121
"reflect"
22+
"slices"
2223
"testing"
2324

2425
"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
@@ -227,11 +228,15 @@ func TestListResourcesAzure(t *testing.T) {
227228
toDigests := func(rs map[string]*resources.Resource) map[string]*resourceDigest {
228229
d := map[string]*resourceDigest{}
229230
for k, r := range rs {
231+
blocks := slices.Clone(r.Blocks)
232+
blocked := slices.Clone(r.Blocked)
233+
slices.Sort(blocks)
234+
slices.Sort(blocked)
230235
d[k] = &resourceDigest{
231236
rtype: r.Type,
232237
name: r.Name,
233-
blocks: r.Blocks,
234-
blocked: r.Blocked,
238+
blocks: blocks,
239+
blocked: blocked,
235240
shared: r.Shared,
236241
}
237242
}
@@ -253,8 +258,8 @@ func TestListResourcesAzure(t *testing.T) {
253258
rtype: typeSubnet,
254259
name: subnetName,
255260
blocks: []string{
256-
toKey(typeVirtualNetwork, vnetID),
257261
toKey(typeResourceGroup, rgID),
262+
toKey(typeVirtualNetwork, vnetID),
258263
},
259264
},
260265
toKey(typeRouteTable, rtID): {
@@ -267,8 +272,8 @@ func TestListResourcesAzure(t *testing.T) {
267272
name: vmssName,
268273
blocks: []string{
269274
toKey(typeResourceGroup, rgID),
270-
toKey(typeVirtualNetwork, vnetID),
271275
toKey(typeSubnet, subnetID),
276+
toKey(typeVirtualNetwork, vnetID),
272277
},
273278
blocked: []string{
274279
toKey(typeVMScaleSetVM, vmID),
@@ -278,15 +283,13 @@ func TestListResourcesAzure(t *testing.T) {
278283
rtype: typeDisk,
279284
name: diskName,
280285
blocks: []string{toKey(typeResourceGroup, rgID)},
281-
blocked: []string{toKey(typeVMScaleSet, vmssID)},
286+
blocked: []string{toKey(typeVMScaleSetVM, vmID)},
282287
},
283288
toKey(typeRoleAssignment, raID): {
284-
rtype: typeRoleAssignment,
285-
name: raName,
286-
blocks: []string{
287-
toKey(typeResourceGroup, rgID),
288-
toKey(typeVMScaleSet, vmssID),
289-
},
289+
rtype: typeRoleAssignment,
290+
name: raName,
291+
blocks: []string{toKey(typeResourceGroup, rgID)},
292+
blocked: []string{toKey(typeVMScaleSet, vmssID)},
290293
},
291294
toKey(typeLoadBalancer, lbID): {
292295
rtype: typeLoadBalancer,

0 commit comments

Comments
 (0)