2015-01-22 20 views
15

ürününde bir öğe bulunup bulunmadığını kontrol etme Sağlanan versiyonun desteklenen bir sürüm olup olmadığını kontrol etmeye çalışıyorum. Bir değişkende kabul edilebilir sürümlerin listesini belirledim ve sağlanan sürüm listede değilse, görevden çıkmak istiyorum. Ancak, bunu nasıl yapacağımdan emin değilim.Ansible

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

ve

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

    - name: continue with rest of tasks... 

Üstü yapmak istediğim şeyin sıralama, ama bir yatırım projesi için bir satır yolu için çağrı var "listesi içerir" buysa anlamaya edemedik başarısız modül.

cevap

43

Koşullarda {{}}'a ihtiyacınız yoktur. Ne arıyorsunuz:

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

nu nerede kullanabilirsiniz? – thisjustin

+0

Bu sadece tam dizgi eşleşmeleri için çalışır :( – xenithorb

+0

Aslında bu jinja2'nin bir özelliği ve bu nedenle belgelerinde bulunur. Bkz. Http://jinja.pocoo.org/docs/2.9/templates/#other-operators – teissler

4

Ansible 1.6'dan beri version_compare filtresine sahiptir. Sen when koşullu aşağıda gibi bir şey yapabilirsiniz:

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

Bu büyük & minör versiyonları karşılaştırmalar için destekleyecek verecek ve sizin gibi operatörlerini kullanarak sürümleri karşılaştırabilirsiniz:

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

Sen Bununla ilgili daha fazla bilgiyi şu adreste bulabilirsiniz: Ansible - Version comparison filters

O eğer gerçekten basit bir durumunuz varsa, @ ProfHase85'in önerdiği

+0

Farkettim Bu benim araştırmam sırasında, ama bunu tercih etmeme sebebim, süreksiz Ie 2, 7, 10, 11 olabilecek rasgele bir listeyi destekleyebilmek istedim çünkü operatörlerin çılgın kombinasyonunu oluşturmak zorunda kalmak istiyorum – Shark