Übergibt ansible Rollen-Standardvariablen an die Handler innerhalb derselben Rolle?Ansible erkennt keine Rollen-Standardvariablen in seinem Handler
Hier ist ein minimaler Ausschnitt aus dem Textbuch, der das Problem hat:
Rollenhierarchie
- playbook.yml
- roles/
- gunicorn/
- defaults/
- main.yml
- handlers/
- main.yml
- code-checkout/
- tasks/
- main.yml
Hier ist der Inhalt der Datei
gunicorn/defaults/main.yml
---
gu_log: "/tmp/gunicorn.log"
gunicorn/Handler/main.yml
---
- name: Clear Gunicorn Log
shell: rm {{ gu_log }}
Finalisierung/Aufgaben/main.yml
---
- name: Test Handlers
shell: ls
notify:
- Restart Gunicorn
playbook.yml
---
- name: Deploy
hosts: webservers
tasks:
- include: roles/finalize/tasks/main.yml
handlers:
- include: roles/gunicorn/handlers/main.yml
AFAIK gut sieht alles . Ich erhalte diesen Fehler jedoch während der Ausführung des Playbooks.
FEHLGESCHLAGEN! => {"failed": true, "msg": "Das Feld 'args' hat einen ungültigen Wert , der eine Variable enthält, die undefiniert ist. Der Fehler war: 'gu_log' ist nicht definiert \ n \ nDer Fehler scheint in "/roles/gunicorn/handlers/main.yml": Zeile 3, Spalte 3, aber möglicherweise \ nbe woanders in der Datei je nach dem genauen Syntaxproblem gewesen. \ n \ nDie störende Zeile scheint zu sein: \ n \ n \ n- Name: Restart Gunicorn \ n^hier \ n "}
Mit ansible 2.2 auf Ubuntu 12.04 LTS
hier ist eine modifizierte Version des techraf des Skripts, das schafft alle die Verzeichnisse und zeigt mein Problem
#!/bin/bash
mkdir -p ./rtindru-test/roles/gunicorn
mkdir -p ./rtindru-test/roles/gunicorn/defaults
mkdir -p ./rtindru-test/roles/gunicorn/handlers
mkdir -p ./rtindru-test/roles/finalize/tasks
cat >./rtindru-test/roles/finalize/tasks/main.yml <<HANDLERS_END
---
- name: Test Handlers
shell: rm {{ gu_log }}
HANDLERS_END
cat >./rtindru-test/roles/gunicorn/handlers/main.yml <<HANDLERS_END
---
- name: Clear Gunicorn Log
shell: rm {{ gu_log }}
HANDLERS_END
cat >./rtindru-test/roles/gunicorn/defaults/main.yml <<DEFAULTS_END
---
gu_log: "/tmp/gunicorn.log"
DEFAULTS_END
cat >./rtindru-test/playbook.yml <<PLAYBOOK_END
---
- name: Deploy
hosts: localhost
tasks:
- include: roles/finalize/tasks/main.yml
handlers:
- include: roles/gunicorn/handlers/main.yml
PLAYBOOK_END
touch /tmp/gunicorn.log
ls -l /tmp/gunicorn.log
ansible-playbook ./rtindru-test/playbook.yml
ls -l /tmp/gunicorn.log
Ausgabe
PLAY [Deploy]
TASK [Setup] ************ ************************************************** ***** ok: [localhost]
AUFGABE [Test Hand lers] ************************************************ ************ fatal: [localhost]: FEHLGESCHLAGEN! => {"failed": true, "msg": "Das Feld 'args' hat einen ungültigen Wert, der eine Variable enthält, die undefined ist. Der Fehler war: 'gu_log' ist nicht definiert \ n \ nDer Fehler erscheint in '/ rtindru-test/roles/finalize/tasks/main.yml ': Zeile 2, Spalte 3, aber möglicherweise \ nweder an anderer Stelle in der Datei, abhängig vom genauen Syntaxproblem. \ n \ nDie betreffende Zeile scheint zu sein: \ n \ n --- \ n- Name: Test Handlers \ n^hier \ n "} erneut zu versuchen, zu verwenden: --limit @/rtindru-Test/playbook.retry
PLAY REKAPITULATION **************** ************************************************** *** localhost: ok = 1 geändert = 0 nicht erreichbar = 0
failed = 1
@techraf Ansible Rollen sollen ziemlich unabhängig sein - und das ist meine "Complete" Rolle. Auf welche weiteren Informationen würden Sie reagieren müssen? – rtindru
Probieren Sie 'gu_log =" /tmp/gunicorn.log "' nur eine Vermutung – popalka
Ihr Inventar und/oder Spielbuch fehlt – Jojo