2016-06-26 13 views
1

Ich habe dieses in meinem all.yml nicht tagger.yml laufen kann (obwohl, wenn tagger.yml läuft direkt es funktioniert)ansible 2 include andere yml nicht funktioniert, obwohl direkter Aufruf funktioniert

--- 
    - name: run couple of ymls 
    hosts: all 
    tasks: 
     - include: "./tagger.yml" 
     #- include: ./fluentd.yml 

tagger.yml

--- 
    - name: tagger - build docker 
    hosts: all 
    tags: 
     - all 
     - tagger 
.... 

Fehler ist

fatal: [localhost]: FAILED! => {"failed": true, "reason": "no action detected in task. This often indicates a misspelled module name, or incorrect module path.\n\nThe error appears to have been in '.Build/tagger.yml': line 2, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n---\n - name: tagger - build docker\n ^here\n\n\nThe error appears to have been in '.Build/tagger.yml': line 2, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n---\n - name: tagger - build docker\n ^here\n"} 

Antwort

1

ansible zwei „Ebenen“ hat, ist das Textbuch Ebene, wo man spielt liefern kann, die andere ist die Aufgabe Ebene, wo Sie Aufgaben liefern . Das Include funktioniert auf beiden Ebenen, Sie können jedoch keine neuen Wiedergaben einfügen, wenn Sie bereits auf der Aufgabenebene sind.

Zum Beispiel ist dies in Ordnung:

main.yml 

--- 
- include: play1.yml 
- include: play2.yml 

play1.yml 

---- 
- name: run couple of tasks on all hosts 
    hosts: all 
    tasks: [{debug: {msg: "Task1"}}] 

play2.yml 

---- 
- name: run some more tasks on some hosts 
    hosts: some 
    tasks: [{debug: {msg: "Task2"}}] 

Wie hier im main.yml Sie noch im Textbuch Ebene sind, so können Sie die Dateien enthalten, die auch selbst Playbooks. Dies bedeutet, dass Sie einfach play1.yml getrennt von ansible-playbook jederzeit auch ausführen können.

Aber, sobald Sie auf Taskebene sind, können Sie nur Dateien enthalten, die nur Aufgaben enthalten:

main.yml 

--- 
- name: run couple of ymls 
    hosts: all 
    tasks: 
    - include: "task1.yml" 
    - include: "task2.yml" 

task1.yml 

--- 
- name: An actual command 
    debug: { msg: "Task 1" } 

task2.yml 

--- 
- name: An other actual command 
    debug: { msg: "Task 2" } 

Dies ist auch in Ordnung, da beide task1.yml und task2.yml Dateien nur Aufgaben enthalten, und sie sind nicht vollwertige Spielbücher. Der Versuch, sie separat mit ansible-playbook auszuführen, wird nicht mehr funktionieren, da es sich nur um eine Reihe von Aufgaben handelt. Wenn Sie in diesem Beispiel play1.yml anstelle von task1.yml einschließen würden, würde das Playbook fehlschlagen, da Sie sich bereits auf der "Aufgaben" -Ebene befinden, von wo aus Sie keine weiteren Playbooks importieren können.

+0

Dank für die detaillierte Antwort - versucht, und jetzt funktioniert es! – user1025852

0

entfernen Sie die hosts von Ihrem tagger.yml Datei:

--- 
    - name: tagger - build docker 
    whatever task here 
    tags: 
     - all 
     - tagger 

Hoffnung, die Ihnen helfen,

+0

danke :) funktioniert nicht ... sogar entfernt die Tags von tagger.yml – user1025852

+0

nicht Tags, aber die 'Hosts' entfernen und zeigte das Ergebnis/Fehler und Konfiguration –

+0

richtig - Ich entfernte auch die Hosts. versuchte viele Dinge - ich denke, es hängt mit der Sache zusammen, die ich nicht haben kann "Aufgaben" Abschnitt sowohl bei Eltern oder Kind (oder etwas ..) immer noch – user1025852