diff --git a/website/source/docs/provisioners/ansible.html.md.erb b/website/source/docs/provisioners/ansible.html.md.erb index 48bbc1afd..be33fbf13 100644 --- a/website/source/docs/provisioners/ansible.html.md.erb +++ b/website/source/docs/provisioners/ansible.html.md.erb @@ -70,7 +70,9 @@ Optional Parameters: ``` - `command` (string) - The command to invoke ansible. Defaults to - `ansible-playbook`. + `ansible-playbook`. If you would like to provide a more complex command, + for example, something that sets up a virtual environment before calling + ansible, take a look at the ansible wrapper guide below for inspiration. - `empty_groups` (array of strings) - The groups which should be present in inventory file but remain empty. @@ -354,3 +356,32 @@ $ ssh-add -D We recommend against running Packer as root; if you do then you won't be able to successfully run your ansible playbook as root; `become: yes` will fail. + +### Using a wrapping script for your ansible call + +Sometimes, you may have extra setup that needs to be called as part of your +ansible run. The easiest way to do this is by writing a small bash script and +using that bash script in your "command" in place of the default +"ansible-playbook". For example, you may need to launch a Python virtualenv +before calling ansible. To do this, you'd want to create a bash script like + +``` sh +#!/bin/bash +source /tmp/venv/bin/activate && ANSIBLE_FORCE_COLOR=1 PYTHONUNBUFFERED=1 /tmp/venv/bin/ansible-playbook "$@" +``` + +The ansible provisioner template remains very simple. For example: + +``` json + { + "type": "ansible", + "command": "/Path/To/call_ansible.sh", + "playbook_file": "./playbook.yml" + } +``` + +Note that we're calling ansible-playbook at the end of this command and passing +all command line arguments through into this call; this is necessary for +making sure that --extra-vars and other important ansible arguments get set. +Note the quoting around the bash array, too; if you don't use quotes, any +arguments with spaces will not be read properly.