Chef-solo-search is a cookbook library to add data bags and search powers to chef-solo. Thanks for the initial idea and code goes to Brian Akins http://lists.opscode.com/sympa/arc/chef/2011-02/msg00000.html Please see Supported queries for a list of query types which are supported.
* ruby >= 1.8
* ruby-chef >= 0.10
In order to use this extension, create a (dummy-) cookbook and add a directory called libraries. Next copy libraries/search.rb and libraries/data_bags.rb to the newly created directory. Now you have to make sure chef-solo knows about data bags, therefor add
data_bag_path "<node_work_path>/data_bags"
to the config file of chef-solo (defaults to /etc/chef/solo.rb).
The search methods supportes a basic sub-set of the lucene query language. Sample supported queries are:
search(:users, "*:*")
search(:users)
search(:users, nil)
getting all items in ':users'
search(:users, "username:*")
search(:users, "username:[* TO *]")
getting all items from ':users' which have a 'username' attribute
search(:users, "(NOT username:*)")
search(:users, "(NOT username:[* TO *])")
getting all items from ':users' which don't have a 'username' attribute
search(:users, "username:speedy")
getting all items from ':users' with username equals 'speedy'
search(:users, "NOT username:speedy")
getting all items from ':users' with username is unequal to 'speedy'
search(:users, "username:spe*")
getting all items which 'username'-value begins with 'spe'
search(:users, "children:tom")
getting all items which 'children' attribute contains 'tom'
search(:users, "children:t*")
getting all items which have at least one element in 'children'
which starts with 't'
search(:users, "married:true")
search(:users, "age:35")
search(:users, "age:42 OR age:22")
search(:users, "married:true AND age:35")
search(:users, "children:tom NOT gender:female")
search(:users, "children:tom NOT gender:female AND age:42")
Searching within the '_default' environment is also supported
search(:users, "age:35 AND chef_environment:_default")
Running tests is as simple as:
% ruby -Ilibraries tests/test_search.rb -v