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  }