2013-08-21 17 views
13

Ansible için yeni ve birçok sanal ortam (her proje için bir değişkende tanımlanmış projelerin listesi) oluşturmaya çalışıyorum.

Görev iyi çalışıyor, tüm klasörleri aldım, ancak işleyici çalışmaz, sanal ortama sahip her klasörü başlatmaz. İşleyicideki $ {item} varialbe çalışmıyor. Ben_items ile kullandığımda bir işleyiciyi nasıl kullanabilirim?

tasks:  
    - name: create virtual env for all projects ${projects} 
     file: state=directory path=${virtualenvs_dir}/${item} 
     with_items: ${projects} 
     notify: deploy virtual env 

    handlers: 
    - name: deploy virtual env 
     command: virtualenv ${virtualenvs_dir}/${item} 

cevap

20

Eylemciler sadece ne olursa olsun (maddeler halinde alt) görev istekte kez yürütülmesi için 'bayraklı' (vardı değişti: onun sonucunda evet) vardır. O zamanlar, işleyiciler bir sonraki sıradan görevler gibidir ve parçalanmış döngüyü bilmezler.

Muhtemel bir çözüm, bir işleyicisi ile ancak

çalışıyor
- hosts: all 
    gather_facts: false 
    tasks: 
    - action: shell echo {{item}} 
    with_items: 
    - 1 
    - 2 
    - 3 
    - 4 
    - 5 
    register: task 
    - debug: msg="{{item.item}}" 
    with_items: task.results 
    when: item.changed == True 
+0

gibi bir extratask + koşullu

Something değil! Fakat dicts listesinde yinelenen çirkin bir çıktı üretir. Çok kötü with_items python ifadelerini desteklemiyor – Radagast

+4

Ayrıca bir bildirim işleyicisi oluşturabilir ve orada "with_items: task.results" yazabilirsiniz. Çirkin çıktı hakkında endişeleriniz varsa, "with_items:" cümlesine neyin geçtiğini kontrol edebilirsiniz: "with_items: task.results | selectattr ('changed') | map (attribute = 'item') | list" (ve "item.item" öğesini "debug: msg = ..." içindeki "item" olarak değiştirmeyi unutmayın. –