2016-10-12 5 views
1

definierten Abhängigkeiten ausgeführt habe ich eine Rolle wp-vhost, die hat eine Rolle, die sie abhängig von:Run ansible Rolle ohne in der Meta-Rolle

// roles/wp-vhost/meta/main.yml 
--- 
dependencies: 
    - { role: nginx } 

Jedes Mal, wenn ich wp-vhost laufen, die nginx Rolle wird auch ausgeführt werden. Ich verstehe, dass dies in Ordnung ist und es ein gewünschtes Verhalten ist.

jedoch während meiner lokalen Entwicklung wird die Zeit zum Ausführen der nginx Rolle unnötig verloren, wenn ich nur die Aufgaben in wp-vhosts definiert ausgeführt werden soll, da ich weiß, dass nginx vor gelaufen war und Set-up für wp-vhost die notwendige Umgebung.

Gibt es eine Möglichkeit, ein Playbook mit Rollen auszuführen, ohne Rollenabhängigkeiten auszuführen?

Antwort

1

Die Art, wie ich dies tun würde, ist zu verwenden und sie auf Ihren spezifischen Code "wp-vhost" anzuwenden.

Ihre wp-vhost Rolle der Haupt-Textbuch in main.yml ist Angenommen, ein gutes Muster der eigentlichen Aufgaben in ein Sub-Textbuch so etwas wie wp-vhost.yml genannt zu spinnen ist, eingeschlossen von main.yml, so dass der nicht-nginx Code wird einen Tag, das wird nicht auf die Nginx-Rolle angewendet. In diesem Fall:

- include: wp-vhost.yml 
    tags: wp-vhost 

Um einen Tag für jeden Batzen ansible Code zu verwenden (ob eine eingeschlossene Aufgaben-Datei oder eine Rolle), versucht, jede Rolle in dependencies wie dies erwähnte Schreiben:

- role: nginx 
    tags: nginx 

Wenn im Testmodus, die Sie gerade die wp-vhost bestimmte Teile wie folgt ausführen können:

$ ansible-playbook --tags wp-vhost main.yml 

Oder Sie können das ganze Textbuch einschließlich Abhängigkeiten wie folgt ausführen - Standard laufen alles ignoriert tags:

$ ansible-playbook main.yml 

Dies macht es einfach, schnell nur Teile eines komplexen Satz von Cascading Rollen laufen und Dateien umfassen bei der Prüfung, und auch die Rolle wp-vhost normalerweise Abhängigkeiten in anderen Rollen verwenden.

Auswirkungen auf die Rollenstruktur

sorgfältige Verwendung von Tags keine Rolle Struktur beeinflussen oder gar verwenden, und Sie würden normalerweise Tags verwenden, nur zum Testen.

Für komplexere Rollen, ist es üblich, die Aufgaben in separate Dateien in jedem Fall zu strukturieren, die main.yml einfach zu halten, wie folgt aus:

- name: Set up base OS 
    include: base_os.yml 
    tags: base_os 

- name: Ensure logs are rotated 
    include: logrotate.yml 
    tags: logrotate 

- name: Create users and groups 
    include: users_groups.yml 
    tags: users_groups 

Lösung ohne Dateien enthalten

Wenn Wenn Sie die wp-vhosts-Verwendung von Include-Dateien nicht ändern möchten, müssten Sie Blöcke im Playbook (Ansible 2.0+) verwenden:

Beachten Sie, dass die letzte tags: mit der block: ausgerichtet ist und somit für alle Aufgaben in diesem Block gilt.Das ist sauberer als das Teilen des Playbooks in mehrere Spiele.

Non-tag Alternative

können Sie verwenden, um eine when: Bedingung on the role invocation in den wp-vhost Rolle Abhängigkeiten und definieren eine Variable wie debug_mode diese zu steuern. Eine solche Debug-/Testlogik führt jedoch zu einer Unübersichtlichkeit Ihrer Codebasis im Vergleich zur Definition eines Tags pro Rollenaufruf oder Task-Datei.

+0

Hi @RichVel, ist der obige Ansatz im Wesentlichen gleichbedeutend damit, keine Abhängigkeiten für die Rolle "wp-vhost" im Meta der Rolle zu definieren? Wenn ich 'wp-vhost'role in ein separates Playbook mit einzelnen Aufgaben verwandle, ist es keine Rolle mehr, die geteilt, importiert, als Abhängigkeit usw. definiert werden kann. Meine Absicht ist es,' wp-vhost' und 'nginx' beizubehalten als separate Rollen statt separate Playbooks/Sammlungen von enthaltenen Aufgaben. Vielleicht, was ich erreichen möchte (gelegentlich eine Rolle ohne seine Abhängigkeiten zu betreiben), ist mit Ansible nicht einfach zu erreichen. Es sei denn, ich habe etwas falsch gemacht. – luqo33

+0

@ luqo33 - Wenn Sie keine Tags angeben, funktioniert die Rolle "wie geplant" mit Nginx-Abhängigkeit. Normalerweise würden Sie Tags nur dann angeben, wenn Sie möchten, dass ein Shortcut einen Teil der Rolle/Aufgaben ausführt - die Tags sind vollständig optional und verhindern nicht, dass die Rolle als Abhängigkeit verwendet wird. Ich habe die Antwort am Ende mit einem Beispiel aktualisiert. – RichVel

+0

Nochmals vielen Dank, ich habe festgestellt, dass Sie mit Ihrem Ansatz Rollen ohne Abhängigkeiten ausführen können. Es gibt jedoch eine Anmerkung, die besagt, dass, wenn das Haupt-Playbook Rollen auflistet und nicht solche wie: '- {role: wp-vhosts, tags: [vhosts]}', wird das "vhosts" -Tag IMMER ausgeführt die Rollenabhängigkeiten, da sich das Tag hier auf die gesamte Rolle (und ihre Abhängigkeiten) bezieht. Die Lösung besteht also darin, das Tag in der Haupt-Playbook-Datei loszuwerden und die Tags stattdessen auf einzelne Aufgaben in dieser Rolle anzuwenden (vorzugsweise mithilfe von vorgeschlagenen include-Anweisungen). Folglich hat dies Auswirkungen auf die Rollenstruktur. – luqo33

Verwandte Themen