diff --git a/website/source/docs/provisioners/chef-client.html.markdown b/website/source/docs/provisioners/chef-client.html.markdown index 19d28ca5c..f3765c429 100644 --- a/website/source/docs/provisioners/chef-client.html.markdown +++ b/website/source/docs/provisioners/chef-client.html.markdown @@ -75,9 +75,9 @@ configuration is actually required. then the sudo will be omitted. - `run_list` (array of strings) - The [run - list](http://docs.chef.io/essentials_node_object_run_lists.html) - for Chef. By default this is empty, and will use the run list sent down by - the Chef Server. + list](http://docs.chef.io/essentials_node_object_run_lists.html) for Chef. + By default this is empty, and will use the run list sent down by the + Chef Server. - `server_url` (string) - The URL to the Chef server. This is required. @@ -186,3 +186,65 @@ to 777. This is to ensure that Packer can upload and make use of that directory. However, once the machine is created, you usually don't want to keep these directories with those permissions. To change the permissions on the directories, append a shell provisioner after Chef to modify them. + +## Examples + +### Chef Client Local Mode + +The following example shows how to run the `chef-cilent` provisioner in local +mode, while passing a `run_list` using a variable. + +**Local environment variables** + + # Machines Chef directory + export PACKER_CHEF_DIR=/var/chef-packer + # Comma separated run_list + export PACKER_CHEF_RUN_LIST="recipe[apt],recipe[nginx]" + ... + +**Packer variables** + +Set the necessary Packer variables using environment variables or provide a [var +file](/docs/templates/user-variables.html). + +``` {.liquid} +"variables": { + "chef_dir": "{{env `PACKER_CHEF_DIR`}}", + "chef_run_list": "{{env `PACKER_CHEF_RUN_LIST`}}", + "chef_client_config_tpl": "{{env `PACKER_CHEF_CLIENT_CONFIG_TPL`}}", + "packer_chef_bootstrap_dir": "{{env `PACKER_CHEF_BOOTSTRAP_DIR`}}" , + "packer_uid": "{{env `PACKER_UID`}}", + "packer_gid": "{{env `PACKER_GID`}}" +} +``` + +**Setup the** `chef-client` **provisioner** + +Make sure we have the correct directories and permissions for the `chef-client` +provisioner. You will need to bootstrap the Chef run by providing the necessary +cookbooks using Berkshelf or some other means. + +``` {.liquid} +{ + "type": "file", + "source": "{{user `packer_chef_bootstrap_dir`}}", + "destination": "/tmp/bootstrap" +}, +{ + "type": "shell", + "inline": [ + "sudo mkdir -p {{user `chef_dir`}}", + "sudo mkdir -p /tmp/packer-chef-client", + "sudo chown {{user `packer_uid`}}.{{user `packer_gid`}} /tmp/packer-chef-client", + "sudo sh /tmp/bootstrap/bootstrap.sh" + ] +}, +{ + "type": "chef-client", + "server_url": "http://localhost:8889", + "config_template": "{{user `chef_client_config_tpl`}}/client.rb.tpl", + "skip_clean_node": true, + "skip_clean_client": true, + "run_list": "{{user `chef_run_list`}}" +} +```