2015-02-09 19 views
6

ben arasında yineleme istediğiniz veri sözlüğü-tip ve düzeni korur önemlidir:Nasıl yanıtlayıcı 'in with_dict sırasını uygulamak için?

with_dict_test: 
    one: 1 
    two: 2 
    three: 3 
    four: 4 
    five: 5 
    six: 6 

Şimdi anahtarlarını ve değerlerini yazdırmak için bir görev yazarken, onlar (görünüşte rastgele sırayla yazdırılır 6, 3, 1, 4, 5, 2).

--- 
- name: with_dict test 
    debug: msg="{{item.key}} --> {{item.value}}" 
    with_dict: with_dict_test 

Verilen sırada yinelemek için Ansible'ı nasıl zorlayabilirim? Yoksa with_dict'dan daha uygun bir şey var mı? Gerçekten onların karma tuşlarının sırasından orada sırasını belirlemek olarak dicts kullanımı kolay bir yol göremiyorum anahtarı ve görev yürütme sırasında değer ...

cevap

7

de ihtiyacım var. Sadece with_items ile with_dict yerine

with_dict_test: 
    - { key: 'one', value: 1 } 
    - { key: 'two', value: 2 } 
    - { key: 'three', value: 3 } 
    - { key: 'four', value: 4 } 
    - { key: 'five', value: 5 } 
    - { key: 'six', value: 6 } 

ve oyun kitabında:
Aşağıdaki yapabilirsiniz

--- 
- name: with_dict test 
    debug: msg="{{item.key}} --> {{item.value}}" 
    with_items: with_dict_test 

çirkin bu çözümü (değişkenin deklarasyonu) bulursanız, yapabileceğiniz Bu:

key: ['one', 'two', 'three', 'four', 'five', 'six'] 
values: [1, 2, 3, 4, 5, 6] 

ve oyun kitabında

--- 
- name: with_dict test 
    debug: msg="{{item.0}} --> {{item.1}}" 
    with_together: 
    - key 
    - value 
+0

teşekkürler. Siparişin hashed anahtarları tarafından verildiğini bilmiyordum. Bu herhangi bir yerde belgelenmiş mi? – dokaspar

+0

Tüm oyun kitabı bir yaml belgesidir. Sadece piton nesneleri içine ayrıştırılır nasıl olduğunu görmek için http://pyyaml.org/wiki/PyYAMLDocumentation de bakabilirsiniz. –

2

Tamamen emin değilim, ama belki bu yol boyunca size yardımcı olacaktır: Ben size bir şekilde sıralamak üzerinde karmaşık değerleri Jinja filtreyi kullanabilirsiniz farz ediyorum

- hosts: localhost 
    vars: 
     dict: 
     one: 1 
     two: 2 
     three: 3 
     sorted: "{{ dict|dictsort(false,'value') }}" 

    tasks: 
     - debug: 
      var: sorted 
     - debug: 
      msg: "good {{item.1}}" 
     with_items: sorted 

. Eğer kontrol edebilirsiniz başka bir şey dict.values()|list ve with_sequence birleştirerek, ancak o taştan süt şey tam olarak çığlık olmaz "sürdürülebilir." bilgi için

+0

İlginç bir yaklaşım. Ancak, 'with_dict_test' örneğim sadece gösterim amaçlıdır. nedense bir dict başa _had_ kabul - Gerçekte, ben girişleri dosyasında verilen sıraya göre sıralanır, ne anahtarları tarafından ne de Bunun için üzgünüm @dokaspar değerlere ... – dokaspar

+0

sıralanabilir istiyorum (örn. başka bir görevden kayıtlı değişken) –