2015-03-10 00:11:57 -04:00
|
|
|
package ansible
|
|
|
|
|
|
|
|
import (
|
|
|
|
"crypto/rand"
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/mitchellh/packer/packer"
|
|
|
|
)
|
|
|
|
|
|
|
|
func testConfig() map[string]interface{} {
|
|
|
|
m := make(map[string]interface{})
|
|
|
|
return m
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestProvisioner_Impl(t *testing.T) {
|
|
|
|
var raw interface{}
|
|
|
|
raw = &Provisioner{}
|
|
|
|
if _, ok := raw.(packer.Provisioner); !ok {
|
|
|
|
t.Fatalf("must be a Provisioner")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestProvisionerPrepare_Defaults(t *testing.T) {
|
|
|
|
var p Provisioner
|
|
|
|
config := testConfig()
|
|
|
|
|
|
|
|
err := p.Prepare(config)
|
|
|
|
if err == nil {
|
|
|
|
t.Fatalf("should have error")
|
|
|
|
}
|
|
|
|
|
|
|
|
hostkey_file, err := ioutil.TempFile("", "hostkey")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(hostkey_file.Name())
|
|
|
|
|
|
|
|
publickey_file, err := ioutil.TempFile("", "publickey")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(publickey_file.Name())
|
|
|
|
|
|
|
|
playbook_file, err := ioutil.TempFile("", "playbook")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(playbook_file.Name())
|
|
|
|
|
2015-03-10 01:25:45 -04:00
|
|
|
config["ssh_host_key_file"] = hostkey_file.Name()
|
2015-03-10 00:11:57 -04:00
|
|
|
config["ssh_authorized_key_file"] = publickey_file.Name()
|
|
|
|
config["playbook_file"] = playbook_file.Name()
|
|
|
|
err = p.Prepare(config)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestProvisionerPrepare_PlaybookFile(t *testing.T) {
|
|
|
|
var p Provisioner
|
|
|
|
config := testConfig()
|
|
|
|
|
|
|
|
hostkey_file, err := ioutil.TempFile("", "hostkey")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(hostkey_file.Name())
|
|
|
|
|
|
|
|
publickey_file, err := ioutil.TempFile("", "publickey")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(publickey_file.Name())
|
|
|
|
|
2015-03-10 01:25:45 -04:00
|
|
|
config["ssh_host_key_file"] = hostkey_file.Name()
|
2015-03-10 00:11:57 -04:00
|
|
|
config["ssh_authorized_key_file"] = publickey_file.Name()
|
|
|
|
|
|
|
|
err = p.Prepare(config)
|
|
|
|
if err == nil {
|
|
|
|
t.Fatal("should have error")
|
|
|
|
}
|
|
|
|
|
|
|
|
playbook_file, err := ioutil.TempFile("", "playbook")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(playbook_file.Name())
|
|
|
|
|
|
|
|
config["playbook_file"] = playbook_file.Name()
|
|
|
|
err = p.Prepare(config)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestProvisionerPrepare_HostKeyFile(t *testing.T) {
|
|
|
|
var p Provisioner
|
|
|
|
config := testConfig()
|
|
|
|
|
|
|
|
publickey_file, err := ioutil.TempFile("", "publickey")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(publickey_file.Name())
|
|
|
|
|
|
|
|
playbook_file, err := ioutil.TempFile("", "playbook")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(playbook_file.Name())
|
|
|
|
|
|
|
|
filename := make([]byte, 10)
|
|
|
|
n, err := io.ReadFull(rand.Reader, filename)
|
|
|
|
if n != len(filename) || err != nil {
|
|
|
|
t.Fatal("could not create random file name")
|
|
|
|
}
|
|
|
|
|
2015-03-10 01:25:45 -04:00
|
|
|
config["ssh_host_key_file"] = fmt.Sprintf("%x", filename)
|
2015-03-10 00:11:57 -04:00
|
|
|
config["ssh_authorized_key_file"] = publickey_file.Name()
|
|
|
|
config["playbook_file"] = playbook_file.Name()
|
|
|
|
|
|
|
|
err = p.Prepare(config)
|
|
|
|
if err == nil {
|
2015-03-10 01:25:45 -04:00
|
|
|
t.Fatal("should error if ssh_host_key_file does not exist")
|
2015-03-10 00:11:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
hostkey_file, err := ioutil.TempFile("", "hostkey")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(hostkey_file.Name())
|
|
|
|
|
2015-03-10 01:25:45 -04:00
|
|
|
config["ssh_host_key_file"] = hostkey_file.Name()
|
2015-03-10 00:11:57 -04:00
|
|
|
err = p.Prepare(config)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestProvisionerPrepare_AuthorizedKeyFile(t *testing.T) {
|
|
|
|
var p Provisioner
|
|
|
|
config := testConfig()
|
|
|
|
|
|
|
|
hostkey_file, err := ioutil.TempFile("", "hostkey")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(hostkey_file.Name())
|
|
|
|
|
|
|
|
playbook_file, err := ioutil.TempFile("", "playbook")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(playbook_file.Name())
|
|
|
|
|
2016-02-06 21:22:38 -05:00
|
|
|
filename := make([]byte, 10)
|
|
|
|
n, err := io.ReadFull(rand.Reader, filename)
|
|
|
|
if n != len(filename) || err != nil {
|
|
|
|
t.Fatal("could not create random file name")
|
|
|
|
}
|
|
|
|
|
2015-03-10 01:25:45 -04:00
|
|
|
config["ssh_host_key_file"] = hostkey_file.Name()
|
2015-03-10 00:11:57 -04:00
|
|
|
config["playbook_file"] = playbook_file.Name()
|
2016-02-06 21:22:38 -05:00
|
|
|
config["ssh_authorized_key_file"] = fmt.Sprintf("%x", filename)
|
2015-03-10 00:11:57 -04:00
|
|
|
|
|
|
|
err = p.Prepare(config)
|
|
|
|
if err == nil {
|
2016-02-06 21:22:38 -05:00
|
|
|
t.Errorf("should error if ssh_authorized_key_file does not exist")
|
2015-03-10 00:11:57 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
publickey_file, err := ioutil.TempFile("", "publickey")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(publickey_file.Name())
|
|
|
|
|
|
|
|
config["ssh_authorized_key_file"] = publickey_file.Name()
|
|
|
|
err = p.Prepare(config)
|
|
|
|
if err != nil {
|
2016-02-06 21:22:38 -05:00
|
|
|
t.Errorf("err: %s", err)
|
2015-03-10 00:11:57 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestProvisionerPrepare_LocalPort(t *testing.T) {
|
|
|
|
var p Provisioner
|
|
|
|
config := testConfig()
|
|
|
|
|
|
|
|
hostkey_file, err := ioutil.TempFile("", "hostkey")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(hostkey_file.Name())
|
|
|
|
|
|
|
|
publickey_file, err := ioutil.TempFile("", "publickey")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(publickey_file.Name())
|
|
|
|
|
|
|
|
playbook_file, err := ioutil.TempFile("", "playbook")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
defer os.Remove(playbook_file.Name())
|
|
|
|
|
2015-03-10 01:25:45 -04:00
|
|
|
config["ssh_host_key_file"] = hostkey_file.Name()
|
2015-03-10 00:11:57 -04:00
|
|
|
config["ssh_authorized_key_file"] = publickey_file.Name()
|
|
|
|
config["playbook_file"] = playbook_file.Name()
|
|
|
|
|
|
|
|
config["local_port"] = "65537"
|
|
|
|
err = p.Prepare(config)
|
|
|
|
if err == nil {
|
|
|
|
t.Fatal("should have error")
|
|
|
|
}
|
|
|
|
|
|
|
|
config["local_port"] = "22222"
|
|
|
|
err = p.Prepare(config)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("err: %s", err)
|
|
|
|
}
|
|
|
|
}
|