github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/provider/azure/deployments.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package azure 5 6 import ( 7 "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" 8 "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources" 9 "github.com/juju/errors" 10 11 "github.com/juju/juju/environs/context" 12 "github.com/juju/juju/provider/azure/internal/armtemplates" 13 "github.com/juju/juju/provider/azure/internal/errorutils" 14 ) 15 16 func (env *azureEnviron) createDeployment( 17 ctx context.ProviderCallContext, 18 resourceGroup string, 19 deploymentName string, 20 t armtemplates.Template, 21 ) error { 22 deploy, err := env.deployClient() 23 if err != nil { 24 return errors.Trace(err) 25 } 26 templateMap, err := t.Map() 27 if err != nil { 28 return errors.Trace(err) 29 } 30 deployment := armresources.Deployment{ 31 Properties: &armresources.DeploymentProperties{ 32 Template: &templateMap, 33 Mode: to.Ptr(armresources.DeploymentModeIncremental), 34 }, 35 } 36 poller, err := deploy.BeginCreateOrUpdate( 37 ctx, 38 resourceGroup, 39 deploymentName, 40 deployment, 41 nil, 42 ) 43 // We only want to wait for deployments which are not shared 44 // resources, otherwise add model operations will be held up. 45 var result armresources.DeploymentsClientCreateOrUpdateResponse 46 if err == nil && deploymentName != commonDeployment { 47 result, err = poller.PollUntilDone(ctx, nil) 48 if err == nil && result.Properties != nil && result.Properties.Error != nil { 49 err = errors.New(toValue(result.Properties.Error.Message)) 50 } 51 } 52 return errorutils.HandleCredentialError(errors.Annotatef(err, "creating Azure deployment %q", deploymentName), ctx) 53 }