16

私は 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}
4

2 に答える 2

23

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

考えられる解決策は、ハンドラーではなく、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
于 2013-08-21T22:43:36.493 に答える