mirror of
https://github.com/hashicorp/packer.git
synced 2026-06-08 16:22:15 -04:00
update ansible provisoner docs to include hcl
This commit is contained in:
parent
e0af769ffb
commit
fe7f529862
1 changed files with 192 additions and 11 deletions
|
|
@ -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…
Reference in a new issue