Skip to content

Commit

Permalink
added code to add dedicated vnet
Browse files Browse the repository at this point in the history
  • Loading branch information
shubhadapaithankar committed Jun 10, 2024
1 parent d2034f0 commit f330d90
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 23 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -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=
Expand Down
95 changes: 74 additions & 21 deletions hack/cluster/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"context"
"fmt"
"os"
"os/exec"
"strings"

"github.com/davecgh/go-spew/spew"
Expand All @@ -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])
Expand All @@ -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()
Expand All @@ -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":
Expand All @@ -79,16 +120,39 @@ 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:
return fmt.Errorf("invalid command %s", os.Args[1])
}
}

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
Expand All @@ -97,23 +161,12 @@ 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
}
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)
}
}
6 changes: 6 additions & 0 deletions vendor/modules.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit f330d90

Please sign in to comment.