Skip to content

Commit 59779d7

Browse files
committed
use the new sdk for azure resource group
1 parent 716a3ee commit 59779d7

File tree

6 files changed

+174
-0
lines changed

6 files changed

+174
-0
lines changed

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ require (
9191
cloud.google.com/go/monitoring v1.21.2 // indirect
9292
filippo.io/edwards25519 v1.1.0 // indirect
9393
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
94+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 // indirect
9495
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
9596
github.com/Azure/go-autorest/autorest/adal v0.9.13 // indirect
9697
github.com/Azure/go-autorest/autorest/azure/cli v0.4.2 // indirect

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xP
3838
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY=
3939
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/appcontainers/armappcontainers/v3 v3.0.0 h1:NYYoOOPGOqUXw/bGIVd6OY/K8J23a18IAlAx1tOHWNo=
4040
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/appcontainers/armappcontainers/v3 v3.0.0/go.mod h1:LDN3sr8FJ36sY6ZmMes6Q2vHJ+5r1aFsE3wEo7VbXJg=
41+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 h1:Dd+RhdJn0OTtVGaeDLZpcumkIVCtA/3/Fo42+eoYvVM=
42+
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0/go.mod h1:5kakwfW5CjC9KK+Q4wjXAg+ShuIm2mBMua0ZFj2C8PE=
4143
github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
4244
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
4345
github.com/Azure/go-autorest/autorest v0.11.17/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw=

modules/azure/client_factory.go

+34
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ package azure
1212

1313
import (
1414
"fmt"
15+
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
1516
"os"
1617
"reflect"
1718
"strings"
@@ -962,6 +963,14 @@ func CreateManagedEnvironmentsClientE(subscriptionID string) (*armappcontainers.
962963
return client, nil
963964
}
964965

966+
func CreateResourceGroupClientV2E(subscriptionID string) (*armresources.ResourceGroupsClient, error) {
967+
clientFactory, err := getArmResourcesClientFactory(subscriptionID)
968+
if err != nil {
969+
return nil, err
970+
}
971+
return clientFactory.NewResourceGroupsClient(), nil
972+
}
973+
965974
func CreateContainerAppsClientE(subscriptionID string) (*armappcontainers.ContainerAppsClient, error) {
966975
clientFactory, err := getArmAppContainersClientFactory(subscriptionID)
967976
if err != nil {
@@ -1029,6 +1038,31 @@ func getBaseURI() (string, error) {
10291038
return baseURI, nil
10301039
}
10311040

1041+
// getArmResourcesClientFactory gets an arm resources client factory
1042+
func getArmResourcesClientFactory(subscriptionID string) (*armresources.ClientFactory, error) {
1043+
targetSubscriptionID, err := getTargetAzureSubscription(subscriptionID)
1044+
if err != nil {
1045+
return nil, err
1046+
}
1047+
clientCloudConfig, err := getClientCloudConfig()
1048+
if err != nil {
1049+
return nil, err
1050+
}
1051+
cred, err := azidentity.NewDefaultAzureCredential(&azidentity.DefaultAzureCredentialOptions{
1052+
ClientOptions: azcore.ClientOptions{
1053+
Cloud: clientCloudConfig,
1054+
},
1055+
})
1056+
if err != nil {
1057+
return nil, err
1058+
}
1059+
return armresources.NewClientFactory(targetSubscriptionID, cred, &arm.ClientOptions{
1060+
ClientOptions: policy.ClientOptions{
1061+
Cloud: clientCloudConfig,
1062+
},
1063+
})
1064+
}
1065+
10321066
// getArmAppContainersClientFactory gets an arm app containers client factory
10331067
func getArmAppContainersClientFactory(subscriptionID string) (*armappcontainers.ClientFactory, error) {
10341068
targetSubscriptionID, err := getTargetAzureSubscription(subscriptionID)

modules/azure/resourcegroupv2.go

+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package azure
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"testing"
7+
8+
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources"
9+
"github.com/stretchr/testify/require"
10+
)
11+
12+
// ResourceGroupExists indicates whether a resource group exists within a subscription; otherwise false
13+
// This function would fail the test if there is an error.
14+
func ResourceGroupExistsV2(t *testing.T, resourceGroupName string, subscriptionID string) bool {
15+
result, err := ResourceGroupExistsV2E(resourceGroupName, subscriptionID)
16+
require.NoError(t, err)
17+
return result
18+
}
19+
20+
// ResourceGroupExistsE indicates whether a resource group exists within a subscription
21+
func ResourceGroupExistsV2E(resourceGroupName, subscriptionID string) (bool, error) {
22+
exists, err := GetResourceGroupV2E(resourceGroupName, subscriptionID)
23+
if err != nil {
24+
if ResourceNotFoundErrorExists(err) {
25+
return false, nil
26+
}
27+
return false, err
28+
}
29+
return exists, nil
30+
31+
}
32+
33+
// GetResourceGroupE gets a resource group within a subscription
34+
func GetResourceGroupV2E(resourceGroupName, subscriptionID string) (bool, error) {
35+
rg, err := GetAResourceGroupV2E(resourceGroupName, subscriptionID)
36+
if err != nil {
37+
return false, err
38+
}
39+
return (resourceGroupName == *rg.Name), nil
40+
}
41+
42+
// GetAResourceGroup returns a resource group within a subscription
43+
// This function would fail the test if there is an error.
44+
func GetAResourceGroupV2(t *testing.T, resourceGroupName string, subscriptionID string) *armresources.ResourceGroup {
45+
rg, err := GetAResourceGroupV2E(resourceGroupName, subscriptionID)
46+
require.NoError(t, err)
47+
return rg
48+
}
49+
50+
// GetAResourceGroupE gets a resource group within a subscription
51+
func GetAResourceGroupV2E(resourceGroupName, subscriptionID string) (*armresources.ResourceGroup, error) {
52+
client, err := CreateResourceGroupClientV2E(subscriptionID)
53+
if err != nil {
54+
return nil, err
55+
}
56+
57+
rg, err := client.Get(context.Background(), resourceGroupName, &armresources.ResourceGroupsClientGetOptions{})
58+
if err != nil {
59+
return nil, err
60+
}
61+
return &rg.ResourceGroup, nil
62+
}
63+
64+
// ListResourceGroupsByTag returns a resource group list within a subscription based on a tag key
65+
// This function would fail the test if there is an error.
66+
func ListResourceGroupsByTagV2(t *testing.T, tag, subscriptionID string) []*armresources.ResourceGroup {
67+
rg, err := ListResourceGroupsByTagV2E(tag, subscriptionID)
68+
require.NoError(t, err)
69+
return rg
70+
}
71+
72+
// ListResourceGroupsByTagE returns a resource group list within a subscription based on a tag key
73+
func ListResourceGroupsByTagV2E(tag string, subscriptionID string) (rg []*armresources.ResourceGroup, err error) {
74+
client, err := CreateResourceGroupClientV2E(subscriptionID)
75+
if err != nil {
76+
return nil, err
77+
}
78+
79+
filter := fmt.Sprintf("tagName eq '%s'", tag)
80+
pager := client.NewListPager(&armresources.ResourceGroupsClientListOptions{
81+
Filter: &filter,
82+
})
83+
ctx := context.Background()
84+
for pager.More() {
85+
page, err := pager.NextPage(ctx)
86+
if err != nil {
87+
return nil, err
88+
}
89+
rg = append(rg, page.ResourceGroupListResult.Value...)
90+
}
91+
92+
return
93+
}

modules/azure/resourcegroupv2_test.go

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
//go:build azure
2+
// +build azure
3+
4+
// NOTE: We use build tags to differentiate azure testing because we currently do not have azure access setup for
5+
// CircleCI.
6+
package azure
7+
8+
import (
9+
"testing"
10+
11+
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
12+
"github.com/stretchr/testify/assert"
13+
"github.com/stretchr/testify/require"
14+
)
15+
16+
/*
17+
The below tests are currently stubbed out, with the expectation that they will throw errors.
18+
If/when methods to create and delete resource groups are added, these tests can be extended.
19+
*/
20+
21+
func TestResourceGroupExistsV2(t *testing.T) {
22+
t.Parallel()
23+
24+
resourceGroupName := "fakeResourceGroupName"
25+
_, err := ResourceGroupExistsV2E(resourceGroupName, "")
26+
errAzure := &azcore.ResponseError{}
27+
require.ErrorAs(t, err, &errAzure)
28+
assert.Equal(t, errAzure.StatusCode, 404)
29+
}
30+
31+
func TestGetAResourceGroupV2(t *testing.T) {
32+
t.Parallel()
33+
34+
resourceGroupName := "fakeResourceGroupName"
35+
36+
_, err := GetAResourceGroupV2E(resourceGroupName, "")
37+
errAzure := &azcore.ResponseError{}
38+
require.ErrorAs(t, err, &errAzure)
39+
assert.Equal(t, errAzure.StatusCode, 404)
40+
}

test/azure/terraform_azure_resourcegroup_example_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,8 @@ func TestTerraformAzureResourceGroupExample(t *testing.T) {
4343
// website::tag::4:: Verify the resource group exists
4444
exists := azure.ResourceGroupExists(t, resourceGroupName, subscriptionID)
4545
assert.True(t, exists, "Resource group does not exist")
46+
47+
// website::tag::4:: Verify the resource group exists
48+
existsv2 := azure.ResourceGroupExistsV2(t, resourceGroupName, subscriptionID)
49+
assert.True(t, existsv2, "Resource group does not exist")
4650
}

0 commit comments

Comments
 (0)