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 }