Merge pull request #6088 from adongy/master
Expose more source ami data in the template
This commit is contained in:
commit
22608f3efd
|
@ -1,6 +1,36 @@
|
||||||
package common
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
|
"github.com/hashicorp/packer/helper/multistep"
|
||||||
|
)
|
||||||
|
|
||||||
type BuildInfoTemplate struct {
|
type BuildInfoTemplate struct {
|
||||||
SourceAMI string
|
|
||||||
BuildRegion string
|
BuildRegion string
|
||||||
|
SourceAMI string
|
||||||
|
SourceAMIName string
|
||||||
|
SourceAMITags map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
|
func extractBuildInfo(region string, state multistep.StateBag) *BuildInfoTemplate {
|
||||||
|
rawSourceAMI, hasSourceAMI := state.GetOk("source_image")
|
||||||
|
if !hasSourceAMI {
|
||||||
|
return &BuildInfoTemplate{
|
||||||
|
BuildRegion: region,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceAMI := rawSourceAMI.(*ec2.Image)
|
||||||
|
sourceAMITags := make(map[string]string, len(sourceAMI.Tags))
|
||||||
|
for _, tag := range sourceAMI.Tags {
|
||||||
|
sourceAMITags[aws.StringValue(tag.Key)] = aws.StringValue(tag.Value)
|
||||||
|
}
|
||||||
|
|
||||||
|
return &BuildInfoTemplate{
|
||||||
|
BuildRegion: region,
|
||||||
|
SourceAMI: aws.StringValue(sourceAMI.ImageId),
|
||||||
|
SourceAMIName: aws.StringValue(sourceAMI.Name),
|
||||||
|
SourceAMITags: sourceAMITags,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
|
"github.com/hashicorp/packer/helper/multistep"
|
||||||
|
)
|
||||||
|
|
||||||
|
func testImage() *ec2.Image {
|
||||||
|
return &ec2.Image{
|
||||||
|
ImageId: aws.String("ami-abcd1234"),
|
||||||
|
Name: aws.String("ami_test_name"),
|
||||||
|
Tags: []*ec2.Tag{
|
||||||
|
{
|
||||||
|
Key: aws.String("key-1"),
|
||||||
|
Value: aws.String("value-1"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: aws.String("key-2"),
|
||||||
|
Value: aws.String("value-2"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func testState() multistep.StateBag {
|
||||||
|
state := new(multistep.BasicStateBag)
|
||||||
|
return state
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestInterpolateBuildInfo_extractBuildInfo_noSourceImage(t *testing.T) {
|
||||||
|
state := testState()
|
||||||
|
buildInfo := extractBuildInfo("foo", state)
|
||||||
|
|
||||||
|
expected := BuildInfoTemplate{
|
||||||
|
BuildRegion: "foo",
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(*buildInfo, expected) {
|
||||||
|
t.Fatalf("Unexpected BuildInfoTemplate: expected %#v got %#v\n", expected, *buildInfo)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestInterpolateBuildInfo_extractBuildInfo_withSourceImage(t *testing.T) {
|
||||||
|
state := testState()
|
||||||
|
state.Put("source_image", testImage())
|
||||||
|
buildInfo := extractBuildInfo("foo", state)
|
||||||
|
|
||||||
|
expected := BuildInfoTemplate{
|
||||||
|
BuildRegion: "foo",
|
||||||
|
SourceAMI: "ami-abcd1234",
|
||||||
|
SourceAMIName: "ami_test_name",
|
||||||
|
SourceAMITags: map[string]string{
|
||||||
|
"key-1": "value-1",
|
||||||
|
"key-2": "value-2",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(*buildInfo, expected) {
|
||||||
|
t.Fatalf("Unexpected BuildInfoTemplate: expected %#v got %#v\n", expected, *buildInfo)
|
||||||
|
}
|
||||||
|
}
|
|
@ -26,13 +26,6 @@ func (s *StepCreateTags) Run(_ context.Context, state multistep.StateBag) multis
|
||||||
ui := state.Get("ui").(packer.Ui)
|
ui := state.Get("ui").(packer.Ui)
|
||||||
amis := state.Get("amis").(map[string]string)
|
amis := state.Get("amis").(map[string]string)
|
||||||
|
|
||||||
var sourceAMI string
|
|
||||||
if rawSourceAMI, hasSourceAMI := state.GetOk("source_image"); hasSourceAMI {
|
|
||||||
sourceAMI = *rawSourceAMI.(*ec2.Image).ImageId
|
|
||||||
} else {
|
|
||||||
sourceAMI = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
if !s.Tags.IsSet() && !s.SnapshotTags.IsSet() {
|
if !s.Tags.IsSet() && !s.SnapshotTags.IsSet() {
|
||||||
return multistep.ActionContinue
|
return multistep.ActionContinue
|
||||||
}
|
}
|
||||||
|
@ -79,7 +72,7 @@ func (s *StepCreateTags) Run(_ context.Context, state multistep.StateBag) multis
|
||||||
|
|
||||||
// Convert tags to ec2.Tag format
|
// Convert tags to ec2.Tag format
|
||||||
ui.Say("Creating AMI tags")
|
ui.Say("Creating AMI tags")
|
||||||
amiTags, err := s.Tags.EC2Tags(s.Ctx, *ec2conn.Config.Region, sourceAMI)
|
amiTags, err := s.Tags.EC2Tags(s.Ctx, *ec2conn.Config.Region, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
ui.Error(err.Error())
|
ui.Error(err.Error())
|
||||||
|
@ -88,7 +81,7 @@ func (s *StepCreateTags) Run(_ context.Context, state multistep.StateBag) multis
|
||||||
amiTags.Report(ui)
|
amiTags.Report(ui)
|
||||||
|
|
||||||
ui.Say("Creating snapshot tags")
|
ui.Say("Creating snapshot tags")
|
||||||
snapshotTags, err := s.SnapshotTags.EC2Tags(s.Ctx, *ec2conn.Config.Region, sourceAMI)
|
snapshotTags, err := s.SnapshotTags.EC2Tags(s.Ctx, *ec2conn.Config.Region, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
ui.Error(err.Error())
|
ui.Error(err.Error())
|
||||||
|
|
|
@ -27,13 +27,6 @@ func (s *StepModifyAMIAttributes) Run(_ context.Context, state multistep.StateBa
|
||||||
session := state.Get("awsSession").(*session.Session)
|
session := state.Get("awsSession").(*session.Session)
|
||||||
ui := state.Get("ui").(packer.Ui)
|
ui := state.Get("ui").(packer.Ui)
|
||||||
amis := state.Get("amis").(map[string]string)
|
amis := state.Get("amis").(map[string]string)
|
||||||
|
|
||||||
var sourceAMI string
|
|
||||||
if rawSourceAMI, hasSourceAMI := state.GetOk("source_image"); hasSourceAMI {
|
|
||||||
sourceAMI = *rawSourceAMI.(*ec2.Image).ImageId
|
|
||||||
} else {
|
|
||||||
sourceAMI = ""
|
|
||||||
}
|
|
||||||
snapshots := state.Get("snapshots").(map[string][]string)
|
snapshots := state.Get("snapshots").(map[string][]string)
|
||||||
|
|
||||||
// Determine if there is any work to do.
|
// Determine if there is any work to do.
|
||||||
|
@ -50,10 +43,7 @@ func (s *StepModifyAMIAttributes) Run(_ context.Context, state multistep.StateBa
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
s.Ctx.Data = &BuildInfoTemplate{
|
s.Ctx.Data = extractBuildInfo(*ec2conn.Config.Region, state)
|
||||||
SourceAMI: sourceAMI,
|
|
||||||
BuildRegion: *ec2conn.Config.Region,
|
|
||||||
}
|
|
||||||
s.Description, err = interpolate.Render(s.Description, &s.Ctx)
|
s.Description, err = interpolate.Render(s.Description, &s.Ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = fmt.Errorf("Error interpolating AMI description: %s", err)
|
err = fmt.Errorf("Error interpolating AMI description: %s", err)
|
||||||
|
|
|
@ -88,7 +88,7 @@ func (s *StepRunSourceInstance) Run(_ context.Context, state multistep.StateBag)
|
||||||
s.Tags["Name"] = "Packer Builder"
|
s.Tags["Name"] = "Packer Builder"
|
||||||
}
|
}
|
||||||
|
|
||||||
ec2Tags, err := s.Tags.EC2Tags(s.Ctx, *ec2conn.Config.Region, s.SourceAMI)
|
ec2Tags, err := s.Tags.EC2Tags(s.Ctx, *ec2conn.Config.Region, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err := fmt.Errorf("Error tagging source instance: %s", err)
|
err := fmt.Errorf("Error tagging source instance: %s", err)
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
|
@ -96,7 +96,7 @@ func (s *StepRunSourceInstance) Run(_ context.Context, state multistep.StateBag)
|
||||||
return multistep.ActionHalt
|
return multistep.ActionHalt
|
||||||
}
|
}
|
||||||
|
|
||||||
volTags, err := s.VolumeTags.EC2Tags(s.Ctx, *ec2conn.Config.Region, s.SourceAMI)
|
volTags, err := s.VolumeTags.EC2Tags(s.Ctx, *ec2conn.Config.Region, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err := fmt.Errorf("Error tagging volumes: %s", err)
|
err := fmt.Errorf("Error tagging volumes: %s", err)
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
|
@ -259,7 +259,7 @@ func (s *StepRunSourceInstance) Run(_ context.Context, state multistep.StateBag)
|
||||||
if len(volumeIds) > 0 && s.VolumeTags.IsSet() {
|
if len(volumeIds) > 0 && s.VolumeTags.IsSet() {
|
||||||
ui.Say("Adding tags to source EBS Volumes")
|
ui.Say("Adding tags to source EBS Volumes")
|
||||||
|
|
||||||
volumeTags, err := s.VolumeTags.EC2Tags(s.Ctx, *ec2conn.Config.Region, s.SourceAMI)
|
volumeTags, err := s.VolumeTags.EC2Tags(s.Ctx, *ec2conn.Config.Region, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err := fmt.Errorf("Error tagging source EBS Volumes on %s: %s", *instance.InstanceId, err)
|
err := fmt.Errorf("Error tagging source EBS Volumes on %s: %s", *instance.InstanceId, err)
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
|
|
|
@ -143,7 +143,7 @@ func (s *StepRunSpotInstance) Run(_ context.Context, state multistep.StateBag) m
|
||||||
s.Tags["Name"] = "Packer Builder"
|
s.Tags["Name"] = "Packer Builder"
|
||||||
}
|
}
|
||||||
|
|
||||||
ec2Tags, err := s.Tags.EC2Tags(s.Ctx, *ec2conn.Config.Region, s.SourceAMI)
|
ec2Tags, err := s.Tags.EC2Tags(s.Ctx, *ec2conn.Config.Region, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err := fmt.Errorf("Error tagging source instance: %s", err)
|
err := fmt.Errorf("Error tagging source instance: %s", err)
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
|
@ -287,7 +287,7 @@ func (s *StepRunSpotInstance) Run(_ context.Context, state multistep.StateBag) m
|
||||||
if len(volumeIds) > 0 && s.VolumeTags.IsSet() {
|
if len(volumeIds) > 0 && s.VolumeTags.IsSet() {
|
||||||
ui.Say("Adding tags to source EBS Volumes")
|
ui.Say("Adding tags to source EBS Volumes")
|
||||||
|
|
||||||
volumeTags, err := s.VolumeTags.EC2Tags(s.Ctx, *ec2conn.Config.Region, s.SourceAMI)
|
volumeTags, err := s.VolumeTags.EC2Tags(s.Ctx, *ec2conn.Config.Region, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err := fmt.Errorf("Error tagging source EBS Volumes on %s: %s", *instance.InstanceId, err)
|
err := fmt.Errorf("Error tagging source EBS Volumes on %s: %s", *instance.InstanceId, err)
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/service/ec2"
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
|
"github.com/hashicorp/packer/helper/multistep"
|
||||||
"github.com/hashicorp/packer/packer"
|
"github.com/hashicorp/packer/packer"
|
||||||
"github.com/hashicorp/packer/template/interpolate"
|
"github.com/hashicorp/packer/template/interpolate"
|
||||||
)
|
)
|
||||||
|
@ -23,12 +24,10 @@ func (t TagMap) IsSet() bool {
|
||||||
return len(t) > 0
|
return len(t) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t TagMap) EC2Tags(ctx interpolate.Context, region, sourceAMIID string) (EC2Tags, error) {
|
func (t TagMap) EC2Tags(ctx interpolate.Context, region string, state multistep.StateBag) (EC2Tags, error) {
|
||||||
var ec2Tags []*ec2.Tag
|
var ec2Tags []*ec2.Tag
|
||||||
ctx.Data = &BuildInfoTemplate{
|
ctx.Data = extractBuildInfo(region, state)
|
||||||
SourceAMI: sourceAMIID,
|
|
||||||
BuildRegion: region,
|
|
||||||
}
|
|
||||||
for key, value := range t {
|
for key, value := range t {
|
||||||
interpolatedKey, err := interpolate.Render(key, &ctx)
|
interpolatedKey, err := interpolate.Render(key, &ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -18,7 +18,6 @@ type stepTagEBSVolumes struct {
|
||||||
func (s *stepTagEBSVolumes) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {
|
func (s *stepTagEBSVolumes) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {
|
||||||
ec2conn := state.Get("ec2").(*ec2.EC2)
|
ec2conn := state.Get("ec2").(*ec2.EC2)
|
||||||
instance := state.Get("instance").(*ec2.Instance)
|
instance := state.Get("instance").(*ec2.Instance)
|
||||||
sourceAMI := state.Get("source_image").(*ec2.Image)
|
|
||||||
ui := state.Get("ui").(packer.Ui)
|
ui := state.Get("ui").(packer.Ui)
|
||||||
|
|
||||||
volumes := make(EbsVolumes)
|
volumes := make(EbsVolumes)
|
||||||
|
@ -43,7 +42,7 @@ func (s *stepTagEBSVolumes) Run(_ context.Context, state multistep.StateBag) mul
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
tags, err := mapping.Tags.EC2Tags(s.Ctx, *ec2conn.Config.Region, *sourceAMI.ImageId)
|
tags, err := mapping.Tags.EC2Tags(s.Ctx, *ec2conn.Config.Region, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err := fmt.Errorf("Error tagging device %s with %s", mapping.DeviceName, err)
|
err := fmt.Errorf("Error tagging device %s with %s", mapping.DeviceName, err)
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
|
|
|
@ -77,10 +77,8 @@ each category, the available configuration keys are alphabetized.
|
||||||
|
|
||||||
- `ami_description` (string) - The description to set for the
|
- `ami_description` (string) - The description to set for the
|
||||||
resulting AMI(s). By default this description is empty. This is a
|
resulting AMI(s). By default this description is empty. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with name of the region where this
|
|
||||||
is built.
|
|
||||||
|
|
||||||
- `ami_groups` (array of strings) - A list of groups that have access to
|
- `ami_groups` (array of strings) - A list of groups that have access to
|
||||||
launch the resulting AMI(s). By default no groups have permission to launch
|
launch the resulting AMI(s). By default no groups have permission to launch
|
||||||
|
@ -251,10 +249,8 @@ each category, the available configuration keys are alphabetized.
|
||||||
|
|
||||||
- `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
|
- `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
|
||||||
They will override AMI tags if already applied to snapshot. This is a
|
They will override AMI tags if already applied to snapshot. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with name of the region where this
|
|
||||||
is built.
|
|
||||||
|
|
||||||
- `snapshot_groups` (array of strings) - A list of groups that have access to
|
- `snapshot_groups` (array of strings) - A list of groups that have access to
|
||||||
create volumes from the snapshot(s). By default no groups have permission to create
|
create volumes from the snapshot(s). By default no groups have permission to create
|
||||||
|
@ -307,10 +303,8 @@ each category, the available configuration keys are alphabetized.
|
||||||
Default `false`.
|
Default `false`.
|
||||||
|
|
||||||
- `tags` (object of key/value strings) - Tags applied to the AMI. This is a
|
- `tags` (object of key/value strings) - Tags applied to the AMI. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with name of the region where this
|
|
||||||
is built.
|
|
||||||
|
|
||||||
## Basic Example
|
## Basic Example
|
||||||
|
|
||||||
|
@ -432,3 +426,12 @@ provisioning commands to install the os and bootloader.
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Build template data
|
||||||
|
|
||||||
|
The available variables are:
|
||||||
|
|
||||||
|
- `BuildRegion` - The region (for example `eu-central-1`) where Packer is building the AMI.
|
||||||
|
- `SourceAMI` - The source AMI ID (for example `ami-a2412fcd`) used to build the AMI.
|
||||||
|
- `SourceAMIName` - The source AMI Name (for example `ubuntu/images/ebs-ssd/ubuntu-xenial-16.04-amd64-server-20180306`) used to build the AMI.
|
||||||
|
- `SourceAMITags` - The source AMI Tags, as a `map[string]string` object.
|
||||||
|
|
|
@ -114,9 +114,8 @@ builder.
|
||||||
|
|
||||||
- `ami_description` (string) - The description to set for the
|
- `ami_description` (string) - The description to set for the
|
||||||
resulting AMI(s). By default this description is empty. This is a
|
resulting AMI(s). By default this description is empty. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `ami_groups` (array of strings) - A list of groups that have access to
|
- `ami_groups` (array of strings) - A list of groups that have access to
|
||||||
launch the resulting AMI(s). By default no groups have permission to launch
|
launch the resulting AMI(s). By default no groups have permission to launch
|
||||||
|
@ -221,16 +220,14 @@ builder.
|
||||||
- `run_tags` (object of key/value strings) - Tags to apply to the instance
|
- `run_tags` (object of key/value strings) - Tags to apply to the instance
|
||||||
that is *launched* to create the AMI. These tags are *not* applied to the
|
that is *launched* to create the AMI. These tags are *not* applied to the
|
||||||
resulting AMI unless they're duplicated in `tags`. This is a
|
resulting AMI unless they're duplicated in `tags`. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `run_volume_tags` (object of key/value strings) - Tags to apply to the volumes
|
- `run_volume_tags` (object of key/value strings) - Tags to apply to the volumes
|
||||||
that are *launched* to create the AMI. These tags are *not* applied to the
|
that are *launched* to create the AMI. These tags are *not* applied to the
|
||||||
resulting AMI unless they're duplicated in `tags`. This is a
|
resulting AMI unless they're duplicated in `tags`. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `security_group_id` (string) - The ID (*not* the name) of the security group
|
- `security_group_id` (string) - The ID (*not* the name) of the security group
|
||||||
to assign to the instance. By default this is not set and Packer will
|
to assign to the instance. By default this is not set and Packer will
|
||||||
|
@ -264,9 +261,8 @@ builder.
|
||||||
|
|
||||||
- `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
|
- `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
|
||||||
They will override AMI tags if already applied to snapshot. This is a
|
They will override AMI tags if already applied to snapshot. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
|
- `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
|
||||||
Example:
|
Example:
|
||||||
|
@ -361,9 +357,8 @@ builder.
|
||||||
|
|
||||||
- `tags` (object of key/value strings) - Tags applied to the AMI and
|
- `tags` (object of key/value strings) - Tags applied to the AMI and
|
||||||
relevant snapshots. This is a
|
relevant snapshots. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `temporary_key_pair_name` (string) - The name of the temporary key pair
|
- `temporary_key_pair_name` (string) - The name of the temporary key pair
|
||||||
to generate. By default, Packer generates a name that looks like
|
to generate. By default, Packer generates a name that looks like
|
||||||
|
@ -462,6 +457,15 @@ configuration of `launch_block_device_mappings` will expand the root volume
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Build template data
|
||||||
|
|
||||||
|
The available variables are:
|
||||||
|
|
||||||
|
- `BuildRegion` - The region (for example `eu-central-1`) where Packer is building the AMI.
|
||||||
|
- `SourceAMI` - The source AMI ID (for example `ami-a2412fcd`) used to build the AMI.
|
||||||
|
- `SourceAMIName` - The source AMI Name (for example `ubuntu/images/ebs-ssd/ubuntu-xenial-16.04-amd64-server-20180306`) used to build the AMI.
|
||||||
|
- `SourceAMITags` - The source AMI Tags, as a `map[string]string` object.
|
||||||
|
|
||||||
## Tag Example
|
## Tag Example
|
||||||
|
|
||||||
Here is an example using the optional AMI tags. This will add the tags
|
Here is an example using the optional AMI tags. This will add the tags
|
||||||
|
@ -481,7 +485,9 @@ images exist when this template is run:
|
||||||
"ami_name": "packer-quick-start {{timestamp}}",
|
"ami_name": "packer-quick-start {{timestamp}}",
|
||||||
"tags": {
|
"tags": {
|
||||||
"OS_Version": "Ubuntu",
|
"OS_Version": "Ubuntu",
|
||||||
"Release": "Latest"
|
"Release": "Latest",
|
||||||
|
"Base_AMI_Name": "{{ .SourceAMIName }}",
|
||||||
|
"Extra": "{{ .SourceAMITags.TagName }}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -107,9 +107,8 @@ builder.
|
||||||
|
|
||||||
- `ami_description` (string) - The description to set for the
|
- `ami_description` (string) - The description to set for the
|
||||||
resulting AMI(s). By default this description is empty. This is a
|
resulting AMI(s). By default this description is empty. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `ami_groups` (array of strings) - A list of groups that have access to
|
- `ami_groups` (array of strings) - A list of groups that have access to
|
||||||
launch the resulting AMI(s). By default no groups have permission to launch
|
launch the resulting AMI(s). By default no groups have permission to launch
|
||||||
|
@ -214,16 +213,14 @@ builder.
|
||||||
- `run_tags` (object of key/value strings) - Tags to apply to the instance
|
- `run_tags` (object of key/value strings) - Tags to apply to the instance
|
||||||
that is *launched* to create the AMI. These tags are *not* applied to the
|
that is *launched* to create the AMI. These tags are *not* applied to the
|
||||||
resulting AMI unless they're duplicated in `tags`. This is a
|
resulting AMI unless they're duplicated in `tags`. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `run_volume_tags` (object of key/value strings) - Tags to apply to the volumes
|
- `run_volume_tags` (object of key/value strings) - Tags to apply to the volumes
|
||||||
that are *launched* to create the AMI. These tags are *not* applied to the
|
that are *launched* to create the AMI. These tags are *not* applied to the
|
||||||
resulting AMI unless they're duplicated in `tags`. This is a
|
resulting AMI unless they're duplicated in `tags`. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `security_group_id` (string) - The ID (*not* the name) of the security group
|
- `security_group_id` (string) - The ID (*not* the name) of the security group
|
||||||
to assign to the instance. By default this is not set and Packer will
|
to assign to the instance. By default this is not set and Packer will
|
||||||
|
@ -257,9 +254,8 @@ builder.
|
||||||
|
|
||||||
- `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
|
- `snapshot_tags` (object of key/value strings) - Tags to apply to snapshot.
|
||||||
They will override AMI tags if already applied to snapshot. This is a
|
They will override AMI tags if already applied to snapshot. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
|
- `source_ami_filter` (object) - Filters used to populate the `source_ami` field.
|
||||||
Example:
|
Example:
|
||||||
|
@ -354,9 +350,8 @@ builder.
|
||||||
|
|
||||||
- `tags` (object of key/value strings) - Tags applied to the AMI and
|
- `tags` (object of key/value strings) - Tags applied to the AMI and
|
||||||
relevant snapshots. This is a
|
relevant snapshots. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `temporary_key_pair_name` (string) - The name of the temporary keypair
|
- `temporary_key_pair_name` (string) - The name of the temporary keypair
|
||||||
to generate. By default, Packer generates a name with a UUID.
|
to generate. By default, Packer generates a name with a UUID.
|
||||||
|
@ -426,6 +421,16 @@ with the `-debug` flag. In debug mode, the Amazon builder will save the private
|
||||||
key in the current directory and will output the DNS or IP information as well.
|
key in the current directory and will output the DNS or IP information as well.
|
||||||
You can use this information to access the instance as it is running.
|
You can use this information to access the instance as it is running.
|
||||||
|
|
||||||
|
## Build template data
|
||||||
|
|
||||||
|
The available variables are:
|
||||||
|
|
||||||
|
- `BuildRegion` - The region (for example `eu-central-1`) where Packer is building the AMI.
|
||||||
|
- `SourceAMI` - The source AMI ID (for example `ami-a2412fcd`) used to build the AMI.
|
||||||
|
- `SourceAMIName` - The source AMI Name (for example `ubuntu/images/ebs-ssd/ubuntu-xenial-16.04-amd64-server-20180306`) used to build the AMI.
|
||||||
|
- `SourceAMITags` - The source AMI Tags, as a `map[string]string` object.
|
||||||
|
|
||||||
|
|
||||||
-> **Note:** Packer uses pre-built AMIs as the source for building images.
|
-> **Note:** Packer uses pre-built AMIs as the source for building images.
|
||||||
These source AMIs may include volumes that are not flagged to be destroyed on
|
These source AMIs may include volumes that are not flagged to be destroyed on
|
||||||
termination of the instance building the new image. In addition to those volumes
|
termination of the instance building the new image. In addition to those volumes
|
||||||
|
|
|
@ -86,10 +86,9 @@ builder.
|
||||||
volumes, `io1` for Provisioned IOPS (SSD) volumes, and `standard` for Magnetic
|
volumes, `io1` for Provisioned IOPS (SSD) volumes, and `standard` for Magnetic
|
||||||
volumes
|
volumes
|
||||||
- `tags` (map) - Tags to apply to the volume. These are retained after the
|
- `tags` (map) - Tags to apply to the volume. These are retained after the
|
||||||
builder completes. This is a \[template engine\]
|
builder completes. This is a
|
||||||
(/docs/templates/engine.html) where the `SourceAMI`
|
[template engine](/docs/templates/engine.html),
|
||||||
variable is replaced with the source AMI ID and `BuildRegion` variable
|
see [Build template data](#build-template-data) for more information.
|
||||||
is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `associate_public_ip_address` (boolean) - If using a non-default VPC, public
|
- `associate_public_ip_address` (boolean) - If using a non-default VPC, public
|
||||||
IP addresses are not provided by default. If this is toggled, your new
|
IP addresses are not provided by default. If this is toggled, your new
|
||||||
|
@ -126,9 +125,8 @@ builder.
|
||||||
- `run_tags` (object of key/value strings) - Tags to apply to the instance
|
- `run_tags` (object of key/value strings) - Tags to apply to the instance
|
||||||
that is *launched* to create the AMI. These tags are *not* applied to the
|
that is *launched* to create the AMI. These tags are *not* applied to the
|
||||||
resulting AMI unless they're duplicated in `tags`. This is a
|
resulting AMI unless they're duplicated in `tags`. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `security_group_id` (string) - The ID (*not* the name) of the security group
|
- `security_group_id` (string) - The ID (*not* the name) of the security group
|
||||||
to assign to the instance. By default this is not set and Packer will
|
to assign to the instance. By default this is not set and Packer will
|
||||||
|
@ -328,6 +326,15 @@ with the `-debug` flag. In debug mode, the Amazon builder will save the private
|
||||||
key in the current directory and will output the DNS or IP information as well.
|
key in the current directory and will output the DNS or IP information as well.
|
||||||
You can use this information to access the instance as it is running.
|
You can use this information to access the instance as it is running.
|
||||||
|
|
||||||
|
## Build template data
|
||||||
|
|
||||||
|
The available variables are:
|
||||||
|
|
||||||
|
- `BuildRegion` - The region (for example `eu-central-1`) where Packer is building the AMI.
|
||||||
|
- `SourceAMI` - The source AMI ID (for example `ami-a2412fcd`) used to build the AMI.
|
||||||
|
- `SourceAMIName` - The source AMI Name (for example `ubuntu/images/ebs-ssd/ubuntu-xenial-16.04-amd64-server-20180306`) used to build the AMI.
|
||||||
|
- `SourceAMITags` - The source AMI Tags, as a `map[string]string` object.
|
||||||
|
|
||||||
-> **Note:** Packer uses pre-built AMIs as the source for building images.
|
-> **Note:** Packer uses pre-built AMIs as the source for building images.
|
||||||
These source AMIs may include volumes that are not flagged to be destroyed on
|
These source AMIs may include volumes that are not flagged to be destroyed on
|
||||||
termination of the instance building the new image. In addition to those volumes
|
termination of the instance building the new image. In addition to those volumes
|
||||||
|
|
|
@ -136,9 +136,8 @@ builder.
|
||||||
|
|
||||||
- `ami_description` (string) - The description to set for the
|
- `ami_description` (string) - The description to set for the
|
||||||
resulting AMI(s). By default this description is empty. This is a
|
resulting AMI(s). By default this description is empty. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `ami_groups` (array of strings) - A list of groups that have access to
|
- `ami_groups` (array of strings) - A list of groups that have access to
|
||||||
launch the resulting AMI(s). By default no groups have permission to launch
|
launch the resulting AMI(s). By default no groups have permission to launch
|
||||||
|
@ -236,9 +235,8 @@ builder.
|
||||||
- `run_tags` (object of key/value strings) - Tags to apply to the instance
|
- `run_tags` (object of key/value strings) - Tags to apply to the instance
|
||||||
that is *launched* to create the AMI. These tags are *not* applied to the
|
that is *launched* to create the AMI. These tags are *not* applied to the
|
||||||
resulting AMI unless they're duplicated in `tags`. This is a
|
resulting AMI unless they're duplicated in `tags`. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `security_group_id` (string) - The ID (*not* the name) of the security group
|
- `security_group_id` (string) - The ID (*not* the name) of the security group
|
||||||
to assign to the instance. By default this is not set and Packer will
|
to assign to the instance. By default this is not set and Packer will
|
||||||
|
@ -361,9 +359,8 @@ builder.
|
||||||
required if you are using an non-default VPC.
|
required if you are using an non-default VPC.
|
||||||
|
|
||||||
- `tags` (object of key/value strings) - Tags applied to the AMI. This is a
|
- `tags` (object of key/value strings) - Tags applied to the AMI. This is a
|
||||||
[template engine](/docs/templates/engine.html)
|
[template engine](/docs/templates/engine.html),
|
||||||
where the `SourceAMI` variable is replaced with the source AMI ID and
|
see [Build template data](#build-template-data) for more information.
|
||||||
`BuildRegion` variable is replaced with the value of `region`.
|
|
||||||
|
|
||||||
- `temporary_key_pair_name` (string) - The name of the temporary key pair
|
- `temporary_key_pair_name` (string) - The name of the temporary key pair
|
||||||
to generate. By default, Packer generates a name that looks like
|
to generate. By default, Packer generates a name that looks like
|
||||||
|
@ -425,6 +422,15 @@ with the `-debug` flag. In debug mode, the Amazon builder will save the private
|
||||||
key in the current directory and will output the DNS or IP information as well.
|
key in the current directory and will output the DNS or IP information as well.
|
||||||
You can use this information to access the instance as it is running.
|
You can use this information to access the instance as it is running.
|
||||||
|
|
||||||
|
## Build template data
|
||||||
|
|
||||||
|
The available variables are:
|
||||||
|
|
||||||
|
- `BuildRegion` - The region (for example `eu-central-1`) where Packer is building the AMI.
|
||||||
|
- `SourceAMI` - The source AMI ID (for example `ami-a2412fcd`) used to build the AMI.
|
||||||
|
- `SourceAMIName` - The source AMI Name (for example `ubuntu/images/ebs-ssd/ubuntu-xenial-16.04-amd64-server-20180306`) used to build the AMI.
|
||||||
|
- `SourceAMITags` - The source AMI Tags, as a `map[string]string` object.
|
||||||
|
|
||||||
## Custom Bundle Commands
|
## Custom Bundle Commands
|
||||||
|
|
||||||
A lot of the process required for creating an instance-store backed AMI involves
|
A lot of the process required for creating an instance-store backed AMI involves
|
||||||
|
|
Loading…
Reference in New Issue