Intelligente Lösungen
in neuer Dimension

Ansible: Brauchbarere Fehlermeldungen

Beim Ausführen von Ansible-Playbooks läuft man immer mal wieder in Fehler. Die Fehlermeldungen von Ansible sind lang und unleserlich. Hier beschreibe ich, wie die Fehlermeldungen aussehen und wie man sie in ein brauchbareres Format überführen kann.

Typische Ansible-Fehlermeldung

Wenn ich ein Ansible-Playbook mit Fehler ausführe, dann sehen die Fehlermeldungen für mich typischerweise so aus:

1
2
3
4
5
6
7
8
$ ansible-playbook site.yml -l testserver
...
TASK [basis : copy templates for host testserver] *************************************************************************************************************************************
ok: [testserver] => (item={'src': 'testserver/apache2-sites-available/git.daemons-point.com.conf', 'dest': '/etc/apache2/sites-available/git.daemons-point.com.conf'})
failed: [testserver] (item={'src': 'mich-gibt-es nicht', 'dest': '/wohin-auch-immer'}) => {"ansible_loop_var": "item", "changed": false, "item": {"dest": "/wohin-auch-immer", "src": "mich-gibt-es nicht"}, "msg": "Could not find or access 'mich-gibt-es nicht'\nSearched in:\n\t/home/uli/git/dpserver-ansible/roles/basis/templates/mich-gibt-es nicht\n\t/home/uli/git/dpserver-ansible/roles/basis/mich-gibt-es nicht\n\t/home/uli/git/dpserver-ansible/roles/basis/tasks/templates/mich-gibt-es nicht\n\t/home/uli/git/dpserver-ansible/roles/basis/tasks/mich-gibt-es nicht\n\t/home/uli/git/dpserver-ansible/templates/mich-gibt-es nicht\n\t/home/uli/git/dpserver-ansible/mich-gibt-es nicht on the Ansible Controller.\nIf you are using a module and expect the file to exist on the remote, see the remote_src option"}

PLAY RECAP **********************************************************************************************************************************************************************************
testserver           : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

Temporäre Verbesserung

Wenn ich die Fehlermeldung einmalig verschönert haben möchte, dann stelle ich ANSIBLE_STDOUT_CALLBACK=debug vor den Ansible-Aufruf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ ANSIBLE_STDOUT_CALLBACK=debug ansible-playbook site.yml -l testserver
...
TASK [basis : copy templates for host testserver] *************************************************************************************************************************************
ok: [testserver] => (item={'src': 'testserver/apache2-sites-available/git.daemons-point.com.conf', 'dest': '/etc/apache2/sites-available/git.daemons-point.com.conf'})
failed: [testserver] (item={'src': 'mich-gibt-es nicht', 'dest': '/wohin-auch-immer'}) => {
    "ansible_loop_var": "item",
    "changed": false,
    "item": {
        "dest": "/wohin-auch-immer",
        "src": "mich-gibt-es nicht"
    }
}

MSG:

Could not find or access 'mich-gibt-es nicht'
Searched in:
  /home/uli/git/dpserver-ansible/roles/basis/templates/mich-gibt-es nicht
  /home/uli/git/dpserver-ansible/roles/basis/mich-gibt-es nicht
  /home/uli/git/dpserver-ansible/roles/basis/tasks/templates/mich-gibt-es nicht
  /home/uli/git/dpserver-ansible/roles/basis/tasks/mich-gibt-es nicht
  /home/uli/git/dpserver-ansible/templates/mich-gibt-es nicht
  /home/uli/git/dpserver-ansible/mich-gibt-es nicht on the Ansible Controller.
If you are using a module and expect the file to exist on the remote, see the remote_src option

PLAY RECAP **********************************************************************************************************************************************************************************
testserver           : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

Permanente Verbesserung

Wenn ich die Verbesserung dauerhaft verfügbar haben möchte, dann passe ich die Datei “ansible.cfg” in meinem Projektverzeichnis an:

1
2
3
4
5
6
7
8
9
uli@ulicsl:~/git/dpserver-ansible$ git diff ansible.cfg
diff --git a/ansible.cfg b/ansible.cfg
index cc8861d..8e242ac 100644
--- a/ansible.cfg
+++ b/ansible.cfg
@@ -1,4 +1,5 @@
 [defaults]
+stdout_callback = debug
 inventory       = inventory.yml