chef-solo is an open source version of the chef-client that allows using cookbooks with nodes without requiring access to a Chef server. chef-solo runs locally and requires that a cookbook (and any of its dependencies) be on the same physical disk as the node. chef-solo is a limited-functionality version of the chef-client and does not support the following:
Note
chef-solo can be run as a daemon.
The chef-solo executable is run as a command-line tool.
This command has the following syntax:
chef-solo OPTION VALUE OPTION VALUE ...
This command has the following options:
Use to run the executable as a daemon. This option may not be used in the same command with the --[no-]fork option.
This option is only available on machines that run in UNIX or Linux environments. For machines that are running Microsoft Windows that require similar functionality, use the chef-client::service recipe in the chef-client cookbook: http://community.opscode.com/cookbooks/chef-client. This will install a chef-client service under Microsoft Windows using the Windows Service Wrapper.
The output format: doc (default) or min.
Use doc to print the progress of the chef-client run using full strings that display a summary of updates as they occur.
Use min to print the progress of the chef-client run using single characters. A summary of updates is printed at the end of the chef-client run. A dot (.) is printed for events that do not have meaningful status information, such as loading a file or synchronizing a cookbook. For resources, a dot (.) is printed when the resource is up to date, an S is printed when the resource is skipped by not_if or only_if, and a U is printed when the resource is updated.
Other formatting options are available when those formatters are configured in the client.rb file using the add_formatter option.
The path to a file that contains JSON data.
Use this option to define a run_list object. For example, a JSON file similar to:
"run_list": [
"recipe[base]",
"recipe[foo]",
"recipe[bar]",
"role[webserver]"
],
may be used by running chef-client -j path/to/file.json.
In certain situations this option may be used to update normal attributes.
Warning
Any other attribute type that is contained in this JSON file will be treated as a normal attribute. For example, attempting to update override attributes using the -j option:
{
"name": "dev-99",
"description": "Install some stuff",
"override_attributes": {
"apptastic": {
"enable_apptastic": "false",
"apptastic_tier_name": "dev-99.bomb.com"
}
}
}
will result in a node object similar to:
{
"name": "maybe-dev-99",
"normal": {
"name": "dev-99",
"description": "Install some stuff",
"override_attributes": {
"apptastic": {
"enable_apptastic": "false",
"apptastic_tier_name": "dev-99.bomb.com"
}
}
}
}
Use a URL
$ chef-solo -c ~/solo.rb -j ~/node.json -r http://www.example.com/chef-solo.tar.gz
The tar.gz archived into the file_cache_path, and then extracted to cookbooks_path.
Use a directory
$ chef-solo -c ~/solo.rb -j ~/node.json
chef-solo will look in the solo.rb file to determine the directory in which cookbooks are located.
Use a URL for cookbook and JSON data
$ chef-solo -c ~/solo.rb -j http://www.example.com/node.json -r http://www.example.com/chef-solo.tar.gz