2013-08-21 8 views
13

私は新しくAnsibleです。いくつかの仮想環境を作成しようとしています(プロジェクトごとに1つ、変数の中で定義されているプロジェクトのリスト)。

タスクは正常に動作しますが、すべてのフォルダを取得できますが、ハンドラは機能しません。仮想環境を持つ各フォルダは初期化されません。ハンドラ内の$ {item}変数は機能しません。 with_itemsを使用するときにハンドラを使用するにはどうすればよいですか?

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} 

答えて

20

ハンドラは、(アイテム化されたサブ)タスクが要求した(実行結果が変更された)場合にのみ、実行のためにフラグが立てられます。 その時点で、ハンドラは次の通常のタスクと同様であり、項目化されたループについてはわかりません。

可能な解決策は、ハンドラではなくextratask +取り組んでいる

- 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

などの条件

何かではありません!しかし、ディクテーションのリストを反復すると、醜い出力が生成されます。あまりにも悪いwith_itemsはPython式をサポートしていません – Radagast

+4

通知ハンドラを作成し、そこに「with_items:task.results」を配置することもできます。醜い出力が心配なら、 "with_items:"句に渡される内容を制御できます。 "with_items:task.results | selectattr( 'changed')| map(attribute = 'item')| list" "debug:msg = ..."の "item.item"を "item"に変更することを忘れないでください) –

関連する問題