Ich stelle derzeit ein neues Produkt bereit und bin auf einige Probleme bei der Strukturierung meines Playbooks und meiner Rollen gestoßen. Ich habe drei verschiedene Lösungen und hoffe, einen Input zu bekommen, welcher Weg der beste sein könnte.
Das Produkt ist eine Webanwendung auf einem Windows-Server. Die folgenden Schritte sind für die Bereitstellung erforderlich (hohe Ebene):
- installiere javajdk
- Tomcat installieren
- Installieren Sie win_service
- Java Regkes konfigurieren
- Tomcat konfigurieren
- Installieren Sie die Webanwendung
- Dienst starten
Ich benutze statische Inventare für Prod und Staging, group_vars, Rollen (erstellt mit ansible-galaxy), damit es eine Art Struktur gibt.
Lösung 1
Legen Sie alles in ein riesiges Spielbuch. Das hört sich nicht gut an, hat aber den Vorteil, dass Sie die Variablen aus früheren Installationen kennen, z. B. tomcat
wissen müssen, wo JAVA_HOME
sich ... das war bei der javajdk
Installation, da mehr als ein Java auf den Maschinen vorhanden ist, gibt es kein globales JAVA_HOME
...
Lösung 2
Brechen Sie alles in kleinen Rollen aus. Klingt gut, aber die Rollen sollten unabhängig voneinander sein. Ich habe keine Methode gefunden, um Aufgaben zu entkoppeln. Wäre es sinnvoll zB für einzelne Rollen zu haben install_tomcat
, config_tomcat
und ein Textbuch eingerichtet, die die genannten Rollen in Folge hat?
Aber woher weiß eine Rolle, z. B. einen Pfadnamen, der in der nächsten Rolle benötigt wird? -> Die Installation legt den Pfad fest, den die Konfiguration kennen muss. Ich bin mir nicht sicher, ob ich Rollen unabhängig machen soll.
Lösung 3
Art der Lösung 2. Haben Sie ein Hauptspielbuch, das nur Rollen enthält, und teilen Sie es so weit wie möglich in Rollen auf. Haben Sie unabhängige Variablennamen in./roles/vars/main.yml
Irgendwie (?) Finden Sie einen höheren Platz in der variablen Priorität des Playbooks, wo alle erforderlichen var
Definitionen abgelegt werden. Intern entweder eine Variable zur Rolle führen oder eine Rollenvariable einfach überschreiben.
Wenn ein Produkt beispielsweise einen Service hat, ist der Servicename im Allgemeinen Teil eines Pfadnamens für tomcat
. Der tomcat
Name sollte nicht vom Service abhängen, daher sollte es einen tomcat_install_path
in der Rolle geben, aber auch einen service_name
mit dem Produkt. Wenn also das Playbook für das Produkt heißt, dass der Dienstname Teil des Namens sein sollte, sollte der Name tomcat_install
mit einer völlig anderen Bereitstellung aufgerufen werden, und es sollte kein Fummeln mit einem Dienstnamen erfolgen.
Ich würde mit Lösung 3 gehen, aber ich habe noch keinen Weg gefunden, dies einzurichten. Was ist die Meinung der Experten, ist Lösung 3 machbar, ist eine der anderen einmal besser oder gibt es eine vierte Lösung?