fix various bugs deregistering AMIs
always deregister ami in session region validate that session region does not appear in ami_regions
This commit is contained in:
parent
6c4fbe8d87
commit
c65fa8490d
|
@ -121,7 +121,8 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) {
|
||||||
var warns []string
|
var warns []string
|
||||||
|
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.AccessConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.AccessConfig.Prepare(&b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.AMIConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs,
|
||||||
|
b.config.AMIConfig.Prepare(&b.config.AccessConfig, &b.config.ctx)...)
|
||||||
|
|
||||||
for _, mounts := range b.config.ChrootMounts {
|
for _, mounts := range b.config.ChrootMounts {
|
||||||
if len(mounts) != 3 {
|
if len(mounts) != 3 {
|
||||||
|
|
|
@ -32,7 +32,7 @@ func (c *AccessConfig) Session() (*session.Session, error) {
|
||||||
return c.session, nil
|
return c.session, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
region, err := c.Region()
|
region, err := c.region()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ func (c *AccessConfig) Session() (*session.Session, error) {
|
||||||
|
|
||||||
// Region returns the aws.Region object for access to AWS services, requesting
|
// Region returns the aws.Region object for access to AWS services, requesting
|
||||||
// the region from the instance metadata if possible.
|
// the region from the instance metadata if possible.
|
||||||
func (c *AccessConfig) Region() (string, error) {
|
func (c *AccessConfig) region() (string, error) {
|
||||||
if c.RawRegion != "" {
|
if c.RawRegion != "" {
|
||||||
if !c.SkipValidation {
|
if !c.SkipValidation {
|
||||||
if valid := ValidateRegion(c.RawRegion); !valid {
|
if valid := ValidateRegion(c.RawRegion); !valid {
|
||||||
|
|
|
@ -38,12 +38,23 @@ func stringInSlice(s []string, searchstr string) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *AMIConfig) Prepare(ctx *interpolate.Context) []error {
|
func (c *AMIConfig) Prepare(accessConfig *AccessConfig, ctx *interpolate.Context) []error {
|
||||||
var errs []error
|
var errs []error
|
||||||
|
|
||||||
|
session, err := accessConfig.Session()
|
||||||
|
if err != nil {
|
||||||
|
errs = append(errs, err)
|
||||||
|
}
|
||||||
|
region := *session.Config.Region
|
||||||
|
|
||||||
if c.AMIName == "" {
|
if c.AMIName == "" {
|
||||||
errs = append(errs, fmt.Errorf("ami_name must be specified"))
|
errs = append(errs, fmt.Errorf("ami_name must be specified"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if stringInSlice(c.AMIRegions, region) {
|
||||||
|
errs = append(errs, fmt.Errorf("Cannot copy AMI to AWS session region '%s', please remove it from `ami_regions`.", region))
|
||||||
|
}
|
||||||
|
|
||||||
if len(c.AMIRegions) > 0 {
|
if len(c.AMIRegions) > 0 {
|
||||||
regionSet := make(map[string]struct{})
|
regionSet := make(map[string]struct{})
|
||||||
regions := make([]string, 0, len(c.AMIRegions))
|
regions := make([]string, 0, len(c.AMIRegions))
|
||||||
|
@ -61,7 +72,6 @@ func (c *AMIConfig) Prepare(ctx *interpolate.Context) []error {
|
||||||
// Verify the region is real
|
// Verify the region is real
|
||||||
if valid := ValidateRegion(region); !valid {
|
if valid := ValidateRegion(region); !valid {
|
||||||
errs = append(errs, fmt.Errorf("Unknown region: %s", region))
|
errs = append(errs, fmt.Errorf("Unknown region: %s", region))
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,10 +25,8 @@ func (s *StepDeregisterAMI) Run(state multistep.StateBag) multistep.StepAction {
|
||||||
|
|
||||||
ui := state.Get("ui").(packer.Ui)
|
ui := state.Get("ui").(packer.Ui)
|
||||||
ec2conn := state.Get("ec2").(*ec2.EC2)
|
ec2conn := state.Get("ec2").(*ec2.EC2)
|
||||||
regions := s.Regions
|
// Add the session region to list of regions will will deregister AMIs in
|
||||||
if len(regions) == 0 {
|
regions := append(s.Regions, *ec2conn.Config.Region)
|
||||||
regions = append(regions, *ec2conn.Config.Region)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, region := range regions {
|
for _, region := range regions {
|
||||||
// get new connection for each region in which we need to deregister vms
|
// get new connection for each region in which we need to deregister vms
|
||||||
|
|
|
@ -64,8 +64,9 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) {
|
||||||
// Accumulate any errors
|
// Accumulate any errors
|
||||||
var errs *packer.MultiError
|
var errs *packer.MultiError
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.AccessConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.AccessConfig.Prepare(&b.config.ctx)...)
|
||||||
|
errs = packer.MultiErrorAppend(errs,
|
||||||
|
b.config.AMIConfig.Prepare(&b.config.AccessConfig, &b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.BlockDevices.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.BlockDevices.Prepare(&b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.AMIConfig.Prepare(&b.config.ctx)...)
|
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.RunConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.RunConfig.Prepare(&b.config.ctx)...)
|
||||||
|
|
||||||
if errs != nil && len(errs.Errors) > 0 {
|
if errs != nil && len(errs.Errors) > 0 {
|
||||||
|
|
|
@ -64,7 +64,8 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) {
|
||||||
var errs *packer.MultiError
|
var errs *packer.MultiError
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.AccessConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.AccessConfig.Prepare(&b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.RunConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.RunConfig.Prepare(&b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.AMIConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs,
|
||||||
|
b.config.AMIConfig.Prepare(&b.config.AccessConfig, &b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.BlockDevices.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.BlockDevices.Prepare(&b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.RootDevice.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.RootDevice.Prepare(&b.config.ctx)...)
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,8 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) {
|
||||||
var errs *packer.MultiError
|
var errs *packer.MultiError
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.AccessConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.AccessConfig.Prepare(&b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.BlockDevices.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.BlockDevices.Prepare(&b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.AMIConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs,
|
||||||
|
b.config.AMIConfig.Prepare(&b.config.AccessConfig, &b.config.ctx)...)
|
||||||
errs = packer.MultiErrorAppend(errs, b.config.RunConfig.Prepare(&b.config.ctx)...)
|
errs = packer.MultiErrorAppend(errs, b.config.RunConfig.Prepare(&b.config.ctx)...)
|
||||||
|
|
||||||
if b.config.AccountId == "" {
|
if b.config.AccountId == "" {
|
||||||
|
|
|
@ -29,17 +29,10 @@ func (s *StepUploadBundle) Run(state multistep.StateBag) multistep.StepAction {
|
||||||
manifestPath := state.Get("manifest_path").(string)
|
manifestPath := state.Get("manifest_path").(string)
|
||||||
ui := state.Get("ui").(packer.Ui)
|
ui := state.Get("ui").(packer.Ui)
|
||||||
|
|
||||||
region, err := config.Region()
|
|
||||||
if err != nil {
|
|
||||||
err := fmt.Errorf("Error retrieving region: %s", err)
|
|
||||||
state.Put("error", err)
|
|
||||||
ui.Error(err.Error())
|
|
||||||
return multistep.ActionHalt
|
|
||||||
}
|
|
||||||
|
|
||||||
accessKey := config.AccessKey
|
accessKey := config.AccessKey
|
||||||
secretKey := config.SecretKey
|
secretKey := config.SecretKey
|
||||||
session, err := config.AccessConfig.Session()
|
session, err := config.AccessConfig.Session()
|
||||||
|
region := *session.Config.Region
|
||||||
accessConfig := session.Config
|
accessConfig := session.Config
|
||||||
var token string
|
var token string
|
||||||
if err == nil && accessKey == "" && secretKey == "" {
|
if err == nil && accessKey == "" && secretKey == "" {
|
||||||
|
|
Loading…
Reference in New Issue