author | Oleksandr Gavenko <gavenkoa@gmail.com> |
Thu, 12 May 2022 15:15:03 +0300 | |
changeset 2526 | 8f83c9cd3059 |
parent 2460 | d46c13ff4cd9 |
permissions | -rw-r--r-- |
2389 | 1 |
|
2 |
========= |
|
3 |
Ansible |
|
4 |
========= |
|
5 |
.. contents:: |
|
6 |
:local: |
|
7 |
||
8 |
Debugging Ansible |
|
9 |
================= |
|
10 |
||
11 |
Pass ``-vvv`` to Ansible utilities:: |
|
12 |
||
13 |
ansible -vvv ... |
|
14 |
ansible-playbook -vvv ... |
|
15 |
||
16 |
To debug connection use ``-vvvv``:: |
|
17 |
||
18 |
ansible -vvvv ... |
|
19 |
||
2441
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
20 |
Print variable value with task ``debug``:: |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
21 |
|
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
22 |
- debug: var=ansible_host |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
23 |
- debug: |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
24 |
var: ansible_host |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
25 |
- debug: |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
26 |
msg: "host is {{ ansible_host }}" |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
27 |
|
2389 | 28 |
To debug Python modules set ``ANSIBLE_KEEP_REMOTE_FILES`` to ``1`` (it causes Ansible to leave the |
29 |
exact copy of the Python scripts it executed on the target machine):: |
|
30 |
||
31 |
ANSIBLE_KEEP_REMOTE_FILES=1 ansible ... |
|
32 |
||
33 |
There is ``debugger`` keyword that triggers debugger, see `Ansible Debugger |
|
34 |
<https://docs.ansible.com/ansible/latest/user_guide/playbooks_debugger.html>`_ |
|
35 |
||
36 |
To activate debugger on task:: |
|
37 |
||
38 |
- name: Execute a command |
|
39 |
command: false |
|
40 |
debugger: on_failed |
|
41 |
||
42 |
To activate debugger in ``ansible.cfg``:: |
|
43 |
||
44 |
[defaults] |
|
45 |
enable_task_debugger = True |
|
46 |
||
47 |
To activate debugger via env var:: |
|
48 |
||
49 |
ANSIBLE_ENABLE_TASK_DEBUGGER=True ansible-playbook -i hosts site.yml |
|
50 |
||
51 |
Use ``ansible-lint``:: |
|
52 |
||
53 |
$ sudo apt install ansible-lint |
|
54 |
$ ansible-lint site.yml |
|
55 |
||
2390
f2b450fa4f4b
Network Debug and Troubleshooting Guide.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2389
diff
changeset
|
56 |
https://docs.ansible.com/ansible/latest/network/user_guide/network_debug_troubleshooting.html |
f2b450fa4f4b
Network Debug and Troubleshooting Guide.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2389
diff
changeset
|
57 |
Network Debug and Troubleshooting Guide. |
2389 | 58 |
https://stackoverflow.com/questions/42417079/how-to-debug-ansible-issues |
59 |
How to debug Ansible issues? |
|
2430 | 60 |
|
61 |
Bash completion |
|
62 |
=============== |
|
63 |
||
64 |
https://github.com/ansible/ansible/issues/36397 |
|
65 |
Provide bash-completion script for ansible commands. |
|
66 |
https://docs.ansible.com/ansible/devel/installation_guide/intro_installation.html#shell-completion |
|
67 |
As of Ansible 2.9 shell completion of the ansible command line utilities is available and provided |
|
68 |
through an optional dependency called argcomplete. |
|
69 |
||
70 |
Ansible language |
|
71 |
================ |
|
72 |
||
73 |
https://docs.ansible.com/ansible/latest/user_guide/playbooks_module_defaults.html |
|
74 |
Module defaults. |
|
2438
f570bd31717d
Reserved keywords. Patterns: targeting hosts and groups. Using aliases & groups for hosts.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2435
diff
changeset
|
75 |
https://docs.ansible.com/ansible/latest/reference_appendices/playbooks_keywords.html |
f570bd31717d
Reserved keywords. Patterns: targeting hosts and groups. Using aliases & groups for hosts.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2435
diff
changeset
|
76 |
Reserved keywords. |
f570bd31717d
Reserved keywords. Patterns: targeting hosts and groups. Using aliases & groups for hosts.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2435
diff
changeset
|
77 |
https://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html |
f570bd31717d
Reserved keywords. Patterns: targeting hosts and groups. Using aliases & groups for hosts.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2435
diff
changeset
|
78 |
Patterns: targeting hosts and groups. |
f570bd31717d
Reserved keywords. Patterns: targeting hosts and groups. Using aliases & groups for hosts.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2435
diff
changeset
|
79 |
https://docs.ansible.com/ansible/latest/network/getting_started/first_inventory.html |
f570bd31717d
Reserved keywords. Patterns: targeting hosts and groups. Using aliases & groups for hosts.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2435
diff
changeset
|
80 |
Using aliases & groups for hosts. |
2439
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
81 |
https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html |
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
82 |
Error handling in playbooks |
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
83 |
|
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
84 |
Variables: |
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
85 |
|
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
86 |
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html |
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
87 |
Using Variables. Precedence. |
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
88 |
https://docs.ansible.com/ansible/latest/reference_appendices/config.html |
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
89 |
Ansible Configuration Settings. |
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
90 |
https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html |
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
91 |
Magic variables. |
2443
0c3dea222c3c
Discovering variables: facts and magic variables.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2442
diff
changeset
|
92 |
https://docs.ansible.com/ansible/latest/user_guide/playbooks_vars_facts.html |
0c3dea222c3c
Discovering variables: facts and magic variables.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2442
diff
changeset
|
93 |
Discovering variables: facts and magic variables. |
2447 | 94 |
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/set_fact_module.html |
95 |
``ansible.builtin.set_fact`` – Set host facts from a task. |
|
2439
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
96 |
|
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
97 |
Inventory: |
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
98 |
|
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
99 |
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/generator_inventory.html |
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
100 |
Uses Jinja2 to construct hosts and groups from patterns. |
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
101 |
|
2447 | 102 |
Collections: |
103 |
||
104 |
https://docs.ansible.com/ansible/latest/user_guide/collections_using.html |
|
105 |
Using collections. |
|
106 |
https://docs.ansible.com/ansible/2.10/collections/index.html |
|
107 |
Collection Index. |
|
108 |
||
2439
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
109 |
Inclusion: |
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
110 |
|
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
111 |
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/include_module.html |
7377cd066123
Variables. Inventory. Inclusion.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2438
diff
changeset
|
112 |
Include a play or task list. |
2430 | 113 |
|
2442
743c988c3fa9
Using filters to manipulate data.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2441
diff
changeset
|
114 |
Filters: |
743c988c3fa9
Using filters to manipulate data.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2441
diff
changeset
|
115 |
|
743c988c3fa9
Using filters to manipulate data.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2441
diff
changeset
|
116 |
https://jinja.palletsprojects.com/en/master/templates/ |
743c988c3fa9
Using filters to manipulate data.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2441
diff
changeset
|
117 |
Jinja template language. List of Builtin Filters. |
743c988c3fa9
Using filters to manipulate data.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2441
diff
changeset
|
118 |
https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html |
743c988c3fa9
Using filters to manipulate data.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2441
diff
changeset
|
119 |
Using filters to manipulate data. |
743c988c3fa9
Using filters to manipulate data.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2441
diff
changeset
|
120 |
|
2447 | 121 |
Execution: |
122 |
||
123 |
https://docs.ansible.com/ansible/latest/user_guide/playbooks_strategies.html |
|
124 |
Controlling playbook execution: strategies and more. |
|
125 |
https://docs.ansible.com/ansible/latest/plugins/strategy.html |
|
126 |
Strategy Plugins. |
|
127 |
https://docs.ansible.com/ansible/latest/user_guide/playbooks_delegation.html |
|
128 |
Controlling where tasks run: delegation and local actions. |
|
129 |
https://docs.ansible.com/ansible/latest/reference_appendices/general_precedence.html |
|
130 |
Controlling how Ansible behaves: precedence rules. |
|
131 |
https://docs.ansible.com/ansible/latest/user_guide/playbooks_handlers.html |
|
132 |
Handlers: running operations on change. |
|
133 |
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/setup_module.html |
|
134 |
ansible.builtin.setup – Gathers facts about remote hosts. |
|
135 |
||
2435 | 136 |
Search path |
137 |
=========== |
|
138 |
||
139 |
Files, templates, variables definitions are looked in ``files``, ``templates``, ``vars`` role / play |
|
140 |
directories first, then in the base directory for role / play. |
|
141 |
||
2441
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
142 |
https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
143 |
You can also add ``group_vars/`` and ``host_vars/`` directories to your playbook |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
144 |
directory. The ansible-playbook command looks for these directories in the current |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
145 |
working directory by default. Other Ansible commands (for example, ansible, |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
146 |
ansible-console, and so on) will only look for ``group_vars/`` and ``host_vars/`` in the |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
147 |
inventory directory. If you want other commands to load group and host variables from a |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
148 |
playbook directory, you must provide the ``--playbook-dir`` option on the command line. |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
149 |
If you load inventory files from both the playbook directory and the inventory |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
150 |
directory, variables in the playbook directory will override variables set in the |
58d60b3e470a
Print variable value with task debug. Search path.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2439
diff
changeset
|
151 |
inventory directory. |
2435 | 152 |
https://docs.ansible.com/ansible/latest/user_guide/playbook_pathing.html |
153 |
Search paths in Ansible. |
|
154 |
||
155 |
Templates |
|
156 |
========= |
|
157 |
||
158 |
https://docs.ansible.com/ansible/latest/user_guide/playbooks_templating.html |
|
159 |
Templating (Jinja2). |
|
160 |
||
2447 | 161 |
Execution |
162 |
========= |
|
163 |
||
164 |
``-f`` option controls forking: how many executors are started to perform tasks. |
|
165 |
||
166 |
The way tasks are processed depends on ``strategy`` and ``serial``. |
|
167 |
||
168 |
``strategy`` * ``serial`` can be defined on each ``hosts`` in a play:: |
|
169 |
||
170 |
- hosts: web |
|
171 |
strategy: free |
|
172 |
serial: 50% |
|
173 |
- hosts: db |
|
174 |
strategy: linear |
|
175 |
serial: 1 |
|
176 |
||
177 |
* With ``linear`` strategy all workers execute the same tasks, idling until every is finished the |
|
178 |
task. Then next task is executed. ``serial`` sets how many hosts at a time to run at a time to the |
|
179 |
end of subplay. |
|
180 |
* With ``free`` strategy tasks are executed without waiting for completion of the same task on every |
|
181 |
host. |
|
182 |
||
2449 | 183 |
Special variables |
184 |
================= |
|
185 |
||
186 |
You can dump any variable by ``debug`` task in a playbook or using mudule:: |
|
187 |
||
188 |
ansible $host -m debug -a var=groups |
|
189 |
||
190 |
* ``vars`` holds everything! |
|
191 |
* ``hosts`` holds all inventory definitions |
|
192 |
* ``groups`` holds info about grouping of hosts |
|
193 |
* ``ansible_facts`` all collected facts about current host |
|
194 |
||
2448 | 195 |
Blocks |
196 |
====== |
|
197 |
||
198 |
To avoid repetitive checks or to handle failures use ``block``:: |
|
199 |
||
200 |
block: |
|
201 |
- shell: echo do 1 |
|
202 |
- shell: echo do 2 |
|
203 |
when: not db_started |
|
204 |
become: true |
|
205 |
become_user: dba |
|
206 |
rescue: |
|
207 |
- shell: echo rollback |
|
208 |
always: |
|
209 |
- shell: echo notify |
|
210 |
||
2460
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
211 |
Collections |
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
212 |
=========== |
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
213 |
|
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
214 |
https://docs.ansible.com/ansible/latest/user_guide/collections_using.html |
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
215 |
Using collections. |
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
216 |
|
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
217 |
To install specific version use a colon and conditions with operators: ``==``, ``!=``, ``>``, |
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
218 |
``>=``, ``<``, ``<=`` separated by comma:: |
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
219 |
|
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
220 |
ansible-galaxy collection install 'my_namespace.my_collection:>=1.0.0,<2.0.0' |
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
221 |
|
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
222 |
Only one version of collection can be installed, if you want to update with different version use |
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
223 |
``--force``:: |
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
224 |
|
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
225 |
ansible-galaxy collection install google.cloud:=0.0.1 |
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
226 |
ansible-galaxy collection install --force google.cloud:=1.0.1 |
d46c13ff4cd9
Update with different version.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
2449
diff
changeset
|
227 |