2015-01-22 24 views
15

Ich versuche zu überprüfen, ob die gelieferte Version eine gültige unterstützte Version ist. Ich habe die Liste der zulässigen Versionen in einer Variablen festgelegt, und ich möchte die Aufgabe nicht ausführen, wenn die angegebene Version nicht in der Liste enthalten ist. Ich bin mir jedoch nicht sicher, wie ich das machen soll.Überprüfen Sie, ob eine Liste ein Objekt in Ansible enthält

#/role/vars/main.yml 
--- 
    acceptable_versions: [2, 3, 4] 

und

#/role/tasks/main.yml 
--- 
    - fail: 
     msg: "unsupported version" 
     with_items: "{{acceptable_versions}}" 
     when: "{{item}} != {{version}}" 

    - name: continue with rest of tasks... 

Above ist eine Art von dem, was ich tun will, aber ich habe nicht in der Lage gewesen, um herauszufinden, ob es ein eine Zeile Weg, eine bauen „-Liste enthält“ rufen das Fehlermodul.

Antwort

43

Sie brauchen nicht {{}} in wenn Bedingungen. Was Sie suchen ist:

- fail: msg="unsupported version" 
    when: version not in acceptable_versions 
+8

Wo ist das dokumentiert? – thisjustin

+0

Dies wird nur für genau Zeichenfolge arbeiten Spiele :( – xenithorb

+0

Eigentlich ist das ein Merkmal jinja2 ist und daher in ihrer Dokumentation Siehe http://jinja.pocoo.org/docs/2.9/templates/#other-operators – teissler

4

ansible einen version_compare Filter seit 1.6 hat. Sie können in when bedingt etwas wie unten tun:

when: ansible_distribution_version | version_compare('12.04', '>=')

Dies wird Ihnen für die wichtigsten & kleinere Versionen Vergleiche unterstützen und Sie können wie Versionen mit Operatoren vergleichen:

<, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne

Sie Hier finden Sie weitere Informationen: Ansible - Version comparison filters

O Wenn Sie einen wirklich einfachen Fall haben, können Sie auch verwenden, was @ ProfHase85 vorgeschlagen

+0

ich bemerkte, dies während meiner Forschung, aber der Grund, warum ich mich nicht dafür entschieden habe, ist, weil ich in der Lage sein wollte, eine zufällige Liste von # zu unterstützen, die diskontinuierlich sein könnte, zB 2, 7, 10, 11, und ich nicht Ich möchte eine verrückte Kombination von Operatoren konstruieren – Shark

Verwandte Themen