Discovery Filters

Using filters to control discovery and addressing is a key concept in mcollective. You can use facts, classes, agents and server identities in filters and combine to narrow down what hosts you will affect.

To determine if your client support filters use the –help option:

$ mco rpc --help
.
.
.
Host Filters
    -W, --with FILTER                Combined classes and facts filter
    -F, --wf, --with-fact fact=val   Match hosts with a certain fact
    -C, --wc, --with-class CLASS     Match hosts with a certain config management class
    -A, --wa, --with-agent AGENT     Match hosts with a certain agent
    -I, --wi, --with-identity IDENT  Match hosts with a certain configured identity

If you see a section as above then the client supports filters, this is the default for all clients using SimpleRPC.

All filters support Regular Expressions and some support comparisons like greater than or less than.

Filters are applied in a combined manner, if you supply 5 filters they must all match your nodes.

Fact Filters

Filtering on facts require that you’ve correctly set up a FactPlugin. The examples below show common fact filters.

Install the ZSH package on machines with the fact country=de:

% mco rpc package install zsh -F country=de

Install the ZSH package on machines where the country fact starts with the letter d:

% mco rpc package install zsh -F country=/^d/
% mco rpc package install zsh -F country=~^d

Install the ZSH package on machines with more than 2 CPUs, other available operators include ==, <=, >=, <, >, !=. For facts where the comparison and the actual fact is numeric it will do a numerical comparison else it wil do alphabetical:

% mco rpc package install zsh -F "physicalprocessorcount>=2"

Agent, Identity and Class filters

These filters all work on the same basic pattern, they just support equality or regular expressions:

Install ZSH on machines with hostnames starting with web:

% mco rpc package install zsh -I /^web/

Install ZSH on machines with hostnames web1.example.com:

% mco rpc package install zsh -I web1.example.com

Combining Fact and Class filters

As a short-hand you can combine Fact and Class filters into a single filter:

Install ZSH on machines in Germany that has classes matching /apache/:

% mco rpc package install zsh -W "/apache/ country=de"

↑ Back to top