Merge pull request #8162 from hashicorp/fix_8154

make sure amazon builders respect ssh_host option
This commit is contained in:
Megan Marsh 2019-09-27 09:34:49 -07:00 committed by GitHub
commit e047b97bf7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 58 additions and 37 deletions

View File

@ -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 {

View File

@ -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"),

View File

@ -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{},

View File

@ -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{},

View File

@ -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{},

View File

@ -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{},