update ansible provisoner docs to include hcl

pull/9682/head
Megan Marsh 6 years ago
parent e0af769ffb
commit fe7f529862

@ -27,15 +27,11 @@ DigitalOcean. Replace the mock `api_token` value with your own.
Example Packer template:
<Tabs>
<Tab heading="JSON">
```json
{
"provisioners": [
{
"type": "ansible",
"playbook_file": "./playbook.yml"
}
],
"builders": [
{
"type": "digitalocean",
@ -43,10 +39,39 @@ Example Packer template:
"image": "ubuntu-14-04-x64",
"region": "sfo1"
}
],
"provisioners": [
{
"type": "ansible",
"playbook_file": "./playbook.yml"
}
]
}
```
</Tab>
<Tab heading="HCL2">
```hcl
source "digitalocean" "example"{
api_token = "6a561151587389c7cf8faa2d83e94150a4202da0e2bad34dd2bf236018ffaeeb"
image = "ubuntu-14-04-x64"
region = "sfo1"
}
build {
sources = [
"source.digitalocean.example",
]
provisioner {
"playbook_file": "./playbook.yml"
}
}
```
</Tab>
</Tabs>
Example playbook:
```yaml
@ -102,10 +127,23 @@ commonly useful Ansible variables:
To debug underlying issues with Ansible, add `"-vvvv"` to `"extra_arguments"`
to enable verbose logging.
<Tabs>
<Tab heading="JSON">
```json
"extra_arguments": [ "-vvvv" ]
```
</Tab>
<Tab heading="HCL2">
```hcl
extra_arguments = [ "-vvvv" ]
```
</Tab>
</Tabs>
## Limitations
### Redhat / CentOS
@ -123,6 +161,9 @@ Redhat / CentOS builds have been known to fail with the following error due to
Building within a chroot (e.g. `amazon-chroot`) requires changing the Ansible
connection to chroot and running Ansible as root/sudo.
<Tabs>
<Tab heading="JSON">
```json
{
"builders": [
@ -138,7 +179,7 @@ connection to chroot and running Ansible as root/sudo.
"type": "ansible",
"extra_arguments": [
"--connection=chroot",
"--inventory-file=/mnt/packer-amazon-chroot,"
"--inventory-file=/mnt/packer-amazon-chroot"
],
"playbook_file": "main.yml"
}
@ -146,6 +187,33 @@ connection to chroot and running Ansible as root/sudo.
}
```
</Tab>
<Tab heading="HCL2">
```hcl
source "amazon-chroot" "example" {
mount_path = "/mnt/packer-amazon-chroot"
region = "us-east-1"
source_ami = "ami-123456"
}
build {
sources = [
"source.amazon-chroot.example"
]
provisioner "ansible" {
extra_arguments = [
"--connection=chroot",
"--inventory-file=/mnt/packer-amazon-chroot"
]
playbook_file = "main.yml"
}
}
```
</Tab>
</Tabs>
### WinRM Communicator
There are two possible methods for using ansible with the WinRM communicator.
@ -165,6 +233,9 @@ extra_arguments.
Below is a fully functioning Ansible example using WinRM:
<Tabs>
<Tab heading="JSON">
```json
{
"builders": [
@ -181,7 +252,7 @@ Below is a fully functioning Ansible example using WinRM:
"most_recent": true,
"owners": "amazon"
},
"ami_name": "default-packer",
"ami_name": "test-ansible-packer",
"user_data_file": "windows_bootstrap.txt",
"communicator": "winrm",
"force_deregister": true,
@ -202,6 +273,49 @@ Below is a fully functioning Ansible example using WinRM:
}
```
</Tab>
<Tab heading="HCL2">
```hcl
source "amazon-ebs" "example" {
region = "us-east-1"
instance_type = "t2.micro"
source_ami_filter {
filters = {
"virtualization-type": "hvm",
"name": "*Windows_Server-2012*English-64Bit-Base*",
"root-device-type": "ebs"
}
most_recent = true
owners = ["amazon"]
}
ami_name = "test-ansible-packer"
user_data_file = "windows_bootstrap.txt",
communicator = "winrm"
force_deregister = true
winrm_username = "Administrator"
winrm_insecure = true
winrm_use_ssl = true
}
build {
sources = [
"source.amazon-ebs.example",
]
provisioner "ansible" {
playbook_file = "./playbooks/playbook-windows.yml"
user = "Administrator"
use_proxy = false
extra_arguments = [
"-e", "ansible_winrm_server_cert_validation=ignore"
]
}
}
```
</Tab>
</Tabs>
Note that you do have to set the "Administrator" user, because otherwise Ansible
will default to using the user that is calling Packer, rather than the user
configured inside of the Packer communicator. For the contents of
@ -218,9 +332,21 @@ When running from OSX, you may see an error like:
If you see this, you may be able to work around the issue by telling Ansible to
explicitly not use any proxying; you can do this by setting the template option
<Tabs>
<Tab heading="JSON">
```json
"ansible_env_vars": ["no_proxy=\"*\""],
```
</Tab>
<Tab heading="HCL2">
```hcl
ansible_env_vars = ["no_proxy=\"*\""]
```
</Tab>
</Tabs>
in the above Ansible template.
@ -380,6 +506,9 @@ source /tmp/venv/bin/activate && ANSIBLE_FORCE_COLOR=1 PYTHONUNBUFFERED=1 /tmp/v
The ansible provisioner template remains very simple. For example:
<Tabs>
<Tab heading="JSON">
```json
{
"type": "ansible",
@ -387,6 +516,18 @@ The ansible provisioner template remains very simple. For example:
"playbook_file": "./playbook.yml"
}
```
</Tab>
<Tab heading="HCL2">
```hcl
provisioner "ansible" {
command = "/Path/To/call_ansible.sh"
playbook_file = "./playbook.yml"
}
```
</Tab>
</Tabs>
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
@ -396,7 +537,8 @@ arguments with spaces will not be read properly.
### Docker
When trying to use Ansible with Docker, you need to tweak a few options.
When trying to use Ansible with Docker, it should "just work" but if it doesn't
you may need to tweak a few options.
- Change the ansible_connection from "ssh" to "docker"
- Set a Docker container name via the --name option.
@ -405,7 +547,10 @@ On a CI server you probably want to overwrite ansible_host with a random name.
Example Packer template:
```hcl
<Tabs>
<Tab heading="JSON">
```json
{
"variables": {
"ansible_host": "default",
@ -432,6 +577,42 @@ Example Packer template:
]
}
```
</Tab>
<Tab heading="HCL2">
```hcl
variable "ansible_host" {
default = "default"
}
variable "ansible_connection" {
default = "docker"
}
source "docker" "example" {
image = "centos:7"
commit = true
run_command = [ "-d", "-i", "-t", "--name", var.ansible_host, "{{.Image}}", "/bin/bash" ]
}
build {
sources = [
"source.docker.example"
]
provisioner "ansible" {
groups = [ "webserver" ]
playbook_file = "./webserver.yml"
extra_arguments = [
"--extra-vars",
"ansible_host=${var.ansible_host} ansible_connection=${var.ansible_connection}"
]
}
}
```
</Tab>
</Tabs>
Example playbook:

Loading…
Cancel
Save