github.com/mmcquillan/packer@v1.1.1-0.20171009221028-c85cf0483a5d/builder/alicloud/ecs/step_share_image.go (about) 1 package ecs 2 3 import ( 4 "fmt" 5 6 "github.com/denverdino/aliyungo/common" 7 "github.com/denverdino/aliyungo/ecs" 8 "github.com/hashicorp/packer/packer" 9 "github.com/mitchellh/multistep" 10 ) 11 12 type setpShareAlicloudImage struct { 13 AlicloudImageShareAccounts []string 14 AlicloudImageUNShareAccounts []string 15 RegionId string 16 } 17 18 func (s *setpShareAlicloudImage) Run(state multistep.StateBag) multistep.StepAction { 19 client := state.Get("client").(*ecs.Client) 20 ui := state.Get("ui").(packer.Ui) 21 alicloudImages := state.Get("alicloudimages").(map[string]string) 22 for copyedRegion, copyedImageId := range alicloudImages { 23 err := client.ModifyImageSharePermission( 24 &ecs.ModifyImageSharePermissionArgs{ 25 RegionId: common.Region(copyedRegion), 26 ImageId: copyedImageId, 27 AddAccount: s.AlicloudImageShareAccounts, 28 RemoveAccount: s.AlicloudImageUNShareAccounts, 29 }) 30 if err != nil { 31 state.Put("error", err) 32 ui.Say(fmt.Sprintf("Failed modifying image share permissions: %s", err)) 33 return multistep.ActionHalt 34 } 35 } 36 return multistep.ActionContinue 37 } 38 39 func (s *setpShareAlicloudImage) Cleanup(state multistep.StateBag) { 40 _, cancelled := state.GetOk(multistep.StateCancelled) 41 _, halted := state.GetOk(multistep.StateHalted) 42 if cancelled || halted { 43 ui := state.Get("ui").(packer.Ui) 44 client := state.Get("client").(*ecs.Client) 45 alicloudImages := state.Get("alicloudimages").(map[string]string) 46 ui.Say("Restoring image share permission because cancellations or error...") 47 for copyedRegion, copyedImageId := range alicloudImages { 48 err := client.ModifyImageSharePermission( 49 &ecs.ModifyImageSharePermissionArgs{ 50 RegionId: common.Region(copyedRegion), 51 ImageId: copyedImageId, 52 AddAccount: s.AlicloudImageUNShareAccounts, 53 RemoveAccount: s.AlicloudImageShareAccounts, 54 }) 55 if err != nil { 56 ui.Say(fmt.Sprintf("Restoring image share permission failed: %s", err)) 57 } 58 } 59 } 60 }