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  }