github.com/kikitux/packer@v0.10.1-0.20160322154024-6237df566f9f/builder/azure/arm/step_capture_image.go (about)

     1  // Copyright (c) Microsoft Corporation. All rights reserved.
     2  // Licensed under the MIT License. See the LICENSE file in builder/azure for license information.
     3  
     4  package arm
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/Azure/azure-sdk-for-go/arm/compute"
    10  	"github.com/mitchellh/multistep"
    11  	"github.com/mitchellh/packer/builder/azure/common/constants"
    12  	"github.com/mitchellh/packer/packer"
    13  )
    14  
    15  type StepCaptureImage struct {
    16  	client  *AzureClient
    17  	capture func(resourceGroupName string, computeName string, parameters *compute.VirtualMachineCaptureParameters) error
    18  	say     func(message string)
    19  	error   func(e error)
    20  }
    21  
    22  func NewStepCaptureImage(client *AzureClient, ui packer.Ui) *StepCaptureImage {
    23  	var step = &StepCaptureImage{
    24  		client: client,
    25  		say:    func(message string) { ui.Say(message) },
    26  		error:  func(e error) { ui.Error(e.Error()) },
    27  	}
    28  
    29  	step.capture = step.captureImage
    30  	return step
    31  }
    32  
    33  func (s *StepCaptureImage) captureImage(resourceGroupName string, computeName string, parameters *compute.VirtualMachineCaptureParameters) error {
    34  	generalizeResponse, err := s.client.Generalize(resourceGroupName, computeName)
    35  	if err != nil {
    36  		return err
    37  	}
    38  
    39  	s.client.VirtualMachinesClient.PollAsNeeded(generalizeResponse.Response)
    40  
    41  	captureResponse, err := s.client.Capture(resourceGroupName, computeName, *parameters)
    42  	if err != nil {
    43  		return err
    44  	}
    45  
    46  	s.client.VirtualMachinesClient.PollAsNeeded(captureResponse.Response.Response)
    47  	return nil
    48  }
    49  
    50  func (s *StepCaptureImage) Run(state multistep.StateBag) multistep.StepAction {
    51  	s.say("Capturing image ...")
    52  
    53  	var computeName = state.Get(constants.ArmComputeName).(string)
    54  	var resourceGroupName = state.Get(constants.ArmResourceGroupName).(string)
    55  	var parameters = state.Get(constants.ArmVirtualMachineCaptureParameters).(*compute.VirtualMachineCaptureParameters)
    56  
    57  	s.say(fmt.Sprintf(" -> ResourceGroupName : '%s'", resourceGroupName))
    58  	s.say(fmt.Sprintf(" -> ComputeName       : '%s'", computeName))
    59  
    60  	err := s.capture(resourceGroupName, computeName, parameters)
    61  	if err != nil {
    62  		state.Put(constants.Error, err)
    63  		s.error(err)
    64  
    65  		return multistep.ActionHalt
    66  	}
    67  
    68  	return multistep.ActionContinue
    69  }
    70  
    71  func (*StepCaptureImage) Cleanup(multistep.StateBag) {
    72  }