Merge pull request #3765 from bhcleek/provisioner-ansible-tests
add blackbox tests for ansible provisioner
This commit is contained in:
commit
b82e6df775
@ -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" {
|
||||
|
@ -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`}}",
|
||||
|
||||
|
39
test/fixtures/provisioner-ansible/all_options.json
vendored
Normal file
39
test/fixtures/provisioner-ansible/all_options.json
vendored
Normal 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"
|
||||
}]
|
||||
}
|
1
test/fixtures/provisioner-ansible/dir/file.txt
vendored
Normal file
1
test/fixtures/provisioner-ansible/dir/file.txt
vendored
Normal file
@ -0,0 +1 @@
|
||||
This is a file
|
BIN
test/fixtures/provisioner-ansible/largish-file.txt
vendored
Normal file
BIN
test/fixtures/provisioner-ansible/largish-file.txt
vendored
Normal file
Binary file not shown.
20
test/fixtures/provisioner-ansible/minimal.json
vendored
Normal file
20
test/fixtures/provisioner-ansible/minimal.json
vendored
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
13
test/fixtures/provisioner-ansible/playbook.yml
vendored
Normal file
13
test/fixtures/provisioner-ansible/playbook.yml
vendored
Normal 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
58
test/provisioner_ansible.bats
Executable 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 ]
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user