Allow customization of SSH Key pair pattern

Defined in a template using ssh_keypair_pattern. Defaults to "packer %s"
This commit is contained in:
Ben Griffiths 2013-09-05 13:28:31 +01:00
parent 1df0735713
commit f953874448
4 changed files with 33 additions and 5 deletions

View File

@ -22,6 +22,7 @@ type RunConfig struct {
SecurityGroupId string `mapstructure:"security_group_id"` SecurityGroupId string `mapstructure:"security_group_id"`
SubnetId string `mapstructure:"subnet_id"` SubnetId string `mapstructure:"subnet_id"`
VpcId string `mapstructure:"vpc_id"` VpcId string `mapstructure:"vpc_id"`
SSHKeyPairPattern string `mapstructure:"ssh_keypair_pattern"`
// Unexported fields that are calculated from others // Unexported fields that are calculated from others
sshTimeout time.Duration sshTimeout time.Duration
@ -45,6 +46,10 @@ func (c *RunConfig) Prepare(t *packer.ConfigTemplate) []error {
c.RawSSHTimeout = "1m" c.RawSSHTimeout = "1m"
} }
if c.SSHKeyPairPattern == "" {
c.SSHKeyPairPattern = "packer %s"
}
// Validation // Validation
var err error var err error
errs := make([]error, 0) errs := make([]error, 0)

View File

@ -126,3 +126,24 @@ func TestRunConfigPrepare_UserDataFile(t *testing.T) {
t.Fatalf("err: %s", err) t.Fatalf("err: %s", err)
} }
} }
func TestRunConfigPrepare_SSHKeyPairPattern(t *testing.T) {
c := testConfig()
c.SSHKeyPairPattern = ""
if err := c.Prepare(nil); len(err) != 0 {
t.Fatalf("err: %s", err)
}
if c.SSHKeyPairPattern != "packer %s" {
t.Fatalf("invalid value: %s", c.SSHKeyPairPattern)
}
c.SSHKeyPairPattern = "valid-%s"
if err := c.Prepare(nil); len(err) != 0 {
t.Fatalf("err: %s", err)
}
if c.SSHKeyPairPattern != "valid-%s" {
t.Fatalf("invalid value: %s", c.SSHKeyPairPattern)
}
}

View File

@ -15,6 +15,7 @@ import (
type StepKeyPair struct { type StepKeyPair struct {
Debug bool Debug bool
DebugKeyPath string DebugKeyPath string
KeyPairPattern string
keyName string keyName string
} }
@ -24,7 +25,7 @@ func (s *StepKeyPair) Run(state multistep.StateBag) multistep.StepAction {
ui := state.Get("ui").(packer.Ui) ui := state.Get("ui").(packer.Ui)
ui.Say("Creating temporary keypair for this instance...") ui.Say("Creating temporary keypair for this instance...")
keyName := fmt.Sprintf("packer %s", hex.EncodeToString(identifier.NewUUID().Raw())) keyName := fmt.Sprintf(s.KeyPairPattern, hex.EncodeToString(identifier.NewUUID().Raw()))
log.Printf("temporary keypair name: %s", keyName) log.Printf("temporary keypair name: %s", keyName)
keyResp, err := ec2conn.CreateKeyPair(keyName) keyResp, err := ec2conn.CreateKeyPair(keyName)
if err != nil { if err != nil {

View File

@ -84,6 +84,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
&awscommon.StepKeyPair{ &awscommon.StepKeyPair{
Debug: b.config.PackerDebug, Debug: b.config.PackerDebug,
DebugKeyPath: fmt.Sprintf("ec2_%s.pem", b.config.PackerBuildName), DebugKeyPath: fmt.Sprintf("ec2_%s.pem", b.config.PackerBuildName),
KeyPairPattern: b.config.SSHKeyPairPattern,
}, },
&awscommon.StepSecurityGroup{ &awscommon.StepSecurityGroup{
SecurityGroupId: b.config.SecurityGroupId, SecurityGroupId: b.config.SecurityGroupId,