2016-12-14 2 views
0
inventories/ 
    production/ 
     hosts.yml   # inventory file for production servers 
     group_vars/   # contains global variables for microservices 

webservers.yml  

roles/ 
    webservers/ 
     tasks/    
     main.yml   # has include statements for all the other files in tasks 
     microservice1.yml 
     microservice2.yml 
     install_certificates.yml 
     etc 
    vars/     # contains variables for each microservice 

Das ist meine aktuelle Verzeichnisstruktur. Anfangs habe ich es so eingerichtet, dass das webservers.yml-Playbook einen neu bereitgestellten Webserver vollständig bereitstellen wird ... also installiere Apache, PHP, Zertifikate und alle Microservice-Sites.nur Teilmengen einer Rolle aufrufen?

Was ich frage mich ist, was ist der beste Weg, um nur Teilmengen der Webserver-Rolle ausführen zu erreichen? Wie wenn ich nur die microservice1.yml Aufgaben ausführen möchte und sonst nichts. Ist das mit der aktuellen Inventarstruktur machbar oder muss ich jede Aufgabe zu ihrer eigenen Rolle machen und sie alle in webservers.yml einbinden? Welcher Weg wäre besser?

Antwort

0

Der einfachste und beabsichtigte Weg, dies zu erreichen, ist die Verwendung von Tags. Sie fügen den Regeln, die Sie gruppieren möchten, denselben Tag hinzu und führen dann ansible aus, sodass nur die auf diese Weise markierten Regeln ausgeführt werden.

Zum Beispiel wird diese Regel mit "usersetup" getaggt

- name: Create user groups 
    group: name={{ item.username }} state=present 
    with_items: "{{ my_items }}" 
    tags: [ "usersetup" ] 

Wenn Sie Ihr Textbuch wie folgt ausführen:

ansible-playbook -i hosts --ask-become-pass site.yml --tags usersetup

nur mit usersetup getaggt Regeln ausgeführt. Beachten Sie, dass Sie einer Regel mehrere Tags hinzufügen können, indem Sie sie durch Kommas trennen.

+0

Also ich denke, ich muss dann entscheiden, ob ich die Tags oder einzelne Rollen bevorzuge. Vielen Dank. –