2016-06-22 33 views
5

Bütün döngü Ansible'da atlamak istiyorsam ne yapmalıyım?Bütün döngüyü atla Ansible

yönergelere göre

,

(Loops bakınız) with_items ile when birleştirerek ederken, ... when ifadesi her öğe için ayrı ayrı işlenir. Ben bir koşul her defasında kontrol edilmesi istemiyoruz Oysa o

--- 
- hosts: all 
    vars: 
    skip_the_loop: true 
    tasks: 
    - command: echo "{{ item }}" 
     with_items: [1, 2, 3] 
     when: not skip_the_loop 

gibi taktik kitabı çalıştıran Böylece ederken

Ben

skipping: [localhost] => (item=1) 
skipping: [localhost] => (item=2) 
skipping: [localhost] => (item=3) 

olsun.

Sonra satır içi koşullarını

- hosts: all 
    vars: 
    skip_the_loop: true 
    tasks: 
    - command: echo "{{ item }}" 
     with_items: "{{ [1, 2, 3] if not skip_the_loop else [] }}" 

Benim sorunu çözmek gibi görünüyor kullanma fikri ile geldi, ama sonra çıktı olarak bir şey olsun.

skipping: Loop has been skipped 
+0

Sana daha iyi bir sonuç elde edebilirsiniz sanmıyorum: tasks/ yere Oysa

hosts: all vars: skip_the_loop: true tasks: - include: loop when: not skip_the_loop 

loop.yml adlı bir dosya varsa senin ikincisinden. – SztupY

+0

@SztupY'ye yazdırılmış bir şeye ihtiyacınız varsa, daha sonra bir hata ayıklama ifadesi ekleyebilirsiniz, ancak bunu zaten yaptım, ama yine de istenen sonuç değil, ne yazık ki –

+0

herhangi bir koşulun koşmasını istemediğiniz herhangi bir nedenden dolayı loop? Sadece çirkin çıktı yüzünden mi yoksa koşullu kontroller çok fazla zaman/kaynak aldığından mı? Çoğunlukla çirkin çıktı nedeniyle – SztupY

cevap

2

Sen yanıtlayıcı 'yanıtlayıcı' 2 en blocks ile sadece bir kez durumunu değerlendirmek yapmak mümkün olmalıdır: Ve söylememde sadece bir satır istiyorum.

display_skipped_hosts=True 

sizin ansible.cfg file için: udondan belirttiği gibi bu hala gösterecektir

--- 
- hosts: all 
    vars: 
    skip_the_loop: true 
    tasks: 
    - block: 
     - command: echo "{{ item }}" 
     with_items: [1, 2, 3] 
     when: not skip_the_loop 

çıktıyı bastırmak istiyorsanız ekleyebilir, her öğenin her konak için atlanır ama.

+0

İstediğim gibi görünüyor, ama yine de çıktıyı bastırmıyor. Çıktı, her görevi atlamakla ilgili, bloğu atlamakla ilgili değil. Çıkışı geçersiz kılacak bir yol var mı? –

+0

Bu gerçekten işe yarıyor mu? '' Ne zaman '' bloğun içerdiği görevlere geçtiğini düşünürdüm. Ama eğer bu işe yarıyorsa harika! – udondan

+0

@NickRoz Görev düzeyinde çıktıyı kaldıramazsınız. Anlaşılabilir yapılandırmanızda global olarak atlanan görevlerin çıktısını devre dışı bırakabilirsiniz, ancak http://docs.ansible.com/ansible/intro_configuration.html#display-skipped-hosts – udondan

0

Bu durum ile birlikte include kullanılarak kolayca yapılabilir:

- command: echo "{{ item }}" 
    with_items: [1, 2, 3]