Merge pull request #8162 from hashicorp/fix_8154
make sure amazon builders respect ssh_host option
This commit is contained in:
commit
e047b97bf7
|
@ -3,6 +3,7 @@ package common
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/service/ec2"
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
|
@ -20,12 +21,16 @@ var (
|
||||||
|
|
||||||
// SSHHost returns a function that can be given to the SSH communicator
|
// SSHHost returns a function that can be given to the SSH communicator
|
||||||
// for determining the SSH address based on the instance DNS name.
|
// for determining the SSH address based on the instance DNS name.
|
||||||
func SSHHost(e ec2Describer, sshInterface string) func(multistep.StateBag) (string, error) {
|
func SSHHost(e ec2Describer, sshInterface string, host string) func(multistep.StateBag) (string, error) {
|
||||||
return func(state multistep.StateBag) (string, error) {
|
return func(state multistep.StateBag) (string, error) {
|
||||||
|
if host != "" {
|
||||||
|
log.Printf("Using ssh_host value: %s", host)
|
||||||
|
return host, nil
|
||||||
|
}
|
||||||
|
|
||||||
const tries = 2
|
const tries = 2
|
||||||
// <= with current structure to check result of describing `tries` times
|
// <= with current structure to check result of describing `tries` times
|
||||||
for j := 0; j <= tries; j++ {
|
for j := 0; j <= tries; j++ {
|
||||||
var host string
|
|
||||||
i := state.Get("instance").(*ec2.Instance)
|
i := state.Get("instance").(*ec2.Instance)
|
||||||
if sshInterface != "" {
|
if sshInterface != "" {
|
||||||
switch sshInterface {
|
switch sshInterface {
|
||||||
|
|
|
@ -9,10 +9,11 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
privateIP = "10.0.0.1"
|
privateIP = "10.0.0.1"
|
||||||
publicIP = "192.168.1.1"
|
publicIP = "192.168.1.1"
|
||||||
privateDNS = "private.dns.test"
|
privateDNS = "private.dns.test"
|
||||||
publicDNS = "public.dns.test"
|
publicDNS = "public.dns.test"
|
||||||
|
sshHostTemplate = "custom.host.value"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSSHHost(t *testing.T) {
|
func TestSSHHost(t *testing.T) {
|
||||||
|
@ -25,39 +26,46 @@ func TestSSHHost(t *testing.T) {
|
||||||
vpcId string
|
vpcId string
|
||||||
sshInterface string
|
sshInterface string
|
||||||
|
|
||||||
ok bool
|
ok bool
|
||||||
wantHost string
|
wantHost string
|
||||||
|
sshHostOverride string
|
||||||
}{
|
}{
|
||||||
{1, "", "", true, publicDNS},
|
{1, "", "", true, publicDNS, ""},
|
||||||
{1, "", "private_ip", true, privateIP},
|
{1, "", "private_ip", true, privateIP, ""},
|
||||||
{1, "vpc-id", "", true, publicIP},
|
{1, "vpc-id", "", true, publicIP, ""},
|
||||||
{1, "vpc-id", "private_ip", true, privateIP},
|
{1, "vpc-id", "private_ip", true, privateIP, ""},
|
||||||
{1, "vpc-id", "private_dns", true, privateDNS},
|
{1, "vpc-id", "private_dns", true, privateDNS, ""},
|
||||||
{1, "vpc-id", "public_dns", true, publicDNS},
|
{1, "vpc-id", "public_dns", true, publicDNS, ""},
|
||||||
{1, "vpc-id", "public_ip", true, publicIP},
|
{1, "vpc-id", "public_ip", true, publicIP, ""},
|
||||||
{2, "", "", true, publicDNS},
|
{2, "", "", true, publicDNS, ""},
|
||||||
{2, "", "private_ip", true, privateIP},
|
{2, "", "private_ip", true, privateIP, ""},
|
||||||
{2, "vpc-id", "", true, publicIP},
|
{2, "vpc-id", "", true, publicIP, ""},
|
||||||
{2, "vpc-id", "private_ip", true, privateIP},
|
{2, "vpc-id", "private_ip", true, privateIP, ""},
|
||||||
{2, "vpc-id", "private_dns", true, privateDNS},
|
{2, "vpc-id", "private_dns", true, privateDNS, ""},
|
||||||
{2, "vpc-id", "public_dns", true, publicDNS},
|
{2, "vpc-id", "public_dns", true, publicDNS, ""},
|
||||||
{2, "vpc-id", "public_ip", true, publicIP},
|
{2, "vpc-id", "public_ip", true, publicIP, ""},
|
||||||
{3, "", "", false, ""},
|
{3, "", "", false, "", ""},
|
||||||
{3, "", "private_ip", false, ""},
|
{3, "", "private_ip", false, "", ""},
|
||||||
{3, "vpc-id", "", false, ""},
|
{3, "vpc-id", "", false, "", ""},
|
||||||
{3, "vpc-id", "private_ip", false, ""},
|
{3, "vpc-id", "private_ip", false, "", ""},
|
||||||
{3, "vpc-id", "private_dns", false, ""},
|
{3, "vpc-id", "private_dns", false, "", ""},
|
||||||
{3, "vpc-id", "public_dns", false, ""},
|
{3, "vpc-id", "public_dns", false, "", ""},
|
||||||
{3, "vpc-id", "public_ip", false, ""},
|
{3, "vpc-id", "public_ip", false, "", ""},
|
||||||
|
{1, "", "", true, sshHostTemplate, sshHostTemplate},
|
||||||
|
{1, "vpc-id", "", true, sshHostTemplate, sshHostTemplate},
|
||||||
|
{2, "vpc-id", "private_dns", true, sshHostTemplate, sshHostTemplate},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, c := range cases {
|
for _, c := range cases {
|
||||||
testSSHHost(t, c.allowTries, c.vpcId, c.sshInterface, c.ok, c.wantHost)
|
testSSHHost(t, c.allowTries, c.vpcId, c.sshInterface, c.ok, c.wantHost,
|
||||||
|
c.sshHostOverride)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func testSSHHost(t *testing.T, allowTries int, vpcId string, sshInterface string, ok bool, wantHost string) {
|
func testSSHHost(t *testing.T, allowTries int, vpcId string, sshInterface string,
|
||||||
t.Logf("allowTries=%d vpcId=%s sshInterface=%s ok=%t wantHost=%q", allowTries, vpcId, sshInterface, ok, wantHost)
|
ok bool, wantHost string, sshHostOverride string) {
|
||||||
|
t.Logf("allowTries=%d vpcId=%s sshInterface=%s ok=%t wantHost=%q sshHostOverride=%s",
|
||||||
|
allowTries, vpcId, sshInterface, ok, wantHost, sshHostOverride)
|
||||||
|
|
||||||
e := &fakeEC2Describer{
|
e := &fakeEC2Describer{
|
||||||
allowTries: allowTries,
|
allowTries: allowTries,
|
||||||
|
@ -68,7 +76,7 @@ func testSSHHost(t *testing.T, allowTries int, vpcId string, sshInterface string
|
||||||
publicDNS: publicDNS,
|
publicDNS: publicDNS,
|
||||||
}
|
}
|
||||||
|
|
||||||
f := SSHHost(e, sshInterface)
|
f := SSHHost(e, sshInterface, sshHostOverride)
|
||||||
st := &multistep.BasicStateBag{}
|
st := &multistep.BasicStateBag{}
|
||||||
st.Put("instance", &ec2.Instance{
|
st.Put("instance", &ec2.Instance{
|
||||||
InstanceId: aws.String("instance-id"),
|
InstanceId: aws.String("instance-id"),
|
||||||
|
|
|
@ -231,7 +231,9 @@ func (b *Builder) Run(ctx context.Context, ui packer.Ui, hook packer.Hook) (pack
|
||||||
Config: &b.config.RunConfig.Comm,
|
Config: &b.config.RunConfig.Comm,
|
||||||
Host: awscommon.SSHHost(
|
Host: awscommon.SSHHost(
|
||||||
ec2conn,
|
ec2conn,
|
||||||
b.config.SSHInterface),
|
b.config.SSHInterface,
|
||||||
|
b.config.Comm.SSHHost,
|
||||||
|
),
|
||||||
SSHConfig: b.config.RunConfig.Comm.SSHConfigFunc(),
|
SSHConfig: b.config.RunConfig.Comm.SSHConfigFunc(),
|
||||||
},
|
},
|
||||||
&common.StepProvision{},
|
&common.StepProvision{},
|
||||||
|
|
|
@ -272,7 +272,9 @@ func (b *Builder) Run(ctx context.Context, ui packer.Ui, hook packer.Hook) (pack
|
||||||
Config: &b.config.RunConfig.Comm,
|
Config: &b.config.RunConfig.Comm,
|
||||||
Host: awscommon.SSHHost(
|
Host: awscommon.SSHHost(
|
||||||
ec2conn,
|
ec2conn,
|
||||||
b.config.SSHInterface),
|
b.config.SSHInterface,
|
||||||
|
b.config.Comm.SSHHost,
|
||||||
|
),
|
||||||
SSHConfig: b.config.RunConfig.Comm.SSHConfigFunc(),
|
SSHConfig: b.config.RunConfig.Comm.SSHConfigFunc(),
|
||||||
},
|
},
|
||||||
&common.StepProvision{},
|
&common.StepProvision{},
|
||||||
|
|
|
@ -239,7 +239,9 @@ func (b *Builder) Run(ctx context.Context, ui packer.Ui, hook packer.Hook) (pack
|
||||||
Config: &b.config.RunConfig.Comm,
|
Config: &b.config.RunConfig.Comm,
|
||||||
Host: awscommon.SSHHost(
|
Host: awscommon.SSHHost(
|
||||||
ec2conn,
|
ec2conn,
|
||||||
b.config.SSHInterface),
|
b.config.SSHInterface,
|
||||||
|
b.config.Comm.SSHHost,
|
||||||
|
),
|
||||||
SSHConfig: b.config.RunConfig.Comm.SSHConfigFunc(),
|
SSHConfig: b.config.RunConfig.Comm.SSHConfigFunc(),
|
||||||
},
|
},
|
||||||
&common.StepProvision{},
|
&common.StepProvision{},
|
||||||
|
|
|
@ -324,7 +324,9 @@ func (b *Builder) Run(ctx context.Context, ui packer.Ui, hook packer.Hook) (pack
|
||||||
Config: &b.config.RunConfig.Comm,
|
Config: &b.config.RunConfig.Comm,
|
||||||
Host: awscommon.SSHHost(
|
Host: awscommon.SSHHost(
|
||||||
ec2conn,
|
ec2conn,
|
||||||
b.config.SSHInterface),
|
b.config.SSHInterface,
|
||||||
|
b.config.Comm.SSHHost,
|
||||||
|
),
|
||||||
SSHConfig: b.config.RunConfig.Comm.SSHConfigFunc(),
|
SSHConfig: b.config.RunConfig.Comm.SSHConfigFunc(),
|
||||||
},
|
},
|
||||||
&common.StepProvision{},
|
&common.StepProvision{},
|
||||||
|
|
Loading…
Reference in New Issue