2017-09-30 8 views
1

Ich benutze Vagrant + Ansible für ein Projekt. Ich möchte es optional machen, dass der Benutzer eine Rolle namens "workspace" bereitstellt, die in die Bereitstellung einbezogen wird. Dies ermöglicht es dem Benutzer, seine eigene bevorzugte Aufforderung Editor zu setzen usw.Ist es möglich, fehlende Rolle in Ansible zu ignorieren?

Wenn eine Rolle, die nicht in einem Textbuch angegeben existiert, die ganze Sache Abstürze mit

ERROR! Die Rolle ‚Arbeitsplatz‘ wurde nicht gefunden ...

ich es einfach möchte, es ignorieren und weitermachen. Ich habe versucht, failed_when: false hinzuzufügen, aber es war nicht überraschend, dass es keinen Effekt hatte. Es ist möglich, eine when: ... Bedingung zu formulieren, die prüfen kann, ob die Rolle existiert? Oder gibt es einen anderen Weg, dies gut zu lösen?

Antwort

0

Mit Blick auf die Dokumentation für Conditionals, ich glaube nicht, es ist direkt möglich zu überprüfen, ob eine Rolle existiert.

Problemumgehung durch Überprüfung, ob ein Verzeichnis für die Rolle vorhanden ist, wäre ein wenig schwierig, da es mehrere Stellen gibt, an denen ansible nach Rollen sucht und einige auf der aktuellen Plattform, Umgebung oder Konfiguration basieren.

Das gesagt, ich versuchte ein etwas anderes Verfahren, das zu funktionieren scheint: Anstatt auf einem vordefinierten Rollennamen zu bestehen, kann man nach einem Rollennamen über eine Variable fragen. Dann können Sie diese Rolle wie diese sind:

- name: Minimal playbook example 
    hosts: localhost 
    connection: local 
    vars: 
    role_name: "" 
    roles: 
    - role: "{{ role_name }}" 
     when: role_name != "" 

Wenn der Benutzer nicht seine eigene Rollennamen liefert, diese Rolle ist nicht inbegriffen. Beachten Sie außerdem, dass dies zur Verwendung eines Standardwerts für eine Rollennamenvariable erforderlich ist. Andernfalls würde das Ansible bei einer undefinierten Variablen fehlschlagen (das Hinzufügen einer is defined Prüfung in eine when-Klausel hilft nicht).

Verwandte Themen