github.phpd.cn/hashicorp/packer@v1.3.2/builder/alicloud/ecs/step_check_source_image.go (about) 1 package ecs 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/denverdino/aliyungo/common" 8 "github.com/denverdino/aliyungo/ecs" 9 "github.com/hashicorp/packer/helper/multistep" 10 "github.com/hashicorp/packer/packer" 11 ) 12 13 type stepCheckAlicloudSourceImage struct { 14 SourceECSImageId string 15 } 16 17 func (s *stepCheckAlicloudSourceImage) Run(_ context.Context, state multistep.StateBag) multistep.StepAction { 18 client := state.Get("client").(*ecs.Client) 19 config := state.Get("config").(*Config) 20 ui := state.Get("ui").(packer.Ui) 21 args := &ecs.DescribeImagesArgs{ 22 RegionId: common.Region(config.AlicloudRegion), 23 ImageId: config.AlicloudSourceImage, 24 } 25 args.PageSize = 50 26 images, _, err := client.DescribeImages(args) 27 if err != nil { 28 err := fmt.Errorf("Error querying alicloud image: %s", err) 29 state.Put("error", err) 30 ui.Error(err.Error()) 31 return multistep.ActionHalt 32 } 33 34 // Describe markerplace image 35 args.ImageOwnerAlias = ecs.ImageOwnerMarketplace 36 imageMarkets, _, err := client.DescribeImages(args) 37 if err != nil { 38 err := fmt.Errorf("Error querying alicloud marketplace image: %s", err) 39 state.Put("error", err) 40 ui.Error(err.Error()) 41 return multistep.ActionHalt 42 } 43 if len(imageMarkets) > 0 { 44 images = append(images, imageMarkets...) 45 } 46 47 if len(images) == 0 { 48 err := fmt.Errorf("No alicloud image was found matching filters: %v", config.AlicloudSourceImage) 49 state.Put("error", err) 50 ui.Error(err.Error()) 51 return multistep.ActionHalt 52 } 53 54 ui.Message(fmt.Sprintf("Found image ID: %s", images[0].ImageId)) 55 56 state.Put("source_image", &images[0]) 57 return multistep.ActionContinue 58 } 59 60 func (s *stepCheckAlicloudSourceImage) Cleanup(multistep.StateBag) {}