From eb94835d81f1b62c833b4f6f0f16d51df26250d0 Mon Sep 17 00:00:00 2001 From: rna-afk Date: Thu, 7 Mar 2024 12:17:59 -0500 Subject: [PATCH] azure: Create resource group during PreProvision Creating a resource group in PreProvision stage of CAPZ to enable users to set the ManagedBy field. --- pkg/infrastructure/azure/azure.go | 39 +++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/pkg/infrastructure/azure/azure.go b/pkg/infrastructure/azure/azure.go index 1ac2971998b..90233633bdd 100644 --- a/pkg/infrastructure/azure/azure.go +++ b/pkg/infrastructure/azure/azure.go @@ -1,6 +1,14 @@ package azure import ( + "context" + "fmt" + + "github.com/Azure/azure-sdk-for-go/sdk/azidentity" + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources" + "github.com/Azure/go-autorest/autorest/to" + + "github.com/openshift/installer/pkg/asset/installconfig" "github.com/openshift/installer/pkg/infrastructure/clusterapi" azuretypes "github.com/openshift/installer/pkg/types/azure" ) @@ -12,3 +20,34 @@ type Provider struct{} // Name gives the name of the provider, Azure. func (*Provider) Name() string { return azuretypes.Name } + +func (*Provider) PreProvision(ctx context.Context, in clusterapi.PreProvisionInput) { + if in.InstallConfig.Config.Azure.ResourceGroupName == "" { + createResourceGroup(ctx, in.InstallConfig, in.InfraID) + } +} + +// createResourceGroup creates the resource group required for Azure installation. +func createResourceGroup(ctx context.Context, ic *installconfig.InstallConfig, infraID string) error { + rgName := fmt.Sprintf("%s-rg", infraID) + managedBy := ic.Config.Azure.ManagedBy + session, err := ic.Azure.Session() + if err != nil { + return err + } + cred, err := azidentity.NewDefaultAzureCredential(nil) + if err != nil { + return err + } + rgClient, err := armresources.NewResourceGroupsClient(session.Credentials.SubscriptionID, cred, nil) + if err != nil { + return err + } + param := armresources.ResourceGroup{ + Location: to.StringPtr(ic.Config.Azure.Region), + ManagedBy: &managedBy, + } + + _, err = rgClient.CreateOrUpdate(ctx, rgName, param, nil) + return err +}