From 7136a32ca1e52545b0f1110b8fca0af312d851a6 Mon Sep 17 00:00:00 2001 From: hemarina Date: Fri, 21 Mar 2025 16:33:04 -0700 Subject: [PATCH 1/5] remove all optout changes and apply simple config set --- .../provisioning/bicep/bicep_provider.go | 39 ++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/cli/azd/pkg/infra/provisioning/bicep/bicep_provider.go b/cli/azd/pkg/infra/provisioning/bicep/bicep_provider.go index 99dafee3bbc..9e5931778b5 100644 --- a/cli/azd/pkg/infra/provisioning/bicep/bicep_provider.go +++ b/cli/azd/pkg/infra/provisioning/bicep/bicep_provider.go @@ -23,6 +23,7 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm" "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/cognitiveservices/armcognitiveservices" + "github.com/azure/azure-dev/cli/azd/internal" "github.com/azure/azure-dev/cli/azd/pkg/account" "github.com/azure/azure-dev/cli/azd/pkg/async" "github.com/azure/azure-dev/cli/azd/pkg/azapi" @@ -77,6 +78,7 @@ type BicepProvider struct { portalUrlBase string subscriptionManager *account.SubscriptionsManager azureClient *azapi.AzureClient + userConfigManager config.UserConfigManager } // Name gets the name of the infra provider @@ -611,16 +613,33 @@ func (p *BicepProvider) Deploy(ctx context.Context) (*provisioning.DeployResult, return nil, err } - err = p.validatePreflight( - ctx, - bicepDeploymentData.Target, - bicepDeploymentData.CompiledBicep.RawArmTemplate, - bicepDeploymentData.CompiledBicep.Parameters, - deploymentTags, - optionsMap, - ) + userConfig, err := p.userConfigManager.Load() if err != nil { - return nil, err + return nil, fmt.Errorf("loading user configuration: %w", err) + } + + preflightDisableVar := "provision.disableValidation" + preflightDisable, exists := userConfig.GetString(preflightDisableVar) + if !(preflightDisable == "on" && exists) { + err = p.validatePreflight( + ctx, + bicepDeploymentData.Target, + bicepDeploymentData.CompiledBicep.RawArmTemplate, + bicepDeploymentData.CompiledBicep.Parameters, + deploymentTags, + optionsMap, + ) + if err != nil { + return nil, &internal.ErrorWithSuggestion{ + Err: err, + Suggestion: fmt.Sprintf("To disable provision validation, please run %s.", + output.WithHighLightFormat("`azd config set %s on`", preflightDisableVar)), + } + } + } else { + warningMessage := fmt.Sprintf("WARNING: Provision validation is disabled. To enable it, please run `azd config set %s off`.\n", + preflightDisableVar) + p.console.Message(ctx, output.WithWarningFormat(warningMessage)) } cancelProgress := make(chan bool) @@ -2164,6 +2183,7 @@ func NewBicepProvider( cloud *cloud.Cloud, subscriptionManager *account.SubscriptionsManager, azureClient *azapi.AzureClient, + userConfigManager config.UserConfigManager, ) provisioning.Provider { return &BicepProvider{ envManager: envManager, @@ -2179,5 +2199,6 @@ func NewBicepProvider( portalUrlBase: cloud.PortalUrlBase, subscriptionManager: subscriptionManager, azureClient: azureClient, + userConfigManager: userConfigManager, } } From 8b4b80972386a7e7ae8aa93598d091ba61868d78 Mon Sep 17 00:00:00 2001 From: hemarina Date: Fri, 21 Mar 2025 17:02:51 -0700 Subject: [PATCH 2/5] add var on test --- cli/azd/pkg/infra/provisioning/bicep/bicep_provider_test.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cli/azd/pkg/infra/provisioning/bicep/bicep_provider_test.go b/cli/azd/pkg/infra/provisioning/bicep/bicep_provider_test.go index e47f27cea24..2fbd37bb850 100644 --- a/cli/azd/pkg/infra/provisioning/bicep/bicep_provider_test.go +++ b/cli/azd/pkg/infra/provisioning/bicep/bicep_provider_test.go @@ -26,6 +26,7 @@ import ( "github.com/azure/azure-dev/cli/azd/pkg/azapi" "github.com/azure/azure-dev/cli/azd/pkg/azure" "github.com/azure/azure-dev/cli/azd/pkg/cloud" + "github.com/azure/azure-dev/cli/azd/pkg/config" "github.com/azure/azure-dev/cli/azd/pkg/environment" "github.com/azure/azure-dev/cli/azd/pkg/exec" "github.com/azure/azure-dev/cli/azd/pkg/infra" @@ -380,6 +381,7 @@ func createBicepProvider(t *testing.T, mockContext *mocks.MockContext) *BicepPro }, }, } + userConfigManager := config.NewUserConfigManager(mockContext.ConfigManager) provider := NewBicepProvider( azCli, @@ -403,6 +405,7 @@ func createBicepProvider(t *testing.T, mockContext *mocks.MockContext) *BicepPro cloud.AzurePublic(), nil, nil, + userConfigManager, ) err = provider.Initialize(*mockContext.Context, projectDir, options) @@ -991,6 +994,7 @@ func TestUserDefinedTypes(t *testing.T) { cloud.AzurePublic(), nil, nil, + nil, ) bicepProvider, gooCast := provider.(*BicepProvider) require.True(t, gooCast) From 38c08f68022ecba80d34434364b6c130fd19f536 Mon Sep 17 00:00:00 2001 From: hemarina Date: Fri, 21 Mar 2025 17:09:57 -0700 Subject: [PATCH 3/5] lll --- cli/azd/pkg/infra/provisioning/bicep/bicep_provider.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cli/azd/pkg/infra/provisioning/bicep/bicep_provider.go b/cli/azd/pkg/infra/provisioning/bicep/bicep_provider.go index 9e5931778b5..2cae3657769 100644 --- a/cli/azd/pkg/infra/provisioning/bicep/bicep_provider.go +++ b/cli/azd/pkg/infra/provisioning/bicep/bicep_provider.go @@ -637,7 +637,8 @@ func (p *BicepProvider) Deploy(ctx context.Context) (*provisioning.DeployResult, } } } else { - warningMessage := fmt.Sprintf("WARNING: Provision validation is disabled. To enable it, please run `azd config set %s off`.\n", + warningMessage := fmt.Sprintf("WARNING: Provision validation is disabled. "+ + "To enable it, please run `azd config set %s off`.\n", preflightDisableVar) p.console.Message(ctx, output.WithWarningFormat(warningMessage)) } From e85b9d8452abf137bd9410ee5263d5dce9cdb2a1 Mon Sep 17 00:00:00 2001 From: hemarina Date: Thu, 27 Mar 2025 17:15:25 -0700 Subject: [PATCH 4/5] use env --- cli/azd/pkg/environment/environment.go | 3 +++ .../provisioning/bicep/bicep_provider.go | 22 +++++-------------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/cli/azd/pkg/environment/environment.go b/cli/azd/pkg/environment/environment.go index b3b4218d1c7..793a69c6ce6 100644 --- a/cli/azd/pkg/environment/environment.go +++ b/cli/azd/pkg/environment/environment.go @@ -46,6 +46,9 @@ const ResourceGroupEnvVarName = "AZURE_RESOURCE_GROUP" // PlatformTypeEnvVarName is the name of the key used to store the current azd platform type const PlatformTypeEnvVarName = "AZD_PLATFORM_TYPE" +// DisablePreflightName is used to allow users to skip the preflight validation check +const DisablePreflightName = "AZURE_PROVISION_SKIP_VALIDATE" + // The zero value of an Environment is not valid. Use [New] to create one. When writing tests, // [Ephemeral] and [EphemeralWithValues] are useful to create environments which are not persisted to disk. type Environment struct { diff --git a/cli/azd/pkg/infra/provisioning/bicep/bicep_provider.go b/cli/azd/pkg/infra/provisioning/bicep/bicep_provider.go index 2cae3657769..f875385a73c 100644 --- a/cli/azd/pkg/infra/provisioning/bicep/bicep_provider.go +++ b/cli/azd/pkg/infra/provisioning/bicep/bicep_provider.go @@ -78,7 +78,6 @@ type BicepProvider struct { portalUrlBase string subscriptionManager *account.SubscriptionsManager azureClient *azapi.AzureClient - userConfigManager config.UserConfigManager } // Name gets the name of the infra provider @@ -613,14 +612,7 @@ func (p *BicepProvider) Deploy(ctx context.Context) (*provisioning.DeployResult, return nil, err } - userConfig, err := p.userConfigManager.Load() - if err != nil { - return nil, fmt.Errorf("loading user configuration: %w", err) - } - - preflightDisableVar := "provision.disableValidation" - preflightDisable, exists := userConfig.GetString(preflightDisableVar) - if !(preflightDisable == "on" && exists) { + if strings.ToLower(p.env.Getenv(environment.DisablePreflightName)) != "true" { err = p.validatePreflight( ctx, bicepDeploymentData.Target, @@ -632,14 +624,14 @@ func (p *BicepProvider) Deploy(ctx context.Context) (*provisioning.DeployResult, if err != nil { return nil, &internal.ErrorWithSuggestion{ Err: err, - Suggestion: fmt.Sprintf("To disable provision validation, please run %s.", - output.WithHighLightFormat("`azd config set %s on`", preflightDisableVar)), + Suggestion: fmt.Sprintf("To skip provision validation, please run %s.", + output.WithHighLightFormat("`azd env set %s true`", environment.DisablePreflightName)), } } } else { - warningMessage := fmt.Sprintf("WARNING: Provision validation is disabled. "+ - "To enable it, please run `azd config set %s off`.\n", - preflightDisableVar) + warningMessage := fmt.Sprintf("WARNING: Provision validation is skipped. "+ + "To enable it, please run `azd env set %s false` or remove %s from your .env file.\n", + environment.DisablePreflightName, environment.DisablePreflightName) p.console.Message(ctx, output.WithWarningFormat(warningMessage)) } @@ -2184,7 +2176,6 @@ func NewBicepProvider( cloud *cloud.Cloud, subscriptionManager *account.SubscriptionsManager, azureClient *azapi.AzureClient, - userConfigManager config.UserConfigManager, ) provisioning.Provider { return &BicepProvider{ envManager: envManager, @@ -2200,6 +2191,5 @@ func NewBicepProvider( portalUrlBase: cloud.PortalUrlBase, subscriptionManager: subscriptionManager, azureClient: azureClient, - userConfigManager: userConfigManager, } } From 5bab70d645eb286147b039b3a00551566749db63 Mon Sep 17 00:00:00 2001 From: hemarina Date: Thu, 27 Mar 2025 17:17:36 -0700 Subject: [PATCH 5/5] clean --- cli/azd/pkg/infra/provisioning/bicep/bicep_provider_test.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/cli/azd/pkg/infra/provisioning/bicep/bicep_provider_test.go b/cli/azd/pkg/infra/provisioning/bicep/bicep_provider_test.go index 2fbd37bb850..e47f27cea24 100644 --- a/cli/azd/pkg/infra/provisioning/bicep/bicep_provider_test.go +++ b/cli/azd/pkg/infra/provisioning/bicep/bicep_provider_test.go @@ -26,7 +26,6 @@ import ( "github.com/azure/azure-dev/cli/azd/pkg/azapi" "github.com/azure/azure-dev/cli/azd/pkg/azure" "github.com/azure/azure-dev/cli/azd/pkg/cloud" - "github.com/azure/azure-dev/cli/azd/pkg/config" "github.com/azure/azure-dev/cli/azd/pkg/environment" "github.com/azure/azure-dev/cli/azd/pkg/exec" "github.com/azure/azure-dev/cli/azd/pkg/infra" @@ -381,7 +380,6 @@ func createBicepProvider(t *testing.T, mockContext *mocks.MockContext) *BicepPro }, }, } - userConfigManager := config.NewUserConfigManager(mockContext.ConfigManager) provider := NewBicepProvider( azCli, @@ -405,7 +403,6 @@ func createBicepProvider(t *testing.T, mockContext *mocks.MockContext) *BicepPro cloud.AzurePublic(), nil, nil, - userConfigManager, ) err = provider.Initialize(*mockContext.Context, projectDir, options) @@ -994,7 +991,6 @@ func TestUserDefinedTypes(t *testing.T) { cloud.AzurePublic(), nil, nil, - nil, ) bicepProvider, gooCast := provider.(*BicepProvider) require.True(t, gooCast)