builder/null: adopt helper/communicator
This commit is contained in:
parent
4b3ed5d7e2
commit
d545431f9b
|
@ -1,11 +1,12 @@
|
||||||
package null
|
package null
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
"github.com/mitchellh/multistep"
|
"github.com/mitchellh/multistep"
|
||||||
"github.com/mitchellh/packer/common"
|
"github.com/mitchellh/packer/common"
|
||||||
|
"github.com/mitchellh/packer/helper/communicator"
|
||||||
"github.com/mitchellh/packer/packer"
|
"github.com/mitchellh/packer/packer"
|
||||||
"log"
|
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const BuilderId = "fnoeding.null"
|
const BuilderId = "fnoeding.null"
|
||||||
|
@ -27,10 +28,14 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) {
|
||||||
|
|
||||||
func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packer.Artifact, error) {
|
func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packer.Artifact, error) {
|
||||||
steps := []multistep.Step{
|
steps := []multistep.Step{
|
||||||
&common.StepConnectSSH{
|
&communicator.StepConnect{
|
||||||
SSHAddress: SSHAddress(b.config.Host, b.config.Port),
|
Config: &b.config.CommConfig,
|
||||||
SSHConfig: SSHConfig(b.config.SSHUsername, b.config.SSHPassword, b.config.SSHPrivateKeyFile),
|
SSHAddress: SSHAddress(
|
||||||
SSHWaitTimeout: 1 * time.Minute,
|
b.config.CommConfig.SSHHost, b.config.CommConfig.SSHPort),
|
||||||
|
SSHConfig: SSHConfig(
|
||||||
|
b.config.CommConfig.SSHUsername,
|
||||||
|
b.config.CommConfig.SSHPassword,
|
||||||
|
b.config.CommConfig.SSHPrivateKey),
|
||||||
},
|
},
|
||||||
&common.StepProvision{},
|
&common.StepProvision{},
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/mitchellh/packer/common"
|
"github.com/mitchellh/packer/common"
|
||||||
|
"github.com/mitchellh/packer/helper/communicator"
|
||||||
"github.com/mitchellh/packer/helper/config"
|
"github.com/mitchellh/packer/helper/config"
|
||||||
"github.com/mitchellh/packer/packer"
|
"github.com/mitchellh/packer/packer"
|
||||||
"github.com/mitchellh/packer/template/interpolate"
|
"github.com/mitchellh/packer/template/interpolate"
|
||||||
|
@ -12,49 +13,40 @@ import (
|
||||||
type Config struct {
|
type Config struct {
|
||||||
common.PackerConfig `mapstructure:",squash"`
|
common.PackerConfig `mapstructure:",squash"`
|
||||||
|
|
||||||
Host string `mapstructure:"host"`
|
CommConfig communicator.Config `mapstructure:",squash"`
|
||||||
Port int `mapstructure:"port"`
|
|
||||||
SSHUsername string `mapstructure:"ssh_username"`
|
|
||||||
SSHPassword string `mapstructure:"ssh_password"`
|
|
||||||
SSHPrivateKeyFile string `mapstructure:"ssh_private_key_file"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewConfig(raws ...interface{}) (*Config, []string, error) {
|
func NewConfig(raws ...interface{}) (*Config, []string, error) {
|
||||||
var c Config
|
var c Config
|
||||||
|
|
||||||
err := config.Decode(&c, &config.DecodeOpts{
|
err := config.Decode(&c, &config.DecodeOpts{
|
||||||
Interpolate: true,
|
Interpolate: true,
|
||||||
InterpolateFilter: &interpolate.RenderFilter{
|
InterpolateFilter: &interpolate.RenderFilter{},
|
||||||
Exclude: []string{
|
|
||||||
"run_command",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}, raws...)
|
}, raws...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Port == 0 {
|
|
||||||
c.Port = 22
|
|
||||||
}
|
|
||||||
|
|
||||||
var errs *packer.MultiError
|
var errs *packer.MultiError
|
||||||
if c.Host == "" {
|
if es := c.CommConfig.Prepare(nil); len(es) > 0 {
|
||||||
|
errs = packer.MultiErrorAppend(errs, es...)
|
||||||
|
}
|
||||||
|
if c.CommConfig.SSHHost == "" {
|
||||||
errs = packer.MultiErrorAppend(errs,
|
errs = packer.MultiErrorAppend(errs,
|
||||||
fmt.Errorf("host must be specified"))
|
fmt.Errorf("host must be specified"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.SSHUsername == "" {
|
if c.CommConfig.SSHUsername == "" {
|
||||||
errs = packer.MultiErrorAppend(errs,
|
errs = packer.MultiErrorAppend(errs,
|
||||||
fmt.Errorf("ssh_username must be specified"))
|
fmt.Errorf("ssh_username must be specified"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.SSHPassword == "" && c.SSHPrivateKeyFile == "" {
|
if c.CommConfig.SSHPassword == "" && c.CommConfig.SSHPrivateKey == "" {
|
||||||
errs = packer.MultiErrorAppend(errs,
|
errs = packer.MultiErrorAppend(errs,
|
||||||
fmt.Errorf("one of ssh_password and ssh_private_key_file must be specified"))
|
fmt.Errorf("one of ssh_password and ssh_private_key_file must be specified"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.SSHPassword != "" && c.SSHPrivateKeyFile != "" {
|
if c.CommConfig.SSHPassword != "" && c.CommConfig.SSHPrivateKey != "" {
|
||||||
errs = packer.MultiErrorAppend(errs,
|
errs = packer.MultiErrorAppend(errs,
|
||||||
fmt.Errorf("only one of ssh_password and ssh_private_key_file must be specified"))
|
fmt.Errorf("only one of ssh_password and ssh_private_key_file must be specified"))
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ import (
|
||||||
|
|
||||||
func testConfig() map[string]interface{} {
|
func testConfig() map[string]interface{} {
|
||||||
return map[string]interface{}{
|
return map[string]interface{}{
|
||||||
"host": "foo",
|
"ssh_host": "foo",
|
||||||
"ssh_username": "bar",
|
"ssh_username": "bar",
|
||||||
"ssh_password": "baz",
|
"ssh_password": "baz",
|
||||||
}
|
}
|
||||||
|
@ -48,8 +48,8 @@ func TestConfigPrepare_port(t *testing.T) {
|
||||||
// default port should be 22
|
// default port should be 22
|
||||||
delete(raw, "port")
|
delete(raw, "port")
|
||||||
c, warns, errs := NewConfig(raw)
|
c, warns, errs := NewConfig(raw)
|
||||||
if c.Port != 22 {
|
if c.CommConfig.SSHPort != 22 {
|
||||||
t.Fatalf("bad: port should default to 22, not %d", c.Port)
|
t.Fatalf("bad: port should default to 22, not %d", c.CommConfig.SSHPort)
|
||||||
}
|
}
|
||||||
testConfigOk(t, warns, errs)
|
testConfigOk(t, warns, errs)
|
||||||
}
|
}
|
||||||
|
@ -58,12 +58,12 @@ func TestConfigPrepare_host(t *testing.T) {
|
||||||
raw := testConfig()
|
raw := testConfig()
|
||||||
|
|
||||||
// No host
|
// No host
|
||||||
delete(raw, "host")
|
delete(raw, "ssh_host")
|
||||||
_, warns, errs := NewConfig(raw)
|
_, warns, errs := NewConfig(raw)
|
||||||
testConfigErr(t, warns, errs)
|
testConfigErr(t, warns, errs)
|
||||||
|
|
||||||
// Good host
|
// Good host
|
||||||
raw["host"] = "good"
|
raw["ssh_host"] = "good"
|
||||||
_, warns, errs = NewConfig(raw)
|
_, warns, errs = NewConfig(raw)
|
||||||
testConfigOk(t, warns, errs)
|
testConfigOk(t, warns, errs)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue