github.com/mmcquillan/packer@v1.1.1-0.20171009221028-c85cf0483a5d/builder/alicloud/ecs/step_check_source_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 stepCheckAlicloudSourceImage struct {
    13  	SourceECSImageId string
    14  }
    15  
    16  func (s *stepCheckAlicloudSourceImage) Run(state multistep.StateBag) multistep.StepAction {
    17  	client := state.Get("client").(*ecs.Client)
    18  	config := state.Get("config").(Config)
    19  	ui := state.Get("ui").(packer.Ui)
    20  	images, _, err := client.DescribeImages(&ecs.DescribeImagesArgs{RegionId: common.Region(config.AlicloudRegion),
    21  		ImageId: config.AlicloudSourceImage})
    22  	if err != nil {
    23  		err := fmt.Errorf("Error querying alicloud image: %s", err)
    24  		state.Put("error", err)
    25  		ui.Error(err.Error())
    26  		return multistep.ActionHalt
    27  	}
    28  
    29  	if len(images) == 0 {
    30  		err := fmt.Errorf("No alicloud image was found matching filters: %v", config.AlicloudSourceImage)
    31  		state.Put("error", err)
    32  		ui.Error(err.Error())
    33  		return multistep.ActionHalt
    34  	}
    35  
    36  	ui.Message(fmt.Sprintf("Found image ID: %s", images[0].ImageId))
    37  
    38  	state.Put("source_image", &images[0])
    39  	return multistep.ActionContinue
    40  }
    41  
    42  func (s *stepCheckAlicloudSourceImage) Cleanup(multistep.StateBag) {}