# Node groups

Nodegroups are declared using a compound target specification. The compound target documentation can be found here.

The `nodegroups` master config file parameter is used to define nodegroups. Here's an example nodegroup configuration within `/etc/salt/master`:

    nodegroups:
      group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'
      group2: 'G@os:Debian and foo.domain.com'
      group3: 'G@os:Debian and N@group1'
      group4:
        - 'G@foo:bar'
        - 'or'
        - 'G@foo:baz'

Note

The `L` within group1 is matching a list of minions, while the `G` in group2 is matching specific grains. See the compound matchers documentation for more details.

As of the 2017.7.0 release of Salt, group names can also be prepended with a dash. This brings the usage in line with many other areas of Salt. For example:

    nodegroups:
      - group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'

Added in version 2015.8.0.

Note

Nodegroups can reference other nodegroups as seen in `group3`. Ensure that you do not have circular references. Circular references will be detected and cause partial expansion with a logged error message.

Added in version 2015.8.0.

Compound nodegroups can be either string values or lists of string values. When the nodegroup is A string value will be tokenized by splitting on whitespace. This may be a problem if whitespace is necessary as part of a pattern. When a nodegroup is a list of strings then tokenization will happen for each list element as a whole.

To match a nodegroup on the CLI, use the `-N` command-line option:

    salt -N group1 test.version

Added in version 2019.2.0.

Note

The `N@` classifier historically could not be used in compound matches within the CLI or top file, it was only recognized in the `nodegroups` master config file parameter. As of the 2019.2.0 release, this limitation no longer exists.

To match a nodegroup in your top file, make sure to put `- match: nodegroup` on the line directly following the nodegroup name.

    base:
      group1:
        - match: nodegroup
        - webserver

Note

When adding or modifying nodegroups to a master configuration file, the master must be restarted for those changes to be fully recognized.

A limited amount of functionality, such as targeting with -N from the command-line may be available without a restart.

## Defining Nodegroups as Lists of Minion IDs

A simple list of minion IDs would traditionally be defined like this:

    nodegroups:
      group1: L@host1,host2,host3

They can now also be defined as a YAML list, like this:

    nodegroups:
      group1:
        - host1
        - host2
        - host3

Added in version 2016.11.0.