Ansible - Standard / Explicit Tags

8

Ich habe ein Playbook, das verschiedene Rollen enthält und markiert:

%Vor%

Die meisten Tasks verwenden while-Klauseln, um zu bestimmen, auf welchem ​​Betriebssystem sie ausgeführt werden sollen, zum Beispiel:

%Vor%

Wenn ich ansible-playbook base.yml ohne Angabe von Tags ausführen, werden alle Aufgaben ausgeführt. Wenn ich ein Tag festlege, z. B. ansible-playbook base.yml --tags='base' , werden nur die Rollen mit base run gekennzeichnet.

Standardmäßig (wenn keine Tags angegeben sind), möchte ich nur die mit 'base' gekennzeichneten Rollen und nicht die mit 'desktop' markierten Rollen ausführen.

Es wäre auch sehr schön, ein standardmäßiges "os" -Tag zu setzen, basierend auf dem aktuellen Betriebssystem, um zu vermeiden, dass alle Aufgaben für das ubuntu enthalten sind, wenn ich das Playbook auf OSX laufe (und umgekehrt).

Irgendwelche Ideen, wenn das möglich ist und wie ich es machen könnte?

    
nfarrar 01.03.2015, 03:54
quelle

5 Antworten

4

Leider gibt es keine solche Funktion. Das Tag-Handling in Ansible ist derzeit sehr eingeschränkt. Sie können keine Standard-Tags festlegen und Sie können Tags nicht standardmäßig ausschließen.

Es gibt einige Threads in der Google-Nutzergruppe und Feature-Anfragen zu github diesbezüglich. Aber noch kein Ergebnis. Die übliche Antwort ist, dass Sie ein Shell-Skript erstellen und es vor Ihr Playbook stellen sollten. Dieses Skript kann die --tags und --skip-tags entsprechend Ihren Bedürfnissen anpassen. Sehr unangenehm, aber soweit ich weiß, die einzige Option im Moment.

    
udondan 01.03.2015 04:06
quelle
2
  

Wenn ich ansible-playbook base.yml ohne Angabe von Tags ausführe, laufen alle Aufgaben.

Ja, das ist sehr gefährlich. Wenn Sie vergessen, '--tags = xxxxx' hinzuzufügen, kann es unerwünschte Aufgaben ausführen ...

Es gibt eine Problemumgehung, es ist unangenehm, aber es würde verhindern, dass Ihre Aufgaben ausgeführt werden, wenn sich keine Tags in der Befehlszeile befinden.

Sie können --extra-vars verwenden und in Ihrem Playbook verwenden und dann ausführen:

%Vor%

Und in deinem Spielbuch:

%Vor%

Das Ergebnis:

%Vor%     
sirkubax 08.03.2015 21:28
quelle
2

Ich benutze Kommandozeilen-Überschreibungen ( -e ), um dies zu erreichen:

%Vor%

Anstatt desktop als Tag zu definieren, könnte es stattdessen als Variable mit einem Standardwert von false definiert werden. Dann ersetzen Sie für Rollen, bei denen desktop den Wert true hat, das Tag durch eine when -Klausel. Das in der Frage angegebene Playbook könnte folgendermaßen umgeschrieben werden:

%Vor%

Dies ist wahrscheinlich nur eine vereinfachte Version einer der vorhandenen Antworten. Wie bereits an anderer Stelle erwähnt, sind Tags zu diesem Zeitpunkt nicht die Antwort, um bestimmte Aktionen so zu verzögern, dass sie nicht ausgeführt werden, sofern nicht explizit etwas angegeben wird. Variablen dagegen sind dafür perfekt geeignet.

    
Alex Peters 08.05.2015 01:58
quelle
1
  

Es gibt noch 3 spezielle Schlüsselwörter für die Tags 'tagged', 'untagged' und 'all', die nur getaggt, nur unmarkiert und alle Aufgaben ausführen.   Standardmäßig läuft ansible so, als ob '-tags all' angegeben wurde.

Sie können die Dokumente hier überprüfen: Ссылка

    
Vishesh Jindal 23.11.2016 10:01
quelle
0

Der Grund für die Standardeinstellung ist: Ich möchte in meinem häufigsten Anwendungsfall so wenig wie möglich tippen. Also ich denke was OP eigentlich will ist:

Gibt es Möglichkeiten, Basisaufgaben mit möglichst wenigen Argumenten auszuführen.

Wie andere darauf hingewiesen haben, gibt es kein "Standard" -Tag in ansible. Aber es gibt immer Wege.

Der erste Weg ist einfach das Skript zu verwenden, um es zu umbrechen Schreiben Sie eine run.sh wie folgt:

%Vor%

Es ist viel kürzer, ./run.sh anstelle des vollständigen Befehls einzugeben.

Der zweite Weg ist für die Menschen, die nach der reinen antwortbaren Lösung suchen. Sie können zwei Playbooks haben wie:

base.yml

%Vor%

desktop.yml

%Vor%

Führen Sie für Nur-Base-Aufgaben ansible-playbook base.yml ; Führen Sie für Desktop-Aufgaben nur ansible-playbook desktop.yml ; Führen Sie für alle Aufgaben ansible-playbook base.yml desktop.yml
aus Es ist auch fehleranfälliger als das Definieren eines "Standard" -Tags.

OP möchte auch ein Standard-OS-Tag. Das ist mit when

einfach zu erreichen %Vor%

mit when , Sie müssen nichts in der Befehlszeile eingeben, ansible erkennt den Typ und führt entsprechende Aufgaben für Sie aus.

    
Ding-Yi Chen 11.07.2017 04:09
quelle

Tags und Links