Reference

knife-search(1)

The man page for the knife search subcommand. Search indexes allow queries to be made for any type of data that is indexed by the Chef server, including data bags (and data bag items), environments, nodes, and roles. A defined query syntax is used to support search patterns like exact, wildcard, range, and fuzzy. A search is a full-text query that can be done from several locations, including from within a recipe, by using the search subcommand in knife, the search method in the Recipe DSL, and by using the /search or /search/INDEX endpoints in the Chef server API. The search engine is based on Apache Solr and is run from the Chef server. The knife search subcommand is used run a search query for information that is indexed on a Chef server. Syntax This subcommand has the following syntax: where INDEX is one of client, environment, node, role, or the name of a data bag and SEARCH_QUERY is the search query syntax for the query that will be executed. INDEX is implied if omitted, and will default to node. For example: will return something similar to: and is the same search as: If the SEARCH_QUERY does not contain a colon character (:), then the default query pattern is tags:*#{@query}* OR roles:*#{@query}* OR fqdn:*#{@query}* OR addresses:*#{@query}*, which means the following two search queries are effectively the same: or: Options This sub-command has the following options: Examples To search for the IDs of all nodes running on the Amazon EC2 platform, enter: to return something like: To search for the instance type (flavor) of all nodes running on the Amazon EC2 platform, enter: to return something like: To search for all nodes running Ubuntu, enter: To search for all nodes running CentOS in the production environment, enter: To find a nested attribute, use a pattern similar to the following: To build a search query to use more than one attribute, use an underscore (_) to separate each attribute. For example, the following query will search for all nodes running a specific version of Ruby: To build a search query that can find a nested attribute: To test a search query that will be used in a knife ssh command: where the query in the previous example will search all servers that have the web role, but not on the server named web03.

NAME

knife-search - The man page for the knife search subcommand.

Search indexes allow queries to be made for any type of data that is indexed by the Chef server, including data bags (and data bag items), environments, nodes, and roles. A defined query syntax is used to support search patterns like exact, wildcard, range, and fuzzy. A search is a full-text query that can be done from several locations, including from within a recipe, by using the search subcommand in knife, the search method in the Recipe DSL, and by using the /search or /search/INDEX endpoints in the Chef server API. The search engine is based on Apache Solr and is run from the Chef server.

The knife search subcommand is used run a search query for information that is indexed on a Chef server.

Syntax

This subcommand has the following syntax:

$ knife search INDEX SEARCH_QUERY

where INDEX is one of client, environment, node, role, or the name of a data bag and SEARCH_QUERY is the search query syntax for the query that will be executed.

INDEX is implied if omitted, and will default to node. For example:

$ knife search '*:*' -i

will return something similar to:

8 items found
centos-62-dev
opensuse-1203
ubuntu-1304-dev
ubuntu-1304-orgtest
ubuntu-1204-ohai-test
ubuntu-1304-ifcfg-test
ohai-test
win2k8-dev

and is the same search as:

$ knife search node '*:*" -i

If the SEARCH_QUERY does not contain a colon character (:), then the default query pattern is tags:*#{@query}* OR roles:*#{@query}* OR fqdn:*#{@query}* OR addresses:*#{@query}*, which means the following two search queries are effectively the same:

$ knife search ubuntu

or:

$ knife search node "tags:*ubuntu* OR roles:*ubuntu* OR fqdn:*ubuntu* (etc.)"

Options

This sub-command has the following options:

-a ATTR, --attribute ATTR

The attribute (or attributes) to show.

-b ROW, --start ROW

The row at which return results will begin.

-c CONFIG_FILE, --config CONFIG_FILE

The configuration file to use.

--chef-zero-port PORT

The port on which chef-zero will listen.

--[no-]color

Use to view colored output.

-d, --disable-editing

Use to prevent the $EDITOR from being opened and to accept data as-is.

--defaults

Use to have knife use the default value instead of asking a user to provide one.

-e EDITOR, --editor EDITOR

The $EDITOR that is used for all interactive commands.

-E ENVIRONMENT, --environment ENVIRONMENT

The name of the environment. When this option is added to a command, the command will run only against the named environment.

-F FORMAT, --format FORMAT

The output format: summary (default), text, json, yaml, and pp.

-h, --help

Shows help for the command.

-i, --id-only

Use to show only matching object IDs.

INDEX

The name of the index to be queried: client, environment, node, role, or DATA_BAG_NAME. Default index: node.

-k KEY, --key KEY

The private key that knife will use to sign requests made by the API client to the Chef server.

-l, --long

Use to display all attributes in the output and to show the output as JSON.

-m, --medium

Use to display normal attributes in the output and to show the output as JSON.

-o SORT, --sort SORT

The order in which search results will be sorted.

--print-after

Use to show data after a destructive operation.

-q SEARCH_QUERY, --query SEARCH_QUERY

Use to protect search queries that start with a hyphen (-). A -q query may be specified as an argument or an option, but not both.

-r, --run-list

Use to show only the run-list.

-R INT, --rows INT

The number of rows to be returned.

-s URL, --server-url URL

The URL for the Chef server.

SEARCH_QUERY

The search query used to identify a a list of items on a Chef server. This option uses the same syntax as the search sub-command.

-u USER, --user USER

The user name used by knife to sign requests made by the API client to the Chef server. Authentication will fail if the user name does not match the private key.

-v, --version

The version of the chef-client.

-V, --verbose

Set for more verbose outputs. Use -VV for maximum verbosity.

-y, --yes

Use to respond to all confirmation prompts with "Yes". knife will not ask for confirmation.

-z, --local-mode

Use to run the chef-client in local mode. This allows all commands that work against the Chef server to also work against the local chef-repo.

Examples

To search for the IDs of all nodes running on the Amazon EC2 platform, enter:

$ knife search node 'ec2:*' -i

to return something like:

4 items found
ip-0A7CA19F.ec2.internal
ip-0A58CF8E.ec2.internal
ip-0A58E134.ec2.internal
ip-0A7CFFD5.ec2.internal

To search for the instance type (flavor) of all nodes running on the Amazon EC2 platform, enter:

$ knife search node 'ec2:*' -a ec2.instance_type

to return something like:

4 items found
ec2.instance_type:  m1.large
id:                 ip-0A7CA19F.ec2.internal
ec2.instance_type:  m1.large
id:                 ip-0A58CF8E.ec2.internal
ec2.instance_type:  m1.large
id:                 ip-0A58E134.ec2.internal
ec2.instance_type:  m1.large
id:                 ip-0A7CFFD5.ec2.internal

To search for all nodes running Ubuntu, enter:

$ knife search node 'platform:ubuntu'

To search for all nodes running CentOS in the production environment, enter:

$ knife search node 'chef_environment:production AND platform:centos'

To find a nested attribute, use a pattern similar to the following:

$ knife search node <query_to_run> -a <main_attribute>.<nested_attribute>

To build a search query to use more than one attribute, use an underscore (_) to separate each attribute. For example, the following query will search for all nodes running a specific version of Ruby:

$ knife search node "languages_ruby_version:1.9.3"

To build a search query that can find a nested attribute:

$ knife search node name:<node_name> -a kernel.machine

To test a search query that will be used in a knife ssh command:

$ knife search node "role:web NOT name:web03"

where the query in the previous example will search all servers that have the web role, but not on the server named web03.

AUTHOR

Chef

History