Helps build cookbooks faster by pre-templating parts and exposing options in a command line and config friendly way.
The latest release of fastfood can be installed via pip:
pip install fastfood
An alternative install method would be manually installing it leveraging
setup.py
:
git clone https://github.com/rackerlabs/fastfood
cd fastfood
python setup.py install
Shows a list of available stencils in your template pack.
Example:
$ fastfood list
Available Stencil Sets:
varnish - Creates a recipe for installing Varnish
ha-redis - Creates a highly available Redis and HAProxy recipe
java - Installs Java JRE
Shows more information about a stencil, including available options.
$ fastfood show nginx
Stencil Set nginx:
Stencils:
nginx
Options:
name - Name of the recipe to create
example - Various premade Nginx examples
Generates a new cookbook or updates an existing cookbook from a fastfood.json file.
Example Template:
{
"name": "mycookbook",
"stencils": [
{
"stencil_set": "base"
},
{
"stencil_set": "rabbitmq",
"openfor": "myapp"
},
{
"stencil_set": "rails",
"stencil": "nginx",
"name": "myapp",
"tag": "myapp"
}
]
}
Ex:
fastfood build fastfood.json
Fastfood uses the Jinja2 templating engine with 2 modifications.
There is a helper method added to jinja2 for fastfood called qstring, it takes in an argument and if that argument does not match a Chef node attributes (node['mysomething'] | node.chef_environment) it will wrap that argument in a string otherwise it just returns the argument.
qstring("node['mysomething']")
renders as
node['mysomething']
and
qstring("mynonchefstr")
renders as
"mynonchefstr"
Because the traditional jinja2 variable start and end strings can conflict with Ruby code fastfood uses '|{' and '}|' to represent a jinja2 variable.
|{ options['name'] }|