A Target is like a recipe: it defines a number of steps that Droid will take to achieve a desired outcome.
The steps of a Target may be a list of Tasks or a list Modules (which are themselves reusable lists of Tasks) or a mixture of both. The Tasks of Modules are always executed before the Tasks of the Target.
A Target may be executed on the local machine or on one or more remote Hosts. The decision to execute locally or remotely and the selection of remote Hosts may be declared as part of the Target or as part of individual Tasks.
tasks
This tasks
property of a Target is a list of Tasks which will be executed in
the order of their definition.
target:
make_website:
tasks:
- name: "Install Apache"
...
- name: "Configure Apache"
...
Please see the Task Configuration for the configuration of a Task.
hosts
The hosts
property of a Target is an expression which identifies the Hosts
and Groups of Hosts on which the Target is to be executed. The expression may
be a single name or a space or comma separated list of names. The names must
match those declared in the Project, under the hosts
and groups
directives.
target:
setup_firewalls:
hosts: "webservers db.example.com"
tasks:
- ...
- ...
A Task may declare that it is to execute on some a subset of the Hosts
identified here, or even on a completely different set of Hosts (see
host_filter
and hosts
of the Task Configuration).
modules
The modules
property of a Target is a list of Module names. The Tasks of
each of the specified Modules will be executed before those in tasks
list.
Modules are executed in the order in which they are declared here.
target:
make_webservers:
modules:
- "install-apache"
- "apache-vhost"
The names of Modules must match those declared in the main modules
directive
(see Project Configuration).
triggers
The triggers
property of a Target is a list of Tasks whose execution depends
upon the outcome of the execution of other Tasks. A Task can trigger the
execution of another Task when its Command is able to report whether or not it
made a change. For example, a Task which modifies the configuration of a
system service may cause the service to reload its configuration:-
target:
make_website:
triggers:
- name: "Reload Apache"
command: "service:reload"
arguments: {name: "apache2"}
tasks:
- name: "Enable Apache module"
command: "apache:enmod"
arguments: {module-name: ...}
trigger: "Reload Apache"
A Task is triggered only when such a Command reports that a change was made.
Apart from its conditional execution, a triggers
Task is no different from a
tasks
Task. Please see the Task Configuration for the
configuration of a Task.
variables
The variables
property of a Target is intended to provide concrete values for
the Command arguments of the Target's Tasks. For example, we might define the
name of a user account for use by a number of Tasks:-
targets:
make_website:
variables:
owner_username: "devops-one"
docroot: ...
tasks:
- name: "Create owner user account"
command: "user:create"
arguments:
username: "{{ owner_username }}"
- name: "Own the docroot"
command: "fs:chown"
arguments:
file: "{{ docroot }}"
user: "{{ owner_username }}"
group: "nobody"
Variables declared here can augment and override values declared in the main
variables
directive (see Project Configuration) and those
declared in Modules (see Module Configuration).