mirror of
https://github.com/hashicorp/packer.git
synced 2026-09-18 22:11:39 -04:00
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:
@@ -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`}}",
|
||||
|
||||
|
||||
@@ -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"
|
||||
}]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
This is a file
|
||||
Binary file not shown.
+20
@@ -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
@@ -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
|
||||
Executable
+58
@@ -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 ]
|
||||
}
|
||||
Reference in New Issue
Block a user