pkg/armhelpers/deployments.go (57 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
package armhelpers
import (
"context"
"fmt"
resources "github.com/Azure/azure-sdk-for-go/profile/p20200901/resourcemanager/resources/armresources"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
log "github.com/sirupsen/logrus"
)
// DeployTemplate implements the TemplateDeployer interface for the AzureClient client
func (az *AzureClient) DeployTemplate(ctx context.Context, resourceGroupName, deploymentName string, template map[string]interface{}, parameters map[string]interface{}) (resources.DeploymentExtended, error) {
ctx = policy.WithHTTPHeader(ctx, az.acceptLanguageHeader)
mode := resources.DeploymentModeIncremental
deployment := resources.Deployment{
Properties: &resources.DeploymentProperties{
Template: &template,
Parameters: ¶meters,
Mode: &mode,
},
}
log.Infof("Starting ARM Deployment %s in resource group %s. This will take some time...", deploymentName, resourceGroupName)
poller, err := az.deploymentsClient.BeginCreateOrUpdate(ctx, resourceGroupName, deploymentName, deployment, nil)
if err != nil {
return resources.DeploymentExtended{}, err
}
outcomeText := "Succeeded"
de, err := poller.PollUntilDone(ctx, nil)
if err != nil {
outcomeText = fmt.Sprintf("Error: %v", err)
log.Infof("Finished ARM Deployment (%s). %s", deploymentName, outcomeText)
return de.DeploymentExtended, err
}
log.Infof("Finished ARM Deployment (%s). %s", deploymentName, outcomeText)
return de.DeploymentExtended, err
}
// ValidateTemplate validate the template and parameters
func (az *AzureClient) ValidateTemplate(ctx context.Context, resourceGroupName, deploymentName string, template map[string]interface{}, parameters map[string]interface{}) (*resources.DeploymentsClientValidateResponse, error) {
ctx = policy.WithHTTPHeader(ctx, az.acceptLanguageHeader)
mode := resources.DeploymentModeIncremental
deployment := resources.Deployment{
Properties: &resources.DeploymentProperties{
Template: &template,
Parameters: ¶meters,
Mode: &mode,
},
}
poller, err := az.deploymentsClient.BeginValidate(ctx, resourceGroupName, deploymentName, deployment, nil)
if err != nil {
return nil, err
}
response, err := poller.PollUntilDone(ctx, nil)
if err != nil {
return nil, err
}
return &response, err
}
// GetDeployment returns the template deployment
func (az *AzureClient) GetDeployment(ctx context.Context, resourceGroupName, deploymentName string) (resources.DeploymentsClientGetResponse, error) {
ctx = policy.WithHTTPHeader(ctx, az.acceptLanguageHeader)
return az.deploymentsClient.Get(ctx, resourceGroupName, deploymentName, nil)
}