This gem includes miscellaneous add-on helper methods for Opscode Chef.
To use helper methods in your Chef recipes, use following code in your recipe:
chef_gem 'chef-helpers' require 'chef-helpers'
To use the helpers locally in
knife exec scripts or Knife plugins,
just add the
chef-helpers gem to your dependencies and
Detailed documentation of the helper methods can be seen at http://rdoc.info/github/3ofcoins/chef-helpers/
Finding existing templates and cookbook files
The recipe DSL is extended with
ChefHelpers::HasSource module that
provides methods for checking which templates and cookbook files exist
on the Chef server. Detailed docs are available at
node.allies method returns an array of node's allies. These
are: all nodes in the same environment (if the environment is not
_default), plus nodes specified by
allies attribute. The
attribute - if set - should be an array of node names or node search
queries; the named nodes and search results will be added to node's
This is mostly useful when defining firewall or other access rules, to easily limit access to insides of a cluster plus a handful of friendly machines.
node.ip_for(other_node) method decides, which IP address should
the node use to contact the other node, and returns this IP as a
string. It is particularly useful when your setup spans across cloud
availability zones or different providers. At the moment only EC2 and
nodes with public
ipaddress are supported; suggestions are welcome.
If both nodes are on EC2 and in the same region, then other node's
ec2.local_ipv4 attribute is used. Otherwise, if other node is a
cloud instance, its
cloud_public.ipv4 attribute is used. Otherwise,
ipaddress is used.
JSONPath access to attributes
Chef::Node class is monkey-patched to allow easy deep access to
the attributes using the
chef > require 'chef-helpers' => true chef > node['$..name'] => ["portinari-2.local", "Java(TM) SE Runtime Environment", "Java HotSpot(TM) 64-Bit Server VM", "Darwin"] chef > node['$.kernel.name'] => ["Darwin"]
Regular access to attributes is preserved; JSONPath is used only when
the attribute name starts with
$ character, or if a
instance is used for indexing.
The jsonpath gem is used for the implementation. While the original gem allows modification, it's not straightforward to achieve with Chef's attributes, so only reading attributes with JSONPath is supported.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature)
- Commit your changes (
git commit -am 'Added some feature')
- Push to the branch (
git push origin my-new-feature)
- Create new Pull Request