github.phpd.cn/hashicorp/packer@v1.3.2/builder/azure/arm/step_get_os_disk.go (about) 1 package arm 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute" 8 9 "github.com/hashicorp/packer/builder/azure/common/constants" 10 11 "github.com/hashicorp/packer/helper/multistep" 12 "github.com/hashicorp/packer/packer" 13 ) 14 15 type StepGetOSDisk struct { 16 client *AzureClient 17 query func(ctx context.Context, resourceGroupName string, computeName string) (compute.VirtualMachine, error) 18 say func(message string) 19 error func(e error) 20 } 21 22 func NewStepGetOSDisk(client *AzureClient, ui packer.Ui) *StepGetOSDisk { 23 var step = &StepGetOSDisk{ 24 client: client, 25 say: func(message string) { ui.Say(message) }, 26 error: func(e error) { ui.Error(e.Error()) }, 27 } 28 29 step.query = step.queryCompute 30 return step 31 } 32 33 func (s *StepGetOSDisk) queryCompute(ctx context.Context, resourceGroupName string, computeName string) (compute.VirtualMachine, error) { 34 vm, err := s.client.VirtualMachinesClient.Get(ctx, resourceGroupName, computeName, "") 35 if err != nil { 36 s.say(s.client.LastError.Error()) 37 } 38 return vm, err 39 } 40 41 func (s *StepGetOSDisk) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction { 42 s.say("Querying the machine's properties ...") 43 44 var resourceGroupName = state.Get(constants.ArmResourceGroupName).(string) 45 var computeName = state.Get(constants.ArmComputeName).(string) 46 47 s.say(fmt.Sprintf(" -> ResourceGroupName : '%s'", resourceGroupName)) 48 s.say(fmt.Sprintf(" -> ComputeName : '%s'", computeName)) 49 50 vm, err := s.query(ctx, resourceGroupName, computeName) 51 if err != nil { 52 state.Put(constants.Error, err) 53 s.error(err) 54 55 return multistep.ActionHalt 56 } 57 58 var vhdUri string 59 if vm.StorageProfile.OsDisk.Vhd != nil { 60 vhdUri = *vm.StorageProfile.OsDisk.Vhd.URI 61 s.say(fmt.Sprintf(" -> OS Disk : '%s'", vhdUri)) 62 } else { 63 vhdUri = *vm.StorageProfile.OsDisk.ManagedDisk.ID 64 s.say(fmt.Sprintf(" -> Managed OS Disk : '%s'", vhdUri)) 65 } 66 67 state.Put(constants.ArmOSDiskVhd, vhdUri) 68 return multistep.ActionContinue 69 } 70 71 func (*StepGetOSDisk) Cleanup(multistep.StateBag) { 72 }