helper/communicator: make host more generic
This commit is contained in:
parent
68e4734caf
commit
115d583cff
|
@ -10,9 +10,9 @@ import (
|
||||||
"golang.org/x/crypto/ssh"
|
"golang.org/x/crypto/ssh"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SSHAddress 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 SSHAddress(e *ec2.EC2, port int, private bool) func(multistep.StateBag) (string, error) {
|
func SSHHost(e *ec2.EC2, private bool) func(multistep.StateBag) (string, error) {
|
||||||
return func(state multistep.StateBag) (string, error) {
|
return func(state multistep.StateBag) (string, error) {
|
||||||
for j := 0; j < 2; j++ {
|
for j := 0; j < 2; j++ {
|
||||||
var host string
|
var host string
|
||||||
|
@ -28,7 +28,7 @@ func SSHAddress(e *ec2.EC2, port int, private bool) func(multistep.StateBag) (st
|
||||||
}
|
}
|
||||||
|
|
||||||
if host != "" {
|
if host != "" {
|
||||||
return fmt.Sprintf("%s:%d", host, port), nil
|
return host, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
r, err := e.DescribeInstances(&ec2.DescribeInstancesInput{
|
r, err := e.DescribeInstances(&ec2.DescribeInstancesInput{
|
||||||
|
|
|
@ -115,9 +115,8 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
},
|
},
|
||||||
&communicator.StepConnect{
|
&communicator.StepConnect{
|
||||||
Config: &b.config.RunConfig.Comm,
|
Config: &b.config.RunConfig.Comm,
|
||||||
SSHAddress: awscommon.SSHAddress(
|
Host: awscommon.SSHHost(
|
||||||
ec2conn,
|
ec2conn,
|
||||||
b.config.RunConfig.Comm.SSHPort,
|
|
||||||
b.config.SSHPrivateIp),
|
b.config.SSHPrivateIp),
|
||||||
SSHConfig: awscommon.SSHConfig(
|
SSHConfig: awscommon.SSHConfig(
|
||||||
b.config.RunConfig.Comm.SSHUsername),
|
b.config.RunConfig.Comm.SSHUsername),
|
||||||
|
|
|
@ -200,9 +200,8 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
},
|
},
|
||||||
&communicator.StepConnect{
|
&communicator.StepConnect{
|
||||||
Config: &b.config.RunConfig.Comm,
|
Config: &b.config.RunConfig.Comm,
|
||||||
SSHAddress: awscommon.SSHAddress(
|
Host: awscommon.SSHHost(
|
||||||
ec2conn,
|
ec2conn,
|
||||||
b.config.RunConfig.Comm.SSHPort,
|
|
||||||
b.config.SSHPrivateIp),
|
b.config.SSHPrivateIp),
|
||||||
SSHConfig: awscommon.SSHConfig(
|
SSHConfig: awscommon.SSHConfig(
|
||||||
b.config.RunConfig.Comm.SSHUsername),
|
b.config.RunConfig.Comm.SSHUsername),
|
||||||
|
|
|
@ -55,7 +55,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
new(stepDropletInfo),
|
new(stepDropletInfo),
|
||||||
&communicator.StepConnect{
|
&communicator.StepConnect{
|
||||||
Config: &b.config.Comm,
|
Config: &b.config.Comm,
|
||||||
SSHAddress: sshAddress,
|
Host: commHost,
|
||||||
SSHConfig: sshConfig,
|
SSHConfig: sshConfig,
|
||||||
},
|
},
|
||||||
new(common.StepProvision),
|
new(common.StepProvision),
|
||||||
|
|
|
@ -2,14 +2,14 @@ package digitalocean
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/mitchellh/multistep"
|
|
||||||
"golang.org/x/crypto/ssh"
|
"golang.org/x/crypto/ssh"
|
||||||
|
|
||||||
|
"github.com/mitchellh/multistep"
|
||||||
)
|
)
|
||||||
|
|
||||||
func sshAddress(state multistep.StateBag) (string, error) {
|
func commHost(state multistep.StateBag) (string, error) {
|
||||||
config := state.Get("config").(Config)
|
|
||||||
ipAddress := state.Get("droplet_ip").(string)
|
ipAddress := state.Get("droplet_ip").(string)
|
||||||
return fmt.Sprintf("%s:%d", ipAddress, config.Comm.SSHPort), nil
|
return ipAddress, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func sshConfig(state multistep.StateBag) (*ssh.ClientConfig, error) {
|
func sshConfig(state multistep.StateBag) (*ssh.ClientConfig, error) {
|
||||||
|
|
|
@ -63,7 +63,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
},
|
},
|
||||||
&communicator.StepConnect{
|
&communicator.StepConnect{
|
||||||
Config: &b.config.Comm,
|
Config: &b.config.Comm,
|
||||||
SSHAddress: sshAddress,
|
Host: commHost,
|
||||||
SSHConfig: sshConfig,
|
SSHConfig: sshConfig,
|
||||||
},
|
},
|
||||||
new(common.StepProvision),
|
new(common.StepProvision),
|
||||||
|
|
|
@ -2,15 +2,14 @@ package googlecompute
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/mitchellh/multistep"
|
"github.com/mitchellh/multistep"
|
||||||
"golang.org/x/crypto/ssh"
|
"golang.org/x/crypto/ssh"
|
||||||
)
|
)
|
||||||
|
|
||||||
// sshAddress returns the ssh address.
|
func commHost(state multistep.StateBag) (string, error) {
|
||||||
func sshAddress(state multistep.StateBag) (string, error) {
|
|
||||||
config := state.Get("config").(*Config)
|
|
||||||
ipAddress := state.Get("instance_ip").(string)
|
ipAddress := state.Get("instance_ip").(string)
|
||||||
return fmt.Sprintf("%s:%d", ipAddress, config.Comm.SSHPort), nil
|
return ipAddress, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// sshConfig returns the ssh configuration.
|
// sshConfig returns the ssh configuration.
|
||||||
|
|
|
@ -30,8 +30,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
steps := []multistep.Step{
|
steps := []multistep.Step{
|
||||||
&communicator.StepConnect{
|
&communicator.StepConnect{
|
||||||
Config: &b.config.CommConfig,
|
Config: &b.config.CommConfig,
|
||||||
SSHAddress: SSHAddress(
|
Host: CommHost(b.config.CommConfig.SSHHost),
|
||||||
b.config.CommConfig.SSHHost, b.config.CommConfig.SSHPort),
|
|
||||||
SSHConfig: SSHConfig(
|
SSHConfig: SSHConfig(
|
||||||
b.config.CommConfig.SSHUsername,
|
b.config.CommConfig.SSHUsername,
|
||||||
b.config.CommConfig.SSHPassword,
|
b.config.CommConfig.SSHPassword,
|
||||||
|
|
|
@ -8,11 +8,9 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SSHAddress returns a function that can be given to the SSH communicator
|
func CommHost(host string) func(multistep.StateBag) (string, error) {
|
||||||
// for determining the SSH address
|
|
||||||
func SSHAddress(host string, port int) func(multistep.StateBag) (string, error) {
|
|
||||||
return func(state multistep.StateBag) (string, error) {
|
return func(state multistep.StateBag) (string, error) {
|
||||||
return fmt.Sprintf("%s:%d", host, port), nil
|
return host, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,10 +92,9 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
},
|
},
|
||||||
&communicator.StepConnect{
|
&communicator.StepConnect{
|
||||||
Config: &b.config.RunConfig.Comm,
|
Config: &b.config.RunConfig.Comm,
|
||||||
SSHAddress: SSHAddress(
|
Host: CommHost(
|
||||||
computeClient,
|
computeClient,
|
||||||
b.config.SSHInterface,
|
b.config.SSHInterface),
|
||||||
b.config.RunConfig.Comm.SSHPort),
|
|
||||||
SSHConfig: SSHConfig(b.config.RunConfig.Comm.SSHUsername),
|
SSHConfig: SSHConfig(b.config.RunConfig.Comm.SSHUsername),
|
||||||
},
|
},
|
||||||
&common.StepProvision{},
|
&common.StepProvision{},
|
||||||
|
|
|
@ -13,22 +13,21 @@ import (
|
||||||
"golang.org/x/crypto/ssh"
|
"golang.org/x/crypto/ssh"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SSHAddress returns a function that can be given to the SSH communicator
|
// CommHost looks up the host for the communicator.
|
||||||
// for determining the SSH address based on the server AccessIPv4 setting..
|
func CommHost(
|
||||||
func SSHAddress(
|
|
||||||
client *gophercloud.ServiceClient,
|
client *gophercloud.ServiceClient,
|
||||||
sshinterface string, port int) func(multistep.StateBag) (string, error) {
|
sshinterface string) func(multistep.StateBag) (string, error) {
|
||||||
return func(state multistep.StateBag) (string, error) {
|
return func(state multistep.StateBag) (string, error) {
|
||||||
s := state.Get("server").(*servers.Server)
|
s := state.Get("server").(*servers.Server)
|
||||||
|
|
||||||
// If we have a floating IP, use that
|
// If we have a floating IP, use that
|
||||||
ip := state.Get("access_ip").(*floatingip.FloatingIP)
|
ip := state.Get("access_ip").(*floatingip.FloatingIP)
|
||||||
if ip != nil && ip.IP != "" {
|
if ip != nil && ip.IP != "" {
|
||||||
return fmt.Sprintf("%s:%d", ip.IP, port), nil
|
return ip.IP, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if s.AccessIPv4 != "" {
|
if s.AccessIPv4 != "" {
|
||||||
return fmt.Sprintf("%s:%d", s.AccessIPv4, port), nil
|
return s.AccessIPv4, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get all the addresses associated with this server. This
|
// Get all the addresses associated with this server. This
|
||||||
|
@ -53,7 +52,7 @@ func SSHAddress(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if addr != "" {
|
if addr != "" {
|
||||||
return fmt.Sprintf("%s:%d", addr, port), nil
|
return addr, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,13 @@
|
||||||
package common
|
package common
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/mitchellh/multistep"
|
"github.com/mitchellh/multistep"
|
||||||
commonssh "github.com/mitchellh/packer/common/ssh"
|
commonssh "github.com/mitchellh/packer/common/ssh"
|
||||||
packerssh "github.com/mitchellh/packer/communicator/ssh"
|
packerssh "github.com/mitchellh/packer/communicator/ssh"
|
||||||
"golang.org/x/crypto/ssh"
|
"golang.org/x/crypto/ssh"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SSHAddress(state multistep.StateBag) (string, error) {
|
func CommHost(state multistep.StateBag) (string, error) {
|
||||||
vmName := state.Get("vmName").(string)
|
vmName := state.Get("vmName").(string)
|
||||||
driver := state.Get("driver").(Driver)
|
driver := state.Get("driver").(Driver)
|
||||||
|
|
||||||
|
@ -23,7 +21,7 @@ func SSHAddress(state multistep.StateBag) (string, error) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
return fmt.Sprintf("%s:22", ip), nil
|
return ip, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func SSHConfigFunc(config SSHConfig) func(multistep.StateBag) (*ssh.ClientConfig, error) {
|
func SSHConfigFunc(config SSHConfig) func(multistep.StateBag) (*ssh.ClientConfig, error) {
|
||||||
|
|
|
@ -248,7 +248,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
},
|
},
|
||||||
&communicator.StepConnect{
|
&communicator.StepConnect{
|
||||||
Config: &b.config.SSHConfig.Comm,
|
Config: &b.config.SSHConfig.Comm,
|
||||||
SSHAddress: parallelscommon.SSHAddress,
|
Host: parallelscommon.CommHost,
|
||||||
SSHConfig: parallelscommon.SSHConfigFunc(b.config.SSHConfig),
|
SSHConfig: parallelscommon.SSHConfigFunc(b.config.SSHConfig),
|
||||||
},
|
},
|
||||||
¶llelscommon.StepUploadVersion{
|
¶llelscommon.StepUploadVersion{
|
||||||
|
|
|
@ -84,7 +84,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
},
|
},
|
||||||
&communicator.StepConnect{
|
&communicator.StepConnect{
|
||||||
Config: &b.config.SSHConfig.Comm,
|
Config: &b.config.SSHConfig.Comm,
|
||||||
SSHAddress: parallelscommon.SSHAddress,
|
Host: parallelscommon.CommHost,
|
||||||
SSHConfig: parallelscommon.SSHConfigFunc(b.config.SSHConfig),
|
SSHConfig: parallelscommon.SSHConfigFunc(b.config.SSHConfig),
|
||||||
},
|
},
|
||||||
¶llelscommon.StepUploadVersion{
|
¶llelscommon.StepUploadVersion{
|
||||||
|
|
|
@ -394,8 +394,9 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
&stepTypeBootCommand{},
|
&stepTypeBootCommand{},
|
||||||
&communicator.StepConnect{
|
&communicator.StepConnect{
|
||||||
Config: &b.config.Comm,
|
Config: &b.config.Comm,
|
||||||
SSHAddress: sshAddress,
|
Host: commHost,
|
||||||
SSHConfig: sshConfig,
|
SSHConfig: sshConfig,
|
||||||
|
SSHPort: commPort,
|
||||||
},
|
},
|
||||||
new(common.StepProvision),
|
new(common.StepProvision),
|
||||||
new(stepShutdown),
|
new(stepShutdown),
|
||||||
|
|
|
@ -1,17 +1,19 @@
|
||||||
package qemu
|
package qemu
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/mitchellh/multistep"
|
"github.com/mitchellh/multistep"
|
||||||
commonssh "github.com/mitchellh/packer/common/ssh"
|
commonssh "github.com/mitchellh/packer/common/ssh"
|
||||||
"github.com/mitchellh/packer/communicator/ssh"
|
"github.com/mitchellh/packer/communicator/ssh"
|
||||||
gossh "golang.org/x/crypto/ssh"
|
gossh "golang.org/x/crypto/ssh"
|
||||||
)
|
)
|
||||||
|
|
||||||
func sshAddress(state multistep.StateBag) (string, error) {
|
func commHost(state multistep.StateBag) (string, error) {
|
||||||
|
return "127.0.0.1", nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func commPort(state multistep.StateBag) (int, error) {
|
||||||
sshHostPort := state.Get("sshHostPort").(uint)
|
sshHostPort := state.Get("sshHostPort").(uint)
|
||||||
return fmt.Sprintf("127.0.0.1:%d", sshHostPort), nil
|
return int(sshHostPort), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func sshConfig(state multistep.StateBag) (*gossh.ClientConfig, error) {
|
func sshConfig(state multistep.StateBag) (*gossh.ClientConfig, error) {
|
||||||
|
|
|
@ -1,17 +1,19 @@
|
||||||
package common
|
package common
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/mitchellh/multistep"
|
"github.com/mitchellh/multistep"
|
||||||
commonssh "github.com/mitchellh/packer/common/ssh"
|
commonssh "github.com/mitchellh/packer/common/ssh"
|
||||||
"github.com/mitchellh/packer/communicator/ssh"
|
"github.com/mitchellh/packer/communicator/ssh"
|
||||||
gossh "golang.org/x/crypto/ssh"
|
gossh "golang.org/x/crypto/ssh"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SSHAddress(state multistep.StateBag) (string, error) {
|
func CommHost(state multistep.StateBag) (string, error) {
|
||||||
|
return "127.0.0.1", nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func SSHPort(state multistep.StateBag) (int, error) {
|
||||||
sshHostPort := state.Get("sshHostPort").(uint)
|
sshHostPort := state.Get("sshHostPort").(uint)
|
||||||
return fmt.Sprintf("127.0.0.1:%d", sshHostPort), nil
|
return int(sshHostPort), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func SSHConfigFunc(config SSHConfig) func(multistep.StateBag) (*gossh.ClientConfig, error) {
|
func SSHConfigFunc(config SSHConfig) func(multistep.StateBag) (*gossh.ClientConfig, error) {
|
||||||
|
|
|
@ -274,8 +274,9 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
},
|
},
|
||||||
&communicator.StepConnect{
|
&communicator.StepConnect{
|
||||||
Config: &b.config.SSHConfig.Comm,
|
Config: &b.config.SSHConfig.Comm,
|
||||||
SSHAddress: vboxcommon.SSHAddress,
|
Host: vboxcommon.CommHost,
|
||||||
SSHConfig: vboxcommon.SSHConfigFunc(b.config.SSHConfig),
|
SSHConfig: vboxcommon.SSHConfigFunc(b.config.SSHConfig),
|
||||||
|
SSHPort: vboxcommon.SSHPort,
|
||||||
},
|
},
|
||||||
&vboxcommon.StepUploadVersion{
|
&vboxcommon.StepUploadVersion{
|
||||||
Path: b.config.VBoxVersionFile,
|
Path: b.config.VBoxVersionFile,
|
||||||
|
|
|
@ -103,8 +103,9 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
},
|
},
|
||||||
&communicator.StepConnect{
|
&communicator.StepConnect{
|
||||||
Config: &b.config.SSHConfig.Comm,
|
Config: &b.config.SSHConfig.Comm,
|
||||||
SSHAddress: vboxcommon.SSHAddress,
|
Host: vboxcommon.CommHost,
|
||||||
SSHConfig: vboxcommon.SSHConfigFunc(b.config.SSHConfig),
|
SSHConfig: vboxcommon.SSHConfigFunc(b.config.SSHConfig),
|
||||||
|
SSHPort: vboxcommon.SSHPort,
|
||||||
},
|
},
|
||||||
&vboxcommon.StepUploadVersion{
|
&vboxcommon.StepUploadVersion{
|
||||||
Path: b.config.VBoxVersionFile,
|
Path: b.config.VBoxVersionFile,
|
||||||
|
|
|
@ -29,9 +29,9 @@ type Driver interface {
|
||||||
// Checks if the VMX file at the given path is running.
|
// Checks if the VMX file at the given path is running.
|
||||||
IsRunning(string) (bool, error)
|
IsRunning(string) (bool, error)
|
||||||
|
|
||||||
// SSHAddress returns the SSH address for the VM that is being
|
// CommHost returns the host address for the VM that is being
|
||||||
// managed by this driver.
|
// managed by this driver.
|
||||||
SSHAddress(multistep.StateBag) (string, error)
|
CommHost(multistep.StateBag) (string, error)
|
||||||
|
|
||||||
// Start starts a VM specified by the path to the VMX given.
|
// Start starts a VM specified by the path to the VMX given.
|
||||||
Start(string, bool) error
|
Start(string, bool) error
|
||||||
|
|
|
@ -69,8 +69,8 @@ func (d *Fusion5Driver) IsRunning(vmxPath string) (bool, error) {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Fusion5Driver) SSHAddress(state multistep.StateBag) (string, error) {
|
func (d *Fusion5Driver) CommHost(state multistep.StateBag) (string, error) {
|
||||||
return SSHAddressFunc(d.SSHConfig)(state)
|
return CommHost(d.SSHConfig)(state)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Fusion5Driver) Start(vmxPath string, headless bool) error {
|
func (d *Fusion5Driver) Start(vmxPath string, headless bool) error {
|
||||||
|
|
|
@ -29,10 +29,10 @@ type DriverMock struct {
|
||||||
IsRunningResult bool
|
IsRunningResult bool
|
||||||
IsRunningErr error
|
IsRunningErr error
|
||||||
|
|
||||||
SSHAddressCalled bool
|
CommHostCalled bool
|
||||||
SSHAddressState multistep.StateBag
|
CommHostState multistep.StateBag
|
||||||
SSHAddressResult string
|
CommHostResult string
|
||||||
SSHAddressErr error
|
CommHostErr error
|
||||||
|
|
||||||
StartCalled bool
|
StartCalled bool
|
||||||
StartPath string
|
StartPath string
|
||||||
|
@ -92,10 +92,10 @@ func (d *DriverMock) IsRunning(path string) (bool, error) {
|
||||||
return d.IsRunningResult, d.IsRunningErr
|
return d.IsRunningResult, d.IsRunningErr
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DriverMock) SSHAddress(state multistep.StateBag) (string, error) {
|
func (d *DriverMock) CommHost(state multistep.StateBag) (string, error) {
|
||||||
d.SSHAddressCalled = true
|
d.CommHostCalled = true
|
||||||
d.SSHAddressState = state
|
d.CommHostState = state
|
||||||
return d.SSHAddressResult, d.SSHAddressErr
|
return d.CommHostResult, d.CommHostErr
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DriverMock) Start(path string, headless bool) error {
|
func (d *DriverMock) Start(path string, headless bool) error {
|
||||||
|
|
|
@ -97,8 +97,8 @@ func (d *Player5Driver) IsRunning(vmxPath string) (bool, error) {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Player5Driver) SSHAddress(state multistep.StateBag) (string, error) {
|
func (d *Player5Driver) CommHost(state multistep.StateBag) (string, error) {
|
||||||
return SSHAddressFunc(d.SSHConfig)(state)
|
return CommHost(d.SSHConfig)(state)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Player5Driver) Start(vmxPath string, headless bool) error {
|
func (d *Player5Driver) Start(vmxPath string, headless bool) error {
|
||||||
|
|
|
@ -70,8 +70,8 @@ func (d *Workstation9Driver) IsRunning(vmxPath string) (bool, error) {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Workstation9Driver) SSHAddress(state multistep.StateBag) (string, error) {
|
func (d *Workstation9Driver) CommHost(state multistep.StateBag) (string, error) {
|
||||||
return SSHAddressFunc(d.SSHConfig)(state)
|
return CommHost(d.SSHConfig)(state)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Workstation9Driver) Start(vmxPath string, headless bool) error {
|
func (d *Workstation9Driver) Start(vmxPath string, headless bool) error {
|
||||||
|
|
|
@ -13,13 +13,13 @@ import (
|
||||||
gossh "golang.org/x/crypto/ssh"
|
gossh "golang.org/x/crypto/ssh"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SSHAddressFunc(config *SSHConfig) func(multistep.StateBag) (string, error) {
|
func CommHost(config *SSHConfig) func(multistep.StateBag) (string, error) {
|
||||||
return func(state multistep.StateBag) (string, error) {
|
return func(state multistep.StateBag) (string, error) {
|
||||||
driver := state.Get("driver").(Driver)
|
driver := state.Get("driver").(Driver)
|
||||||
vmxPath := state.Get("vmx_path").(string)
|
vmxPath := state.Get("vmx_path").(string)
|
||||||
|
|
||||||
if config.Comm.SSHHost != "" {
|
if config.Comm.SSHHost != "" {
|
||||||
return fmt.Sprintf("%s:%d", config.Comm.SSHHost, config.Comm.SSHPort), nil
|
return config.Comm.SSHHost, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Println("Lookup up IP information...")
|
log.Println("Lookup up IP information...")
|
||||||
|
@ -62,7 +62,7 @@ func SSHAddressFunc(config *SSHConfig) func(multistep.StateBag) (string, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("Detected IP: %s", ipAddress)
|
log.Printf("Detected IP: %s", ipAddress)
|
||||||
return fmt.Sprintf("%s:%d", ipAddress, config.Comm.SSHPort), nil
|
return ipAddress, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -301,7 +301,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
},
|
},
|
||||||
&communicator.StepConnect{
|
&communicator.StepConnect{
|
||||||
Config: &b.config.SSHConfig.Comm,
|
Config: &b.config.SSHConfig.Comm,
|
||||||
SSHAddress: driver.SSHAddress,
|
Host: driver.CommHost,
|
||||||
SSHConfig: vmwcommon.SSHConfigFunc(&b.config.SSHConfig),
|
SSHConfig: vmwcommon.SSHConfigFunc(&b.config.SSHConfig),
|
||||||
},
|
},
|
||||||
&vmwcommon.StepUploadTools{
|
&vmwcommon.StepUploadTools{
|
||||||
|
|
|
@ -218,7 +218,7 @@ func (d *ESX5Driver) VNCAddress(portMin, portMax uint) (string, uint, error) {
|
||||||
return d.Host, vncPort, nil
|
return d.Host, vncPort, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *ESX5Driver) SSHAddress(state multistep.StateBag) (string, error) {
|
func (d *ESX5Driver) CommHost(state multistep.StateBag) (string, error) {
|
||||||
config := state.Get("config").(*Config)
|
config := state.Get("config").(*Config)
|
||||||
|
|
||||||
if address, ok := state.GetOk("vm_address"); ok {
|
if address, ok := state.GetOk("vm_address"); ok {
|
||||||
|
@ -253,7 +253,7 @@ func (d *ESX5Driver) SSHAddress(state multistep.StateBag) (string, error) {
|
||||||
return "", errors.New("VM network port found, but no IP address")
|
return "", errors.New("VM network port found, but no IP address")
|
||||||
}
|
}
|
||||||
|
|
||||||
address := fmt.Sprintf("%s:%d", record["IPAddress"], config.Comm.SSHPort)
|
address := record["IPAddress"]
|
||||||
state.Put("vm_address", address)
|
state.Put("vm_address", address)
|
||||||
return address, nil
|
return address, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,7 +93,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
},
|
},
|
||||||
&communicator.StepConnect{
|
&communicator.StepConnect{
|
||||||
Config: &b.config.SSHConfig.Comm,
|
Config: &b.config.SSHConfig.Comm,
|
||||||
SSHAddress: driver.SSHAddress,
|
Host: driver.CommHost,
|
||||||
SSHConfig: vmwcommon.SSHConfigFunc(&b.config.SSHConfig),
|
SSHConfig: vmwcommon.SSHConfigFunc(&b.config.SSHConfig),
|
||||||
},
|
},
|
||||||
&vmwcommon.StepUploadTools{
|
&vmwcommon.StepUploadTools{
|
||||||
|
|
|
@ -15,15 +15,16 @@ type StepConnect struct {
|
||||||
// Config is the communicator config struct
|
// Config is the communicator config struct
|
||||||
Config *Config
|
Config *Config
|
||||||
|
|
||||||
|
// Host should return a host that can be connected to for communicator
|
||||||
|
// connections.
|
||||||
|
Host func(multistep.StateBag) (string, error)
|
||||||
|
|
||||||
// The fields below are callbacks to assist with connecting to SSH.
|
// The fields below are callbacks to assist with connecting to SSH.
|
||||||
//
|
//
|
||||||
// SSHAddress should return the default host to connect to for SSH.
|
|
||||||
// This is only called if ssh_host isn't specified in the config.
|
|
||||||
//
|
|
||||||
// SSHConfig should return the default configuration for
|
// SSHConfig should return the default configuration for
|
||||||
// connecting via SSH.
|
// connecting via SSH.
|
||||||
SSHAddress func(multistep.StateBag) (string, error)
|
|
||||||
SSHConfig func(multistep.StateBag) (*gossh.ClientConfig, error)
|
SSHConfig func(multistep.StateBag) (*gossh.ClientConfig, error)
|
||||||
|
SSHPort func(multistep.StateBag) (int, error)
|
||||||
|
|
||||||
substep multistep.Step
|
substep multistep.Step
|
||||||
}
|
}
|
||||||
|
@ -33,8 +34,9 @@ func (s *StepConnect) Run(state multistep.StateBag) multistep.StepAction {
|
||||||
"none": nil,
|
"none": nil,
|
||||||
"ssh": &StepConnectSSH{
|
"ssh": &StepConnectSSH{
|
||||||
Config: s.Config,
|
Config: s.Config,
|
||||||
SSHAddress: s.SSHAddress,
|
Host: s.Host,
|
||||||
SSHConfig: s.SSHConfig,
|
SSHConfig: s.SSHConfig,
|
||||||
|
SSHPort: s.SSHPort,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,9 @@ import (
|
||||||
type StepConnectSSH struct {
|
type StepConnectSSH struct {
|
||||||
// All the fields below are documented on StepConnect
|
// All the fields below are documented on StepConnect
|
||||||
Config *Config
|
Config *Config
|
||||||
SSHAddress func(multistep.StateBag) (string, error)
|
Host func(multistep.StateBag) (string, error)
|
||||||
SSHConfig func(multistep.StateBag) (*gossh.ClientConfig, error)
|
SSHConfig func(multistep.StateBag) (*gossh.ClientConfig, error)
|
||||||
|
SSHPort func(multistep.StateBag) (int, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *StepConnectSSH) Run(state multistep.StateBag) multistep.StepAction {
|
func (s *StepConnectSSH) Run(state multistep.StateBag) multistep.StepAction {
|
||||||
|
@ -95,11 +96,19 @@ func (s *StepConnectSSH) waitForSSH(state multistep.StateBag, cancel <-chan stru
|
||||||
first = false
|
first = false
|
||||||
|
|
||||||
// First we request the TCP connection information
|
// First we request the TCP connection information
|
||||||
address, err := s.SSHAddress(state)
|
host, err := s.Host(state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("[DEBUG] Error getting SSH address: %s", err)
|
log.Printf("[DEBUG] Error getting SSH address: %s", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
port := s.Config.SSHPort
|
||||||
|
if s.SSHPort != nil {
|
||||||
|
port, err = s.SSHPort(state)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[DEBUG] Error getting SSH port: %s", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Retrieve the SSH configuration
|
// Retrieve the SSH configuration
|
||||||
sshConfig, err := s.SSHConfig(state)
|
sshConfig, err := s.SSHConfig(state)
|
||||||
|
@ -108,6 +117,8 @@ func (s *StepConnectSSH) waitForSSH(state multistep.StateBag, cancel <-chan stru
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
address := fmt.Sprintf("%s:%d", host, port)
|
||||||
|
|
||||||
// Attempt to connect to SSH port
|
// Attempt to connect to SSH port
|
||||||
connFunc := ssh.ConnectFunc("tcp", address)
|
connFunc := ssh.ConnectFunc("tcp", address)
|
||||||
nc, err := connFunc()
|
nc, err := connFunc()
|
||||||
|
|
Loading…
Reference in New Issue