More anchors!
This commit is contained in:
parent
41909d7fd5
commit
7f2253451e
3 changed files with 58 additions and 1 deletions
|
@ -4,6 +4,8 @@ Intro to Playbooks
|
||||||
.. contents::
|
.. contents::
|
||||||
:depth: 2
|
:depth: 2
|
||||||
|
|
||||||
|
.. _about_playbooks:
|
||||||
|
|
||||||
About Playbooks
|
About Playbooks
|
||||||
```````````````
|
```````````````
|
||||||
|
|
||||||
|
@ -33,6 +35,8 @@ There are also some full sets of playbooks illustrating a lot of these technique
|
||||||
There are also many jumping off points after you learn playbooks, so hop back to the documentation
|
There are also many jumping off points after you learn playbooks, so hop back to the documentation
|
||||||
index after you're done with this section.
|
index after you're done with this section.
|
||||||
|
|
||||||
|
.. _playbook_language_example:
|
||||||
|
|
||||||
Playbook Language Example
|
Playbook Language Example
|
||||||
`````````````````````````
|
`````````````````````````
|
||||||
|
|
||||||
|
@ -77,9 +81,13 @@ For starters, here's a playbook that contains just one play::
|
||||||
|
|
||||||
Below, we'll break down what the various features of the playbook language are.
|
Below, we'll break down what the various features of the playbook language are.
|
||||||
|
|
||||||
|
.. _playbook_basics:
|
||||||
|
|
||||||
Basics
|
Basics
|
||||||
``````
|
``````
|
||||||
|
|
||||||
|
.. _playbook_hosts_and_users:
|
||||||
|
|
||||||
Hosts and Users
|
Hosts and Users
|
||||||
+++++++++++++++
|
+++++++++++++++
|
||||||
|
|
||||||
|
@ -140,6 +148,8 @@ Just `Control-C` to kill it and run it again with `-K`.
|
||||||
not come into play. Ansible also takes care to not log password
|
not come into play. Ansible also takes care to not log password
|
||||||
parameters.
|
parameters.
|
||||||
|
|
||||||
|
.. _tasks_list:
|
||||||
|
|
||||||
Tasks list
|
Tasks list
|
||||||
++++++++++
|
++++++++++
|
||||||
|
|
||||||
|
@ -227,6 +237,8 @@ Those same variables are usable in templates, which we'll get to later.
|
||||||
Now in a very basic playbook all the tasks will be listed directly in that play, though it will usually
|
Now in a very basic playbook all the tasks will be listed directly in that play, though it will usually
|
||||||
make more sense to break up tasks using the 'include:' directive. We'll show that a bit later.
|
make more sense to break up tasks using the 'include:' directive. We'll show that a bit later.
|
||||||
|
|
||||||
|
.. _action_shorthand:
|
||||||
|
|
||||||
Action Shorthand
|
Action Shorthand
|
||||||
````````````````
|
````````````````
|
||||||
|
|
||||||
|
@ -242,6 +254,8 @@ You will notice in earlier versions, this was only available as::
|
||||||
|
|
||||||
The old form continues to work in newer versions without any plan of deprecation.
|
The old form continues to work in newer versions without any plan of deprecation.
|
||||||
|
|
||||||
|
.. _handlers:
|
||||||
|
|
||||||
Handlers: Running Operations On Change
|
Handlers: Running Operations On Change
|
||||||
``````````````````````````````````````
|
``````````````````````````````````````
|
||||||
|
|
||||||
|
@ -302,6 +316,8 @@ In the above example any queued up handlers would be processed early when the 'm
|
||||||
statement was reached. This is a bit of a niche case but can come in handy from
|
statement was reached. This is a bit of a niche case but can come in handy from
|
||||||
time to time.
|
time to time.
|
||||||
|
|
||||||
|
.. _executing_a_playbook:
|
||||||
|
|
||||||
Executing A Playbook
|
Executing A Playbook
|
||||||
````````````````````
|
````````````````````
|
||||||
|
|
||||||
|
@ -310,6 +326,8 @@ Let's run a playbook using a parallelism level of 10::
|
||||||
|
|
||||||
ansible-playbook playbook.yml -f 10
|
ansible-playbook playbook.yml -f 10
|
||||||
|
|
||||||
|
.. _tips_and_tricks:
|
||||||
|
|
||||||
Tips and Tricks
|
Tips and Tricks
|
||||||
```````````````
|
```````````````
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@ in Ansible, and are typically used to load variables or templates with informati
|
||||||
|
|
||||||
.. note:: This is considered an advanced feature, and many users will probably not rely on these features.
|
.. note:: This is considered an advanced feature, and many users will probably not rely on these features.
|
||||||
|
|
||||||
|
.. _getting_file_contents:
|
||||||
|
|
||||||
Intro to Lookups: Getting File Contents
|
Intro to Lookups: Getting File Contents
|
||||||
```````````````````````````````````````
|
```````````````````````````````````````
|
||||||
|
|
||||||
|
@ -20,6 +22,8 @@ Contents can be read off the filesystem as follows::
|
||||||
tasks:
|
tasks:
|
||||||
- debug: msg="the value of foo.txt is {{ contents }}"
|
- debug: msg="the value of foo.txt is {{ contents }}"
|
||||||
|
|
||||||
|
.. _password_lookup:
|
||||||
|
|
||||||
The Password Lookup
|
The Password Lookup
|
||||||
```````````````````
|
```````````````````
|
||||||
|
|
||||||
|
@ -44,6 +48,7 @@ This length can be changed by passing an extra parameter::
|
||||||
|
|
||||||
(...)
|
(...)
|
||||||
|
|
||||||
|
.. _more_lookups:
|
||||||
|
|
||||||
More Lookups
|
More Lookups
|
||||||
````````````
|
````````````
|
||||||
|
|
|
@ -24,6 +24,8 @@ It's highly recommended that you consult `the Ansible-Examples github repository
|
||||||
.. contents::
|
.. contents::
|
||||||
:depth: 2
|
:depth: 2
|
||||||
|
|
||||||
|
.. _valid_variable_names:
|
||||||
|
|
||||||
What Makes A Valid Variable Name
|
What Makes A Valid Variable Name
|
||||||
````````````````````````````````
|
````````````````````````````````
|
||||||
|
|
||||||
|
@ -37,6 +39,8 @@ Variable names should be letters, numbers, and underscores. Variables should al
|
||||||
|
|
||||||
Easy enough, let's move on.
|
Easy enough, let's move on.
|
||||||
|
|
||||||
|
.. _variables_in_inventory:
|
||||||
|
|
||||||
Variables Defined in Inventory
|
Variables Defined in Inventory
|
||||||
``````````````````````````````
|
``````````````````````````````
|
||||||
|
|
||||||
|
@ -48,6 +52,8 @@ want to use 'boston.ntp.example.com' as an NTP server.
|
||||||
|
|
||||||
See the `intro_inventory` document for multiple ways on how to define variables in inventory.
|
See the `intro_inventory` document for multiple ways on how to define variables in inventory.
|
||||||
|
|
||||||
|
.. _playbook_variables:
|
||||||
|
|
||||||
Variables Defined in a Playbook
|
Variables Defined in a Playbook
|
||||||
```````````````````````````````
|
```````````````````````````````
|
||||||
|
|
||||||
|
@ -59,6 +65,8 @@ In a playbook, it's possible to define variables directly inline like so::
|
||||||
|
|
||||||
This can be nice as it's right there when you are reading the playbook.
|
This can be nice as it's right there when you are reading the playbook.
|
||||||
|
|
||||||
|
.. _included_variables:
|
||||||
|
|
||||||
Variables defined from included files and roles
|
Variables defined from included files and roles
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
|
|
||||||
|
@ -67,6 +75,8 @@ It turns out we've already talked about variables in another place too.
|
||||||
As described in `intro_roles`, variables can also be included in the playbook via include files, which may or may
|
As described in `intro_roles`, variables can also be included in the playbook via include files, which may or may
|
||||||
not be part of an "Ansible Role". Usage of roles is preferred as it provides a nice organizational system.
|
not be part of an "Ansible Role". Usage of roles is preferred as it provides a nice organizational system.
|
||||||
|
|
||||||
|
.. _about_jinja2:
|
||||||
|
|
||||||
Using Variables: About Jinja2
|
Using Variables: About Jinja2
|
||||||
`````````````````````````````
|
`````````````````````````````
|
||||||
|
|
||||||
|
@ -96,6 +106,8 @@ it's more than that -- you can also read variables about other hosts. We'll sho
|
||||||
pieces of files, or to have other ecosystem tools read Ansible files. Not everyone will need this but it can unlock
|
pieces of files, or to have other ecosystem tools read Ansible files. Not everyone will need this but it can unlock
|
||||||
possibilities.
|
possibilities.
|
||||||
|
|
||||||
|
.. _yaml_gotchas:
|
||||||
|
|
||||||
Hey Wait, A YAML Gotcha
|
Hey Wait, A YAML Gotcha
|
||||||
```````````````````````
|
```````````````````````
|
||||||
|
|
||||||
|
@ -114,6 +126,7 @@ Do it like this and you'll be fine::
|
||||||
vars:
|
vars:
|
||||||
app_path: "{{ base_path }}/22"
|
app_path: "{{ base_path }}/22"
|
||||||
|
|
||||||
|
.. _vars_and_facts:
|
||||||
|
|
||||||
Information discovered from systems: Facts
|
Information discovered from systems: Facts
|
||||||
``````````````````````````````````````````
|
``````````````````````````````````````````
|
||||||
|
@ -371,6 +384,8 @@ Facts are frequently used in conditionals (see `playbook_conditionals`) and also
|
||||||
|
|
||||||
Facts can be also used to create dynamic groups of hosts that match particular critera, see the :doc:`modules` documentation on 'group_by' for details, as well as in generalized conditional statements as discussed in the `playbook_conditionals` chapter.
|
Facts can be also used to create dynamic groups of hosts that match particular critera, see the :doc:`modules` documentation on 'group_by' for details, as well as in generalized conditional statements as discussed in the `playbook_conditionals` chapter.
|
||||||
|
|
||||||
|
.. _disabling_facts:
|
||||||
|
|
||||||
Turning Off Facts
|
Turning Off Facts
|
||||||
`````````````````
|
`````````````````
|
||||||
|
|
||||||
|
@ -381,6 +396,8 @@ systems, mainly, or if you are using Ansible on experimental platforms. In any
|
||||||
- hosts: whatever
|
- hosts: whatever
|
||||||
gather_facts: no
|
gather_facts: no
|
||||||
|
|
||||||
|
.. _local_facts::
|
||||||
|
|
||||||
Local Facts (Facts.d)
|
Local Facts (Facts.d)
|
||||||
`````````````````````
|
`````````````````````
|
||||||
|
|
||||||
|
@ -389,7 +406,11 @@ Local Facts (Facts.d)
|
||||||
As discussed in the playbooks chapter, Ansible facts are a way of getting data about remote systems for use in playbook variables.
|
As discussed in the playbooks chapter, Ansible facts are a way of getting data about remote systems for use in playbook variables.
|
||||||
Usually these are discovered automatically by the 'setup' module in Ansible. Users can also write custom facts modules, as described
|
Usually these are discovered automatically by the 'setup' module in Ansible. Users can also write custom facts modules, as described
|
||||||
in the API guide. However, what if you want to have a simple way to provide system or user
|
in the API guide. However, what if you want to have a simple way to provide system or user
|
||||||
provided data for use in Ansible variables, without writing a fact module? For instance, what if you want users to be able to control some aspect about how their systems are managed? "Facts.d" is one such mechanism.
|
provided data for use in Ansible variables, without writing a fact module?
|
||||||
|
|
||||||
|
For instance, what if you want users to be able to control some aspect about how their systems are managed? "Facts.d" is one such mechanism.
|
||||||
|
|
||||||
|
.. note:: Perhaps "local facts" is a bit of a misnomer, it means "locally supplied user values" as opposed to "centrally supplied user values", or what facts are -- "locally dynamically determined values".
|
||||||
|
|
||||||
If a remotely managed system has an "/etc/ansible/facts.d" directory, any files in this directory
|
If a remotely managed system has an "/etc/ansible/facts.d" directory, any files in this directory
|
||||||
ending in ".fact", can be JSON, INI, or executable files returning JSON, and these can supply local facts in Ansible.
|
ending in ".fact", can be JSON, INI, or executable files returning JSON, and these can supply local facts in Ansible.
|
||||||
|
@ -423,6 +444,7 @@ And this data can be accessed in a template/playbook as::
|
||||||
The local namespace prevents any user supplied fact from overriding system facts
|
The local namespace prevents any user supplied fact from overriding system facts
|
||||||
or variables defined elsewhere in the playbook.
|
or variables defined elsewhere in the playbook.
|
||||||
|
|
||||||
|
.. _registered_variables:
|
||||||
|
|
||||||
Registered Variables
|
Registered Variables
|
||||||
````````````````````
|
````````````````````
|
||||||
|
@ -448,6 +470,8 @@ While it's mentioned elsewhere in that document too, here's a quick syntax examp
|
||||||
Registered variables are valid on the host the remainder of the playbook run, which is the same as the lifetime of "facts"
|
Registered variables are valid on the host the remainder of the playbook run, which is the same as the lifetime of "facts"
|
||||||
in Ansible. Effectively registerd variables are just like facts.
|
in Ansible. Effectively registerd variables are just like facts.
|
||||||
|
|
||||||
|
.. _accessing_complex_variable_data:
|
||||||
|
|
||||||
Accessing Complex Variable Data
|
Accessing Complex Variable Data
|
||||||
```````````````````````````````
|
```````````````````````````````
|
||||||
|
|
||||||
|
@ -466,6 +490,8 @@ Similarly, this is how we access the first element of an array::
|
||||||
|
|
||||||
{{ foo[0] }}
|
{{ foo[0] }}
|
||||||
|
|
||||||
|
.. _magic_variables_and_hostvars:
|
||||||
|
|
||||||
Magic Variables, and How To Access Information About Other Hosts
|
Magic Variables, and How To Access Information About Other Hosts
|
||||||
````````````````````````````````````````````````````````````````
|
````````````````````````````````````````````````````````````````
|
||||||
|
|
||||||
|
@ -514,6 +540,8 @@ Don't worry about any of this unless you think you need it. You'll know when yo
|
||||||
|
|
||||||
Also available, *inventory_dir* is the pathname of the directory holding Ansible's inventory host file, *inventory_file* is the pathname and the filename pointing to the Ansible's inventory host file.
|
Also available, *inventory_dir* is the pathname of the directory holding Ansible's inventory host file, *inventory_file* is the pathname and the filename pointing to the Ansible's inventory host file.
|
||||||
|
|
||||||
|
.. _variable_file_seperation_details:
|
||||||
|
|
||||||
Variable File Separation
|
Variable File Separation
|
||||||
````````````````````````
|
````````````````````````
|
||||||
|
|
||||||
|
@ -550,6 +578,8 @@ The contents of each variables file is a simple YAML dictionary, like this::
|
||||||
It's also possible to keep per-host and per-group variables in very
|
It's also possible to keep per-host and per-group variables in very
|
||||||
similar files, this is covered in :ref:`patterns`.
|
similar files, this is covered in :ref:`patterns`.
|
||||||
|
|
||||||
|
.. _passing_variables_on_the_command_line:
|
||||||
|
|
||||||
Passing Variables On The Command Line
|
Passing Variables On The Command Line
|
||||||
`````````````````````````````````````
|
`````````````````````````````````````
|
||||||
|
|
||||||
|
@ -584,6 +614,8 @@ As of Ansible 1.3, extra vars can be loaded from a JSON file with the "@" syntax
|
||||||
Also as of Ansible 1.3, extra vars can be formatted as YAML, either on the command line
|
Also as of Ansible 1.3, extra vars can be formatted as YAML, either on the command line
|
||||||
or in a file as above.
|
or in a file as above.
|
||||||
|
|
||||||
|
.. _conditional_imports:
|
||||||
|
|
||||||
Conditional Imports
|
Conditional Imports
|
||||||
```````````````````
|
```````````````````
|
||||||
|
|
||||||
|
@ -637,6 +669,8 @@ from turning into arbitrary code with ugly nested ifs, conditionals, and so on -
|
||||||
in more streamlined & auditable configuration rules -- especially because there are a
|
in more streamlined & auditable configuration rules -- especially because there are a
|
||||||
minimum of decision points to track.
|
minimum of decision points to track.
|
||||||
|
|
||||||
|
.. _variable_precedence:
|
||||||
|
|
||||||
Variable Precedence: Where Should I Put A Variable?
|
Variable Precedence: Where Should I Put A Variable?
|
||||||
```````````````````````````````````````````````````
|
```````````````````````````````````````````````````
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue