cookbook 'chef-solo-search', '= 0.4.0'
chef-solo-search (2) Versions 0.4.0 Follow13
Data bag search for Chef Solo
cookbook 'chef-solo-search', '= 0.4.0', :supermarket
knife supermarket install chef-solo-search
knife supermarket download chef-solo-search
chef-solo-search
Chef-solo-search is a cookbook library that adds data bag search powers
to Chef Solo. Data bag support was added to Chef Solo by Chef 0.10.4.
Please see Supported queries for a list of query types which are supported.
Requirements
* ruby >= 1.8
* ruby-chef >= 0.10.4
Installation
In order to use this extension, create a (dummy-) cookbook and add a directory
called libraries. Next copy libraries/search.rb and libraries/parser.rb to the newly created directory.
Now you have to make sure chef-solo knows about data bags, therefore add
data_bag_path "/data_bags"
to the config file of chef-solo (defaults to /etc/chef/solo.rb).
The same for your roles, add
role_path "/roles"
Supported queries
The search methods supports a basic sub-set of the lucene query language.
Sample supported queries are:
General queries:
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
Queries on attributes with string values:
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'
Queries on attributes with array values:
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'
Queries on attributes with boolean values:
search(:users, "married:true")
Queries in attributes with integer values:
search(:users, "age:35")
OR conditions in queries:
search(:users, "age:42 OR age:22")
AND conditions in queries:
search(:users, "married:true AND age:35")
NOT condition in queries:
search(:users, "children:tom NOT gender:female")
More complex queries:
search(:users, "children:tom NOT gender:female AND age:42")
Supported Objects
The search methods have support for 'roles', 'nodes' and 'databags'.
Roles
You can use the standard role objects in json form and put them into your role path
{
"name": "monitoring",
"default_attributes": { },
"override_attributes": { },
"json_class": "Chef::Role",
"description": "This is just a monitoring role, no big deal.",
"run_list": [
],
"chef_type": "role"
Nodes
Nodes are injected through a databag called 'node'. Create a databag called 'node' and put your json files there
You can use the standard node objects in json form.
{
"id": "vagrant",
"name": "vagrant-vm",
"chef_environment": "_default",
"json_class": "Chef::Node",
"automatic": {
"hostname": "vagrant.vm",
"os": "centos"
},
"normal": {
},
"chef_type": "node",
"default": {
},
"override": {
},
"run_list": [
"role[monitoring]"
]
}
Databags
You can use the standard databag objects in json form
{
"id": "my-ssh",
"hostgroup_name": "all",
"command_line": "$USER1$/check_ssh $HOSTADDRESS$"
}
Running tests
Running tests is as simple as:
% ruby -Ilibraries tests/test_search.rb -v
Dependent cookbooks
This cookbook has no specified dependencies.