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) {}