github.com/mmcquillan/packer@v1.1.1-0.20171009221028-c85cf0483a5d/builder/azure/arm/step_validate_template.go (about)

     1  package arm
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/hashicorp/packer/builder/azure/common/constants"
     7  	"github.com/hashicorp/packer/packer"
     8  	"github.com/mitchellh/multistep"
     9  )
    10  
    11  type StepValidateTemplate struct {
    12  	client   *AzureClient
    13  	validate func(resourceGroupName string, deploymentName string) error
    14  	say      func(message string)
    15  	error    func(e error)
    16  	config   *Config
    17  	factory  templateFactoryFunc
    18  }
    19  
    20  func NewStepValidateTemplate(client *AzureClient, ui packer.Ui, config *Config, factory templateFactoryFunc) *StepValidateTemplate {
    21  	var step = &StepValidateTemplate{
    22  		client:  client,
    23  		say:     func(message string) { ui.Say(message) },
    24  		error:   func(e error) { ui.Error(e.Error()) },
    25  		config:  config,
    26  		factory: factory,
    27  	}
    28  
    29  	step.validate = step.validateTemplate
    30  	return step
    31  }
    32  
    33  func (s *StepValidateTemplate) validateTemplate(resourceGroupName string, deploymentName string) error {
    34  	deployment, err := s.factory(s.config)
    35  	if err != nil {
    36  		return err
    37  	}
    38  
    39  	_, err = s.client.Validate(resourceGroupName, deploymentName, *deployment)
    40  	if err != nil {
    41  		s.say(s.client.LastError.Error())
    42  	}
    43  	return err
    44  }
    45  
    46  func (s *StepValidateTemplate) Run(state multistep.StateBag) multistep.StepAction {
    47  	s.say("Validating deployment template ...")
    48  
    49  	var resourceGroupName = state.Get(constants.ArmResourceGroupName).(string)
    50  	var deploymentName = state.Get(constants.ArmDeploymentName).(string)
    51  
    52  	s.say(fmt.Sprintf(" -> ResourceGroupName : '%s'", resourceGroupName))
    53  	s.say(fmt.Sprintf(" -> DeploymentName    : '%s'", deploymentName))
    54  
    55  	err := s.validate(resourceGroupName, deploymentName)
    56  	return processStepResult(err, s.error, state)
    57  }
    58  
    59  func (*StepValidateTemplate) Cleanup(multistep.StateBag) {
    60  }