From f330d90102744eb105d759b02dad14610d29284d Mon Sep 17 00:00:00 2001 From: Shubhada Date: Mon, 10 Jun 2024 15:13:13 -0700 Subject: [PATCH] added code to add dedicated vnet --- Makefile | 4 +- go.mod | 2 + go.sum | 4 ++ hack/cluster/cluster.go | 95 ++++++++++++++++++++++++++++++++--------- vendor/modules.txt | 6 +++ 5 files changed, 88 insertions(+), 23 deletions(-) diff --git a/Makefile b/Makefile index 28b9070128a..e13f701559a 100644 --- a/Makefile +++ b/Makefile @@ -76,7 +76,7 @@ runlocal-rp: podman system connection list; \ echo "Using ARO_IMAGE: $(ARO_IMAGE)"; \ if [ -z "$(ARO_IMAGE)" ]; then echo "Error: ARO_IMAGE is not set"; exit 1; fi; \ - podman run --rm -d -p 8443:8443 --name aro-rp -e DOMAIN_NAME=$(DOMAIN_NAME) -e AZURE_FP_CLIENT_ID=$(AZURE_FP_CLIENT_ID) $(ARO_IMAGE) rp + podman run --rm -d -p 8443:8443 --name aro-rp -e DOMAIN_NAME=$(DOMAIN_NAME) -e AZURE_FP_CLIENT_ID=$(AZURE_FP_CLIENT_ID) $(ARO_IMAGE) rp; ensure-aro-image: @if ! podman image exists $(ARO_IMAGE); then \ @@ -244,7 +244,7 @@ secrets: rm secrets.tar.gz secrets-update: - @[ "${SECRET_SA_ACCOUNT_NAME}" ] || ( echo ">> SECRET_SA_ACCOUNT_NAME is not set"; exit 1 ) + @[ "${SECRET_SA_ACCOUNT_NAME}" ] || ( echo ">> SECRET_SA_ACCOUNT_NAME}" is not set"; exit 1 ) tar -czf secrets.tar.gz secrets az storage blob upload -n secrets.tar.gz -c secrets -f secrets.tar.gz --overwrite --account-name ${SECRET_SA_ACCOUNT_NAME} >/dev/null rm secrets.tar.gz diff --git a/go.mod b/go.mod index 3c3c3f0d45a..d787383cc94 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/cosmos/armcosmos/v2 v2.5.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/keyvault/armkeyvault v1.4.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1 + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 github.com/Azure/go-autorest/autorest v0.11.29 github.com/Azure/go-autorest/autorest/adal v0.9.23 github.com/Azure/go-autorest/autorest/date v0.3.0 @@ -96,6 +97,7 @@ require ( require ( dario.cat/mergo v1.0.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect diff --git a/go.sum b/go.sum index cb7db633d62..094e2f14aaa 100644 --- a/go.sum +++ b/go.sum @@ -15,9 +15,13 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.1.2 h1:mLY+pNL github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/keyvault/armkeyvault v1.4.0 h1:HlZMUZW8S4P9oob1nCHxCCKrytxyLc+24nUJGssoEto= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/keyvault/armkeyvault v1.4.0/go.mod h1:StGsLbuJh06Bd8IBfnAlIFV3fLb+gkczONWf15hpX2E= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0 h1:pPvTJ1dY0sA35JOeFq6TsY2xj6Z85Yo23Pj4wCCvu4o= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0 h1:QM6sE5k2ZT/vI5BEe0r7mqjsUSnhVBFbOsVkEuaEfiA= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0/go.mod h1:243D9iHbcQXoFUtgHJwL7gl2zx1aDuDMjvBZVGr2uW0= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1 h1:bWh0Z2rOEDfB/ywv/l0iHN1JgyazE6kW/aIA89+CEK0= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1/go.mod h1:Bzf34hhAE9NSxailk8xVeLEZbUjOXcC+GnU1mMKdhLw= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 h1:7CBQ+Ei8SP2c6ydQTGCCrS35bDxgTMfoP2miAwK++OU= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1/go.mod h1:c/wcGeGx5FUPbM/JltUYHZcKmigwyVLJlDq+4HdtXaw= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= diff --git a/hack/cluster/cluster.go b/hack/cluster/cluster.go index 3e9ea758483..d64b6cf1a21 100644 --- a/hack/cluster/cluster.go +++ b/hack/cluster/cluster.go @@ -7,7 +7,6 @@ import ( "context" "fmt" "os" - "os/exec" "strings" "github.com/davecgh/go-spew/spew" @@ -18,12 +17,28 @@ import ( msgraph_errors "github.com/Azure/ARO-RP/pkg/util/graph/graphsdk/models/odataerrors" utillog "github.com/Azure/ARO-RP/pkg/util/log" "github.com/Azure/ARO-RP/pkg/util/version" + + "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" + "github.com/Azure/azure-sdk-for-go/sdk/azidentity" + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork" + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources" ) const ( Cluster = "CLUSTER" ) +func main() { + log := utillog.GetLogger() + + if err := run(context.Background(), log); err != nil { + if oDataError, ok := err.(msgraph_errors.ODataErrorable); ok { + spew.Dump(oDataError.GetErrorEscaped()) + } + log.Fatal(err) + } +} + func run(ctx context.Context, log *logrus.Entry) error { if len(os.Args) != 2 { return fmt.Errorf("usage: CLUSTER=x %s {create,createApp,deleteApp,delete}", os.Args[0]) @@ -40,16 +55,42 @@ func run(ctx context.Context, log *logrus.Entry) error { clusterName := os.Getenv(Cluster) vnetName := fmt.Sprintf("%s-vnet", clusterName) - subnetName := fmt.Sprintf("%s-subnet", clusterName) resourceGroup := os.Getenv("RESOURCEGROUP") location := os.Getenv("LOCATION") - // Create a new VNet - err = createVNet(log, resourceGroup, vnetName, subnetName, location) + cred, err := azidentity.NewDefaultAzureCredential(nil) + if err != nil { + log.Fatalf("failed to obtain a credential: %v", err) + } + + resourceClient, err := armresources.NewResourceGroupsClient(os.Getenv("AZURE_SUBSCRIPTION_ID"), cred, nil) + if err != nil { + log.Fatalf("failed to create resource group client: %v", err) + } + + vnetClient, err := armnetwork.NewVirtualNetworksClient(os.Getenv("AZURE_SUBSCRIPTION_ID"), cred, nil) + if err != nil { + log.Fatalf("failed to create virtual network client: %v", err) + } + + // Create the resource group + log.Infof("Creating resource group %s in location %s...\n", resourceGroup, location) + _, err = resourceClient.CreateOrUpdate(ctx, resourceGroup, armresources.ResourceGroup{ + Location: to.Ptr(location), + }, nil) + if err != nil { + log.Fatalf("failed to create resource group: %v", err) + } + + // Create the virtual network + log.Infof("Creating virtual network %s in resource group %s...\n", vnetName, resourceGroup) + err = createVNet(ctx, log, vnetClient, resourceGroup, vnetName, location) if err != nil { return err } + log.Infof("Created virtual network %s in resource group %s\n", vnetName, resourceGroup) + osClusterVersion := os.Getenv("OS_CLUSTER_VERSION") if osClusterVersion == "" { osClusterVersion = version.DefaultInstallStream.Version.String() @@ -68,7 +109,7 @@ func run(ctx context.Context, log *logrus.Entry) error { err = c.Create(ctx, resourceGroup, clusterName, osClusterVersion) if err != nil { // If cluster creation fails, delete the created VNet - deleteVNet(log, resourceGroup, vnetName) + deleteVNet(ctx, log, vnetClient, resourceGroup, vnetName) } return err case "createapp": @@ -79,7 +120,7 @@ func run(ctx context.Context, log *logrus.Entry) error { err = c.Delete(ctx, resourceGroup, clusterName) if err == nil { // If cluster deletion succeeds, delete the created VNet - deleteVNet(log, resourceGroup, vnetName) + deleteVNet(ctx, log, vnetClient, resourceGroup, vnetName) } return err default: @@ -87,8 +128,31 @@ func run(ctx context.Context, log *logrus.Entry) error { } } -func createVNet(log *logrus.Entry, resourceGroup, vnetName, subnetName, location string) error { - _, err := exec.Command("az", "network", "vnet", "create", "--resource-group", resourceGroup, "--name", vnetName, "--address-prefix", "10.0.0.0/16", "--subnet-name", subnetName, "--subnet-prefix", "10.0.0.0/24", "--location", location).Output() +func createVNet(ctx context.Context, log *logrus.Entry, vnetClient *armnetwork.VirtualNetworksClient, resourceGroup string, vnetName string, location string) error { + _, err := vnetClient.BeginCreateOrUpdate(ctx, resourceGroup, vnetName, armnetwork.VirtualNetwork{ + Location: to.Ptr(location), + Properties: &armnetwork.VirtualNetworkPropertiesFormat{ + AddressSpace: &armnetwork.AddressSpace{ + AddressPrefixes: []*string{ + to.Ptr("10.0.0.0/16"), + }, + }, + Subnets: []*armnetwork.Subnet{ + { + Name: to.Ptr("master"), + Properties: &armnetwork.SubnetPropertiesFormat{ + AddressPrefix: to.Ptr("10.0.0.0/24"), + }, + }, + { + Name: to.Ptr("worker"), + Properties: &armnetwork.SubnetPropertiesFormat{ + AddressPrefix: to.Ptr("10.0.1.0/24"), + }, + }, + }, + }, + }, nil) if err != nil { log.Errorf("Failed to create VNet: %v", err) return err @@ -97,8 +161,8 @@ func createVNet(log *logrus.Entry, resourceGroup, vnetName, subnetName, location return nil } -func deleteVNet(log *logrus.Entry, resourceGroup, vnetName string) error { - _, err := exec.Command("az", "network", "vnet", "delete", "--resource-group", resourceGroup, "--name", vnetName).Output() +func deleteVNet(ctx context.Context, log *logrus.Entry, vnetClient *armnetwork.VirtualNetworksClient, resourceGroup string, vnetName string) error { + _, err := vnetClient.BeginDelete(ctx, resourceGroup, vnetName, nil) if err != nil { log.Errorf("Failed to delete VNet: %v", err) return err @@ -106,14 +170,3 @@ func deleteVNet(log *logrus.Entry, resourceGroup, vnetName string) error { log.Infof("Deleted VNet %s in resource group %s", vnetName, resourceGroup) return nil } - -func main() { - log := utillog.GetLogger() - - if err := run(context.Background(), log); err != nil { - if oDataError, ok := err.(msgraph_errors.ODataErrorable); ok { - spew.Dump(oDataError.GetErrorEscaped()) - } - log.Fatal(err) - } -} diff --git a/vendor/modules.txt b/vendor/modules.txt index 94eb75e3fbb..55968c7de5d 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -62,9 +62,15 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/cosmos/armcosmos/v2 # github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/keyvault/armkeyvault v1.4.0 ## explicit; go 1.18 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/keyvault/armkeyvault +# github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0 +## explicit; go 1.18 +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork # github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1 ## explicit; go 1.18 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 +# github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 +## explicit; go 1.18 +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources # github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 ## explicit; go 1.16 github.com/Azure/go-ansiterm