add blackbox tests for ansible provisioner

Add bats tests for the ansible provisioner. The tests exercise all
options and the minimal set of options of the provisioner.

Fix the bats tests for the googlecompute builder.
This commit is contained in:
Billie H. Cleek 2016-07-29 23:12:41 -07:00
parent b7954bc5d9
commit d745c579f4
8 changed files with 136 additions and 9 deletions

View File

@ -7,28 +7,26 @@ load test_helper
fixtures builder-googlecompute
# Required parameters
: ${GC_BUCKET_NAME:?}
: ${GC_ACCOUNT_FILE:?}
: ${GC_PROJECT_ID:?}
command -v gcutil >/dev/null 2>&1 || {
echo "'gcutil' must be installed" >&2
command -v gcloud >/dev/null 2>&1 || {
echo "'gcloud' must be installed" >&2
exit 1
}
USER_VARS="-var bucket_name=${GC_BUCKET_NAME}"
USER_VARS="${USER_VARS} -var account_file=${GC_ACCOUNT_FILE}"
USER_VARS="${USER_VARS} -var project_id=${GC_PROJECT_ID}"
# This tests if GCE has an image that contains the given parameter.
gc_has_image() {
gcutil --format=names --project=${GC_PROJECT_ID} listimages \
gcloud compute --format='table[no-heading](name)' --project=${GC_PROJECT_ID} images list \
| grep $1 | wc -l
}
teardown() {
gcutil --format=names --project=${GC_PROJECT_ID} listimages \
gcloud compute --format='table[no-heading](name)' --project=${GC_PROJECT_ID} images list \
| grep packerbats \
| xargs -n1 gcutil --project=${GC_PROJECT_ID} deleteimage --force
| xargs -n1 gcloud compute --project=${GC_PROJECT_ID} images delete
}
@test "googlecompute: build minimal.json" {

View File

@ -1,13 +1,11 @@
{
"variables": {
"bucket_name": null,
"account_file": null,
"project_id": null
},
"builders": [{
"type": "googlecompute",
"bucket_name": "{{user `bucket_name`}}",
"account_file": "{{user `account_file`}}",
"project_id": "{{user `project_id`}}",

View File

@ -0,0 +1,39 @@
{
"variables": {},
"provisioners": [
{
"type": "shell-local",
"command": "echo 'TODO(bc): write the public key to $HOME/.ssh/known_hosts and stop using ANSIBLE_HOST_KEY_CHECKING=False'"
}, {
"type": "shell",
"inline": [
"apt-get update",
"apt-get -y install python openssh-sftp-server",
"ls -l /usr/lib"
]
}, {
"type": "ansible",
"playbook_file": "./playbook.yml",
"extra_arguments": [
"-vvvv", "--private-key", "ansible-test-id"
],
"sftp_command": "/usr/lib/sftp-server -e -l INFO",
"ansible_env_vars": ["PACKER_ANSIBLE_TEST", "1", "ANSIBLE_HOST_KEY_CHECKING", "False"],
"groups": ["PACKER_TEST"],
"empty_groups": ["PACKER_EMPTY_GROUP"],
"host_alias": "packer-test",
"user": "packer",
"local_port": 2222,
"ssh_host_key_file": "ansible-server.key",
"ssh_authorized_key_file": "ansible-test-id.pub"
}
],
"builders": [{
"type": "googlecompute",
"account_file": "{{user `account_file`}}",
"project_id": "{{user `project_id`}}",
"image_name": "packerbats-alloptions-{{timestamp}}",
"source_image": "debian-7-wheezy-v20141108",
"zone": "us-central1-a"
}]
}

View File

@ -0,0 +1 @@
This is a file

Binary file not shown.

View File

@ -0,0 +1,20 @@
{
"variables": {},
"provisioners": [
{
"type": "ansible",
"playbook_file": "./playbook.yml"
}
],
"builders": [
{
"type": "googlecompute",
"account_file": "{{user `account_file`}}",
"project_id": "{{user `project_id`}}",
"image_name": "packerbats-minimal-{{timestamp}}",
"source_image": "debian-7-wheezy-v20141108",
"zone": "us-central1-a"
}
]
}

View File

@ -0,0 +1,13 @@
---
- hosts: default
gather_facts: no
tasks:
- raw: touch /root/ansible-raw-test
- raw: date
- command: echo "the command module"
- command: mkdir /tmp/remote-dir
args:
creates: /tmp/remote-dir
- copy: src=dir/file.txt dest=/tmp/remote-dir/file.txt
- fetch: src=/tmp/remote-dir/file.txt dest=fetched-dir validate=yes fail_on_missing=yes
- copy: src=largish-file.txt dest=/tmp/largish-file.txt

58
test/provisioner_ansible.bats Executable file
View File

@ -0,0 +1,58 @@
#!/usr/bin/env bats
#
# This tests the ansible provisioner on Google Cloud Provider (i.e.
# googlecompute). The teardown function will delete any images with the text
# "packerbats" within the name.
load test_helper
fixtures provisioner-ansible
# Required parameters
: ${GC_ACCOUNT_FILE:?}
: ${GC_PROJECT_ID:?}
command -v gcloud >/dev/null 2>&1 || {
echo "'gcloud' must be installed" >&2
exit 1
}
USER_VARS="${USER_VARS} -var account_file=${GC_ACCOUNT_FILE}"
USER_VARS="${USER_VARS} -var project_id=${GC_PROJECT_ID}"
# This tests if GCE has an image that contains the given parameter.
gc_has_image() {
gcloud compute --format='table[no-heading](name)' --project=${GC_PROJECT_ID} images list \
| grep $1 | wc -l
}
setup(){
rm -f $FIXTURE_ROOT/ansible-test-id
rm -f $FIXTURE_ROOT/ansible-server.key
ssh-keygen -N "" -f $FIXTURE_ROOT/ansible-test-id
ssh-keygen -N "" -f $FIXTURE_ROOT/ansible-server.key
}
teardown() {
gcloud compute --format='table[no-heading](name)' --project=${GC_PROJECT_ID} images list \
| grep packerbats \
| xargs -n1 gcloud compute --project=${GC_PROJECT_ID} images delete
rm -f $FIXTURE_ROOT/ansible-test-id
rm -f $FIXTURE_ROOT/ansible-test-id.pub
rm -f $FIXTURE_ROOT/ansible-server.key
rm -f $FIXTURE_ROOT/ansible-server.key.pub
rm -rf $FIXTURE_ROOT/fetched-dir
}
@test "ansible provisioner: build minimal.json" {
cd $FIXTURE_ROOT
run packer build ${USER_VARS} $FIXTURE_ROOT/minimal.json
[ "$status" -eq 0 ]
[ "$(gc_has_image "packerbats-minimal")" -eq 1 ]
}
@test "ansible provisioner: build all_options.json" {
cd $FIXTURE_ROOT
run packer build ${USER_VARS} $FIXTURE_ROOT/all_options.json
[ "$status" -eq 0 ]
[ "$(gc_has_image "packerbats-alloptions")" -eq 1 ]
}