Chapter 11. Customizing Hosts, Runs, and Handlers

Sometimes Ansible’s default behaviors don’t quite fit your use case. In this chapter, we cover Ansible features that provide customization by controlling which hosts to run against, and how tasks and handlers are run.

Patterns for Specifying Hosts

So far, the host parameter in our plays has specified a single host or group, like this:

hosts: web

Instead of specifying a single host or group, though, you can also specify a pattern. You’ve already seen the all pattern, which will run a play against all known hosts:

hosts: all

You can specify a union of two groups with a colon; this example specifies all dev and staging machines:

hosts: dev:staging

You can specify an intersection by using a colon and ampersand. For example, to specify all of the database servers in your staging environment, you might do this:

hosts: staging:&database

Table 11-1 shows the patterns that Ansible supports. Note that the regular-expression pattern always starts with a tilde.

Table 11-1. Supported patterns
Action Example usage
All hosts all
All hosts *
Union dev:staging
Intersection staging:&database
Exclusion dev:!queue
Wildcard *.example.com
Range of numbered servers web[5:10]
Regular expression ~web\d+\.example\.(com|org)

Ansible supports multiple combinations of patterns:

hosts: dev:staging:&database:!queue

Limiting Which Hosts Run

A limit targets a playbook to a subset of all potential hosts. Use either the -l  or the ...

Get Ansible: Up and Running, 3rd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.