knife-search
- Find objects on a Chef Server by query
knife search INDEX QUERY (options)
-a
, --attribute ATTR
-i
, --id-only
-q
, --query QUERY
-R
, --rows INT
-r
, --run-list
-o
, --sort SORT
-b
, --start ROW
-m
, --medium
-l
, --long
Search is a feature of the Chef Server that allows you to use a full-text search engine to query information about your infrastructure and applications. You can utilize this service via search calls in a recipe or the knife search command. The search syntax is based on Lucene.
Search indexes are a feature of the Chef Server and the search sub-command allows querying any of the available indexes using SOLR query syntax. The following data types are indexed for search:
Data bags are indexed by the data bag's name. For example, to search a data bag named "admins":
knife search admins "field:search_pattern"
Queries have the form field:search_pattern
where field
is a key in
the JSON description of the relevant objects (nodes, roles,
environments, or data bags). Both field
and search_pattern
are
case-sensitive. search_pattern
can be an exact, wildcard,
range, or fuzzy match (see below). The field
supports exact
matching and limited wildcard matching.
Searches will return the relevant objects (nodes, roles, environments,
or data bags) where the search_pattern
matches the object's value of
field
.
Field names are the keys within the JSON description of the object being searched. Nested Keys can be searched by placing an underscore ("_") between key names.
The field name also has limited support for wildcard matching. Both the "*" and "?" wildcards (see below) can be used within a field name; however, they cannot be the first character of the field name.
Without any search modifiers, a search returns those fields for which
the search_pattern
exactly matches the value of field
in the JSON
description of the object.
Search support both single- and multi-character wildcard searches within a search pattern.
'?' matches exactly one character.
'*' matches zero or more characters.
Range searches allows one to match values between two given values. To match values between X and Y, inclusively, use square brackets:
knife search INDEX 'field:[X TO Y]
To match values between X and Y, exclusively, use curly brackets:
knife search INDEX 'field:{X TO Y}'
Values are sorted in lexicographic order.
Fuzzy searches allows one to match values based on the Levenshtein Distance algorithm. To perform a fuzzy match, append a tilda (~) to the search term:
knife search INDEX 'field:term~'
This search would return nodes whose field
was 'perm' or 'germ'.
The boolean operators NOT, AND, and OR are supported. To find values
of field
that are not X:
knife search INDEX 'field:(NOT X)'
To find records where field1
is X and field2
is Y:
knife search INDEX 'field1:X AND field2:Y'
To find records where field
is X or Y:
knife search INDEX 'field:X OR field:Y'
In order to avoid having special characters and escape sequences within your search term interpreted by either Ruby or the shell, enclose them in single quotes.
Search terms that include spaces should be enclosed in double-quotes:
knife search INDEX 'field:"term with spaces"'
The following characters must be escaped:
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \
Find the nodes with the fully-qualified domain name (FQDN) www.example.com:
knife search node 'fqdn:www.example.com'
Find the nodes running a version of Ubuntu:
knife search node 'platform:ubuntu*'
Find all nodes running CentOS in the production environment:
knife search node 'chef_environment:production AND platform:centos'
knife-ssh(1) http://wiki.opscode.com/display/chef/Attributes Lucene Query Parser Syntax
Chef was written by Adam Jacob adam@opscode.com with many contributions from the community.
This manual page was written by Joshua Timberman joshua@opscode.com. Permission is granted to copy, distribute and / or modify this document under the terms of the Apache 2.0 License.
Knife is distributed with Chef. http://wiki.opscode.com/display/chef/Home