Skip to content

Commit 0cf7044

Browse files
committed
fix(azure)!: migrate containers, aks, loganalytics, subscription, resourcegroup to new ARM SDK
Migrate 5 Azure module files from the archived azure-sdk-for-go/services/ SDK to the actively maintained azure-sdk-for-go/sdk/resourcemanager/ packages. The old SDK no longer receives security fixes. Modules migrated: - containers.go: containerregistry + containerinstance → armcontainerregistry + armcontainerinstance/v2 - aks.go: containerservice → armcontainerservice/v6 - loganalytics.go: operationalinsights (preview) → armoperationalinsights/v2 - subscription.go: subscriptions → armsubscriptions - resourcegroup.go: resources + go-autorest → armresources (delegates to existing V2 client) Breaking changes: - Return types change to new SDK types (e.g., *containerregistry.Registry → *armcontainerregistry.Registry) - Fields now nested under .Properties (e.g., .LoginServer → .Properties.LoginServer) - Removed authorizer-based Get*ClientContextE helpers (replaced by Create*ClientContextE) Other changes: - client_factory.go: replaced old-SDK client factories with ARM credential+options pattern - region.go: updated ListLocations to new pager API - Integration tests updated for new SDK field access patterns - Added WithClient variants and azfake unit tests for all migrated modules
1 parent 57fac81 commit 0cf7044

19 files changed

Lines changed: 728 additions & 374 deletions

go.mod

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,19 @@ require (
5151
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/appcontainers/armappcontainers/v3 v3.0.0
5252
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/appservice/armappservice/v2 v2.3.0
5353
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.4.0
54+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerinstance/armcontainerinstance/v2 v2.4.0
55+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerregistry/armcontainerregistry v1.2.0
56+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v6 v6.6.0
5457
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/cosmos/armcosmos/v3 v3.4.0
5558
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/datafactory/armdatafactory/v9 v9.1.0
5659
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/keyvault/armkeyvault v1.5.0
5760
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/mysql/armmysql v1.2.0
5861
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0
62+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/operationalinsights/armoperationalinsights/v2 v2.0.2
5963
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/postgresql/armpostgresql v1.2.0
6064
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns v1.3.0
6165
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0
66+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions v1.3.0
6267
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/servicebus/armservicebus/v2 v2.0.0-beta.3
6368
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/sql/armsql v1.2.0
6469
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.8.1

go.sum

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/appservice/armappservice/v
4848
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/appservice/armappservice/v2 v2.3.0/go.mod h1:nJLFPGJkyKfDDyJiPuHIXsCi/gpJkm07EvRgiX7SGlI=
4949
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.4.0 h1:z7Mqz6l0EFH549GvHEqfjKvi+cRScxLWbaoeLm9wxVQ=
5050
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.4.0/go.mod h1:v6gbfH+7DG7xH2kUNs+ZJ9tF6O3iNnR85wMtmr+F54o=
51+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerinstance/armcontainerinstance/v2 v2.4.0 h1:+dIXMjlifRbG3d01DF8dwckUSXADuW5dgBNt1fbkpv0=
52+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerinstance/armcontainerinstance/v2 v2.4.0/go.mod h1:FN0UJ15tJ7kV7JYrYAleEq44Ew1cUiyLcJrfrTxHGd0=
53+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerregistry/armcontainerregistry v1.2.0 h1:DWlwvVV5r/Wy1561nZ3wrpI1/vDIBRY/Wd1HWaRBZWA=
54+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerregistry/armcontainerregistry v1.2.0/go.mod h1:E7ltexgRDmeJ0fJWv0D/HLwY2xbDdN+uv+X2uZtOx3w=
55+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v5 v5.0.0 h1:5n7dPVqsWfVKw+ZiEKSd3Kzu7gwBkbEBkeXb8rgaE9Q=
56+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v5 v5.0.0/go.mod h1:HcZY0PHPo/7d75p99lB6lK0qYOP4vLRJUBpiehYXtLQ=
57+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v6 v6.6.0 h1:xkWEcbsnJWid3rOf/S/LOHy1I55JA+4kw/f8Tnm+Onc=
58+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v6 v6.6.0/go.mod h1:OWKfCmX4X3Vp2w7GSx1LZn8566tOHJBA6K0IAUVNYx0=
5159
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/cosmos/armcosmos/v3 v3.4.0 h1:+EhRnIOLvffCvUMUfP+MgOp6PrtN1d6xt94DZtrC3lA=
5260
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/cosmos/armcosmos/v3 v3.4.0/go.mod h1:Bb7kqorvA2acMCNFac+2ldoQWi7QrcMdH+9Gg9C7fSM=
5361
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/datafactory/armdatafactory/v9 v9.1.0 h1:82oTC4oB/7AjVmPR8KMvlyHZgZ8PGdboh8c0Jol/XWY=
@@ -66,12 +74,16 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/mysql/armmysql v1.2.0 h1:d
6674
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/mysql/armmysql v1.2.0/go.mod h1:6z3b+JdBLH0eMzfBex/cvEIoEFVEwXuB0wbgdfN11iM=
6775
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0 h1:HYGD75g0bQ3VO/Omedm54v4LrD3B1cGImuRF3AJ5wLo=
6876
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0/go.mod h1:ulHyBFJOI0ONiRL4vcJTmS7rx18jQQlEPmAgo80cRdM=
77+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/operationalinsights/armoperationalinsights/v2 v2.0.2 h1:SFLbQmpdytToYZQJw5NqrZRwHPIGJmf5ZgjStbLfUuU=
78+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/operationalinsights/armoperationalinsights/v2 v2.0.2/go.mod h1:H3EFkhcVTisidszwtIkRDggjS2HmOIA26J3g8hDdHAY=
6979
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/postgresql/armpostgresql v1.2.0 h1:0hXKrsbh2M6CQyW0TDC9Bsyd99vQmrOxiBTUfQHZjPA=
7080
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/postgresql/armpostgresql v1.2.0/go.mod h1:bvZZor36Jg9q9kouuMyfJ+ay77+qK+YUfThXH1FdXjU=
7181
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns v1.3.0 h1:yzrctSl9GMIQ5lHu7jc8olOsGjWDCsBpJhWqfGa/YIM=
7282
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns v1.3.0/go.mod h1:GE4m0rnnfwLGX0Y9A9A25Zx5N/90jneT5ABevqzhuFQ=
7383
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 h1:Dd+RhdJn0OTtVGaeDLZpcumkIVCtA/3/Fo42+eoYvVM=
7484
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0/go.mod h1:5kakwfW5CjC9KK+Q4wjXAg+ShuIm2mBMua0ZFj2C8PE=
85+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions v1.3.0 h1:wxQx2Bt4xzPIKvW59WQf1tJNx/ZZKPfN+EhPX3Z6CYY=
86+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions v1.3.0/go.mod h1:TpiwjwnW/khS0LKs4vW5UmmT9OWcxaveS8U7+tlknzo=
7587
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/servicebus/armservicebus/v2 v2.0.0-beta.3 h1:JLPf82byRFgfB0f2feJMmRfCCFV0W9/GayiiewTvjlw=
7688
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/servicebus/armservicebus/v2 v2.0.0-beta.3/go.mod h1:9sfaaa+UF5VVus+Tr/bd1qm1oRoltnewm3HpiT9l8VU=
7789
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/sql/armsql v1.2.0 h1:S087deZ0kP1RUg4pU7w9U9xpUedTCbOtz+mnd0+hrkQ=

modules/azure/aks.go

Lines changed: 21 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,74 +3,52 @@ package azure
33
import (
44
"context"
55

6-
"github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2019-11-01/containerservice"
6+
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v6"
77
"github.com/gruntwork-io/terratest/modules/testing"
88
"github.com/stretchr/testify/require"
99
)
1010

11-
// GetManagedClustersClientContextE is a helper function that will setup an Azure ManagedClusters client on your behalf.
11+
// GetManagedClusterContext returns a ManagedCluster for the specified cluster in the given resource group.
12+
// This function would fail the test if there is an error.
1213
// The ctx parameter supports cancellation and timeouts.
13-
func GetManagedClustersClientContextE(ctx context.Context, subscriptionID string) (*containerservice.ManagedClustersClient, error) {
14-
// Create a cluster client
15-
client, err := CreateManagedClustersClientContextE(ctx, subscriptionID)
16-
if err != nil {
17-
return nil, err
18-
}
19-
20-
// setup authorizer
21-
authorizer, err := NewAuthorizer()
22-
if err != nil {
23-
return nil, err
24-
}
14+
func GetManagedClusterContext(t testing.TestingT, ctx context.Context, resourceGroupName, clusterName, subscriptionID string) *armcontainerservice.ManagedCluster {
15+
t.Helper()
2516

26-
client.Authorizer = *authorizer
17+
cluster, err := GetManagedClusterContextE(t, ctx, resourceGroupName, clusterName, subscriptionID)
18+
require.NoError(t, err)
2719

28-
return &client, nil
20+
return cluster
2921
}
3022

31-
// GetManagedClustersClientE is a helper function that will setup an Azure ManagedClusters client on your behalf.
23+
// GetManagedClusterE returns a ManagedCluster for the specified cluster in the given resource group.
3224
//
33-
// Deprecated: Use [GetManagedClustersClientContextE] instead.
34-
func GetManagedClustersClientE(subscriptionID string) (*containerservice.ManagedClustersClient, error) {
35-
return GetManagedClustersClientContextE(context.Background(), subscriptionID)
25+
// Deprecated: Use [GetManagedClusterContextE] instead.
26+
func GetManagedClusterE(t testing.TestingT, resourceGroupName, clusterName, subscriptionID string) (*armcontainerservice.ManagedCluster, error) {
27+
return GetManagedClusterContextE(t, context.Background(), resourceGroupName, clusterName, subscriptionID)
3628
}
3729

3830
// GetManagedClusterContextE returns a ManagedCluster for the specified cluster in the given resource group.
3931
// The ctx parameter supports cancellation and timeouts.
40-
func GetManagedClusterContextE(t testing.TestingT, ctx context.Context, resourceGroupName, clusterName, subscriptionID string) (*containerservice.ManagedCluster, error) {
32+
func GetManagedClusterContextE(t testing.TestingT, ctx context.Context, resourceGroupName, clusterName, subscriptionID string) (*armcontainerservice.ManagedCluster, error) {
4133
subscriptionID, err := getTargetAzureSubscription(subscriptionID)
4234
if err != nil {
4335
return nil, err
4436
}
4537

46-
client, err := GetManagedClustersClientContextE(ctx, subscriptionID)
38+
client, err := CreateManagedClustersClientContextE(ctx, subscriptionID)
4739
if err != nil {
4840
return nil, err
4941
}
5042

51-
managedCluster, err := client.Get(ctx, resourceGroupName, clusterName)
43+
return GetManagedClusterWithClient(ctx, client, resourceGroupName, clusterName)
44+
}
45+
46+
// GetManagedClusterWithClient returns a ManagedCluster using the provided ManagedClustersClient.
47+
func GetManagedClusterWithClient(ctx context.Context, client *armcontainerservice.ManagedClustersClient, resourceGroupName string, clusterName string) (*armcontainerservice.ManagedCluster, error) {
48+
resp, err := client.Get(ctx, resourceGroupName, clusterName, nil)
5249
if err != nil {
5350
return nil, err
5451
}
5552

56-
return &managedCluster, nil
57-
}
58-
59-
// GetManagedClusterContext returns a ManagedCluster for the specified cluster in the given resource group.
60-
// This function would fail the test if there is an error.
61-
// The ctx parameter supports cancellation and timeouts.
62-
func GetManagedClusterContext(t testing.TestingT, ctx context.Context, resourceGroupName, clusterName, subscriptionID string) *containerservice.ManagedCluster {
63-
t.Helper()
64-
65-
cluster, err := GetManagedClusterContextE(t, ctx, resourceGroupName, clusterName, subscriptionID)
66-
require.NoError(t, err)
67-
68-
return cluster
69-
}
70-
71-
// GetManagedClusterE returns a ManagedCluster for the specified cluster in the given resource group.
72-
//
73-
// Deprecated: Use [GetManagedClusterContextE] instead.
74-
func GetManagedClusterE(t testing.TestingT, resourceGroupName, clusterName, subscriptionID string) (*containerservice.ManagedCluster, error) {
75-
return GetManagedClusterContextE(t, context.Background(), resourceGroupName, clusterName, subscriptionID)
53+
return &resp.ManagedCluster, nil
7654
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package azure_test
2+
3+
import (
4+
"context"
5+
"net/http"
6+
"testing"
7+
8+
"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
9+
azfake "github.com/Azure/azure-sdk-for-go/sdk/azcore/fake"
10+
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
11+
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
12+
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v6"
13+
csfake "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v6/fake"
14+
"github.com/gruntwork-io/terratest/modules/azure"
15+
"github.com/stretchr/testify/assert"
16+
"github.com/stretchr/testify/require"
17+
)
18+
19+
func newFakeManagedClustersClient(t *testing.T, srv *csfake.ManagedClustersServer) *armcontainerservice.ManagedClustersClient {
20+
t.Helper()
21+
22+
transport := csfake.NewManagedClustersServerTransport(srv)
23+
client, err := armcontainerservice.NewManagedClustersClient("fake-sub", &azfake.TokenCredential{}, &arm.ClientOptions{
24+
ClientOptions: policy.ClientOptions{Transport: transport},
25+
})
26+
require.NoError(t, err)
27+
28+
return client
29+
}
30+
31+
func TestGetManagedClusterWithClient(t *testing.T) {
32+
t.Parallel()
33+
34+
tests := []struct {
35+
server csfake.ManagedClustersServer
36+
name string
37+
wantErr bool
38+
}{
39+
{
40+
name: "Success",
41+
server: csfake.ManagedClustersServer{
42+
Get: func(_ context.Context, _ string, clusterName string, _ *armcontainerservice.ManagedClustersClientGetOptions) (resp azfake.Responder[armcontainerservice.ManagedClustersClientGetResponse], errResp azfake.ErrorResponder) {
43+
resp.SetResponse(http.StatusOK, armcontainerservice.ManagedClustersClientGetResponse{
44+
ManagedCluster: armcontainerservice.ManagedCluster{
45+
Name: to.Ptr(clusterName),
46+
Properties: &armcontainerservice.ManagedClusterProperties{
47+
KubernetesVersion: to.Ptr("1.28.0"),
48+
},
49+
},
50+
}, nil)
51+
52+
return
53+
},
54+
},
55+
},
56+
{
57+
name: "NotFound",
58+
server: csfake.ManagedClustersServer{
59+
Get: func(_ context.Context, _ string, _ string, _ *armcontainerservice.ManagedClustersClientGetOptions) (resp azfake.Responder[armcontainerservice.ManagedClustersClientGetResponse], errResp azfake.ErrorResponder) {
60+
errResp.SetResponseError(http.StatusNotFound, "ResourceNotFound")
61+
return
62+
},
63+
},
64+
wantErr: true,
65+
},
66+
}
67+
68+
for _, tc := range tests {
69+
t.Run(tc.name, func(t *testing.T) {
70+
t.Parallel()
71+
72+
srv := tc.server
73+
client := newFakeManagedClustersClient(t, &srv)
74+
75+
cluster, err := azure.GetManagedClusterWithClient(t.Context(), client, "rg", "my-cluster")
76+
if tc.wantErr {
77+
require.Error(t, err)
78+
return
79+
}
80+
81+
require.NoError(t, err)
82+
assert.Equal(t, "my-cluster", *cluster.Name)
83+
assert.Equal(t, "1.28.0", *cluster.Properties.KubernetesVersion)
84+
})
85+
}
86+
}

0 commit comments

Comments
 (0)