Frage Was ist der Unterschied zwischen include_tasks und import_tasks?


In Ansible 2.4 include Modul ist veraltet. An seiner Stelle wird es mit zwei Ersatzmodulen geliefert, import_tasks und include_tasks. Aber sie haben sehr ähnliche Beschreibungen:

  • include_tasks: Enthält eine Datei mit einer Liste von Aufgaben, die im aktuellen Playbook ausgeführt werden sollen.
  • import_tasks: Importiert eine Liste von Aufgaben, die dem aktuellen Playbook zur späteren Ausführung hinzugefügt werden sollen.

Wann sollte ich Ersteres verwenden und wann sollte ich Letzteres verwenden?


35
2017-09-24 16:38


Ursprung


(Außerdem: Die Verwarnungswarnung bezieht sich auf "dynamische" und "statische" Aufgaben. Ich habe die Dokumente gelesen, aber nicht verstanden.) - Ben S


Antworten:


Es gibt einiges zu diesem Thema in der Dokumentation:

Der Hauptunterschied ist:

Alles import* Anweisungen werden zu dem Zeitpunkt vorverarbeitet, an dem die Playbooks analysiert werden.
  Alles include* Anweisungen werden so verarbeitet, wie sie während der Ausführung des Playbooks aufgetreten sind.

So import ist statisch, include ist dynamisch.

Aus meiner Erfahrung sollten Sie verwenden import wenn Sie mit logischen "Einheiten" arbeiten. Zum Beispiel separate lange Liste von Aufgaben in Teilaufgaben-Dateien:

main.yml:

- import_tasks: prepare_filesystem.yml
- import_tasks: install_prerequisites.yml
- import_tasks: install_application.yml

Aber du würdest es benutzen include sich mit verschiedenen Arbeitsabläufen auseinandersetzen und Entscheidungen basierend auf dynamisch gesammelten Fakten treffen:

install_prequisites:

- include_tasks: prerequisites_{{ ansible_os_family | lower }}.yml

44
2017-09-25 06:30



Ich fand diesen Link sehr nützlich: docs.ansible.com/ansible/latest/... Es ruft einen Fall auf, in dem sich Import und Include unterschiedlich verhalten - eine Bedingung, bei der die Tasks in der Datei die Kriterien für die Bestimmung des Imports ändern können. Bei import_tasks überprüft jede Aufgabe die Kriterien. Das Verhalten ändert sich also, wenn sich die Kriterien ändern. Mit include_tasks sind die Tasks entweder vorhanden oder nicht basierend darauf, ob die Bedingung als wahr ausgewertet wurde oder nicht, als die Anweisung include_tasks ausgeführt wurde. Wenn ich es gut verstehe ... - Ethel Evans
Wie war das Verhalten von include? Wenn wir es benutzen würden include würde import_tasks Äquivalent sein? - Andy Shinn
include hätten static: yes (benahm sich wie import_tasks), und static: no (mögen include_tasks). - Konstantin Suvorov
Was ist der Standard für? static? - Andy Shinn
static ist None standardmäßig: Seit Ansible 2.0 sind die Aufgaben dynamisch und verhalten sich mehr wie echte Aufgaben. Dies bedeutet, dass sie geloopt, übersprungen werden können und Variablen aus jeder Quelle verwenden können. Ansible versucht, dies automatisch zu erkennen, aber Sie können die statische Direktive (die in Ansible 2.1 hinzugefügt wurde) verwenden, um die automatische Erkennung zu umgehen. - Konstantin Suvorov