chef-shell
- Interactive Chef Console
chef-shell [named configuration] (options)
-S
, --server CHEF_SERVER_URL
-z
, --client
-c
, --config CONFIG
-j
, --json-attributes JSON_ATTRIBS
-l
, --log-level LOG_LEVEL
-s
, --solo
-a
, --standalone
-v
, --version
-h
, --help
When no --config option is specified, chef-shell attempts to load a default configuration file:
chef-shell
is an irb(1) (interactive ruby) session customized for Chef.
chef-shell
serves two primary functions: it provides a means to
interact with a Chef Server interactively using a convenient DSL; it
allows you to define and run Chef recipes interactively.
chef-shell uses irb's subsession feature to provide multiple modes of
interaction. In addition to the primary mode which is entered on start,
recipe
and attributes
modes are available.
The following commands are available in the primary session:
help
version
recipe
recipe
modeattributes
attributes
moderun_chef
reset
echo :on|:off
tracing :on|:off
node
ohai
In addition to these commands, chef-shell provides a DSL for accessing data on the Chef Server. When working with remote data in chef-shell, you chain method calls in the form object type.operation, where object type is in plural form. The following object types are available:
nodes
roles
data_bags
clients
cookbooks
For each object type the following operations are available:
Enumerable#map
method.Aliased as object type.load
Loads the singular item identified by object name.
Aliased as object type.find
Runs a search against the server and returns the matching items. If the optional code block is given each item will be passed to the block and the results returned.
The query may be a Solr/Lucene format query given as a String, or a Hash of conditions. If a Hash is given, the options will be ANDed together. To join conditions with OR, use negative queries, or any advanced search syntax, you must provide give the query in String form.
Aliased as object type.bulk_edit
Bulk edit objects by processing them with the (required) code block.
You can edit all objects of the given type by passing the Symbol
:all
as the argument, or only a subset by passing a query as the
argument. The query is evaluated in the same way as with
search.
The return value of the code block is used to alter the behavior
of transform
. If the value returned from the block is nil
or
false
, the object will not be saved. Otherwise, the object is
saved after being passed to the block. This behavior can be
exploited to create a dry run to test a data transformation.
Recipe mode implements Chef's recipe DSL. Exhaustively documenting this DSL is outside the scope of this document. See the following pages in the Chef documentation for more information:
Once you have defined resources in the recipe, you can trigger a
convergence run via run_chef
A "Hello World" interactive recipe
chef > recipe chef:recipe > echo :off chef:recipe > file "/tmp/hello_world" chef:recipe > run_chef [Sat, 09 Apr 2011 08:56:56 -0700] INFO: Processing file[/tmp/hello_world] action create ((irb#1) line 2) [Sat, 09 Apr 2011 08:56:56 -0700] INFO: file[/tmp/hello_world] created file /tmp/hello_world chef:recipe > pp ls '/tmp' [".", "..", "hello_world"]
Search for nodes by role, and print their IP addresses
chef > nodes.find(:roles => 'monitoring-server') {|n| n[:ipaddress] } => ["10.254.199.5"]
Remove the role obsolete from every node in the system
chef > nodes.transform(:all) {|n| n.run_list.delete('role[obsolete]') } => [node[chef098b2.opschef.com], node[ree-woot], node[graphite-dev], node[fluke.localdomain], node[ghost.local], node[kallistec]]
chef-shell
often does not perfectly replicate the context in which
chef-client(8) configures a host, which may lead to discrepancies in
observed behavior.
chef-shell
has to duplicate much code from chef-client's internal
libraries and may become out of sync with the behavior of those
libraries.
chef-client(8) knife(1) http://wiki.opscode.com/display/chef/Chef+Shell
Chef was written by Adam Jacob adam@opscode.com with many contributions from the community. chef-shell was written by Daniel DeLeo.
This manual page was written by Daniel DeLeo dan@opscode.com. Permission is granted to copy, distribute and / or modify this document under the terms of the Apache 2.0 License.
chef-shell is distributed with Chef. http://wiki.opscode.com/display/chef/Home