mirror of
https://github.com/hashicorp/packer.git
synced 2026-02-28 20:41:21 -05:00
This commit moves the Amazon builders of Packer away from the Hashicorp fork of the goamz library to the official AWS SDK for Go, in order that third party plugins may depend on the more complete official library more easily.
58 lines
1.7 KiB
Go
58 lines
1.7 KiB
Go
package chroot
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/awslabs/aws-sdk-go/service/ec2"
|
|
"github.com/mitchellh/multistep"
|
|
"github.com/mitchellh/packer/builder/amazon/common"
|
|
"github.com/mitchellh/packer/packer"
|
|
)
|
|
|
|
// StepInstanceInfo verifies that this builder is running on an EC2 instance.
|
|
type StepInstanceInfo struct{}
|
|
|
|
func (s *StepInstanceInfo) Run(state multistep.StateBag) multistep.StepAction {
|
|
ec2conn := state.Get("ec2").(*ec2.EC2)
|
|
ui := state.Get("ui").(packer.Ui)
|
|
|
|
// Get our own instance ID
|
|
ui.Say("Gathering information about this EC2 instance...")
|
|
instanceIdBytes, err := common.GetInstanceMetaData("instance-id")
|
|
if err != nil {
|
|
log.Printf("Error: %s", err)
|
|
err := fmt.Errorf(
|
|
"Error retrieving the ID of the instance Packer is running on.\n" +
|
|
"Please verify Packer is running on a proper AWS EC2 instance.")
|
|
state.Put("error", err)
|
|
ui.Error(err.Error())
|
|
return multistep.ActionHalt
|
|
}
|
|
|
|
instanceId := string(instanceIdBytes)
|
|
log.Printf("Instance ID: %s", instanceId)
|
|
|
|
// Query the entire instance metadata
|
|
instancesResp, err := ec2conn.DescribeInstances(&ec2.DescribeInstancesInput{InstanceIDs: []*string{&instanceId}})
|
|
if err != nil {
|
|
err := fmt.Errorf("Error getting instance data: %s", err)
|
|
state.Put("error", err)
|
|
ui.Error(err.Error())
|
|
return multistep.ActionHalt
|
|
}
|
|
|
|
if len(instancesResp.Reservations) == 0 {
|
|
err := fmt.Errorf("Error getting instance data: no instance found.")
|
|
state.Put("error", err)
|
|
ui.Error(err.Error())
|
|
return multistep.ActionHalt
|
|
}
|
|
|
|
instance := &instancesResp.Reservations[0].Instances[0]
|
|
state.Put("instance", instance)
|
|
|
|
return multistep.ActionContinue
|
|
}
|
|
|
|
func (s *StepInstanceInfo) Cleanup(multistep.StateBag) {}
|