45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package communicator
|
|
|
|
import (
|
|
"github.com/mitchellh/multistep"
|
|
gossh "golang.org/x/crypto/ssh"
|
|
)
|
|
|
|
// StepConnect is a multistep Step implementation that connects to
|
|
// the proper communicator and stores it in the "communicator" key in the
|
|
// state bag.
|
|
type StepConnect struct {
|
|
// Config is the communicator config struct
|
|
Config *Config
|
|
|
|
// 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
|
|
// connecting via SSH.
|
|
SSHAddress func(multistep.StateBag) (string, error)
|
|
SSHConfig func(multistep.StateBag) (*gossh.ClientConfig, error)
|
|
|
|
substep multistep.Step
|
|
}
|
|
|
|
func (s *StepConnect) Run(state multistep.StateBag) multistep.StepAction {
|
|
// Eventually we might switch between multiple of these depending
|
|
// on the communicator type.
|
|
s.substep = &StepConnectSSH{
|
|
Config: s.Config,
|
|
SSHAddress: s.SSHAddress,
|
|
SSHConfig: s.SSHConfig,
|
|
}
|
|
|
|
return s.substep.Run(state)
|
|
}
|
|
|
|
func (s *StepConnect) Cleanup(state multistep.StateBag) {
|
|
if s.substep != nil {
|
|
s.substep.Cleanup(state)
|
|
}
|
|
}
|