mirror of
https://github.com/hashicorp/packer.git
synced 2026-10-15 10:42:04 -04:00
The null builder is not really a bulider, it just setups a SSH connection and runs the provisioners. It can be used to debug provisioners without incurring high wait times. It does not create any kind of image or artifact.
58 lines
1.6 KiB
Go
58 lines
1.6 KiB
Go
package null
|
|
|
|
import (
|
|
gossh "code.google.com/p/go.crypto/ssh"
|
|
"fmt"
|
|
"github.com/mitchellh/multistep"
|
|
"github.com/mitchellh/packer/communicator/ssh"
|
|
"io/ioutil"
|
|
)
|
|
|
|
// SSHAddress returns a function that can be given to the SSH communicator
|
|
// for determining the SSH address
|
|
func SSHAddress(host string, port int) func(multistep.StateBag) (string, error) {
|
|
return func(state multistep.StateBag) (string, error) {
|
|
return fmt.Sprintf("%s:%d", host, port), nil
|
|
}
|
|
}
|
|
|
|
// SSHConfig returns a function that can be used for the SSH communicator
|
|
// config for connecting to the specified host via SSH
|
|
// private_key_file has precedence over password!
|
|
func SSHConfig(username string, password string, privateKeyFile string) func(multistep.StateBag) (*gossh.ClientConfig, error) {
|
|
return func(state multistep.StateBag) (*gossh.ClientConfig, error) {
|
|
|
|
if privateKeyFile != "" {
|
|
// key based auth
|
|
|
|
bytes, err := ioutil.ReadFile(privateKeyFile)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Error setting up SSH config: %s", err)
|
|
}
|
|
privateKey := string(bytes)
|
|
|
|
keyring := new(ssh.SimpleKeychain)
|
|
if err := keyring.AddPEMKey(privateKey); err != nil {
|
|
return nil, fmt.Errorf("Error setting up SSH config: %s", err)
|
|
}
|
|
|
|
return &gossh.ClientConfig{
|
|
User: username,
|
|
Auth: []gossh.ClientAuth{
|
|
gossh.ClientAuthKeyring(keyring),
|
|
},
|
|
}, nil
|
|
} else {
|
|
// password based auth
|
|
|
|
return &gossh.ClientConfig{
|
|
User: username,
|
|
Auth: []gossh.ClientAuth{
|
|
gossh.ClientAuthPassword(ssh.Password(password)),
|
|
gossh.ClientAuthKeyboardInteractive(ssh.PasswordKeyboardInteractive(password)),
|
|
},
|
|
}, nil
|
|
}
|
|
}
|
|
}
|