ansible:如何在notify中使用with_items中的变量$ {item}?

Mic*_*ael 15 ansible

我是Ansible的新手,我正在尝试创建多个虚拟环境(每个项目一个,在变量中定义的项目列表).

该任务运行良好,我获得了所有文件夹,但是处理程序不起作用,它不会使用虚拟环境初始化每个文件夹.处理程序中的$ {item} varialbe不起作用.使用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}
Run Code Online (Sandbox Code Playgroud)

Ser*_*ter 23

无论什么(逐项子)任务请求处理程序(已更改:结果为yes),处理程序只会被"标记"执行.那时处理程序就像下一个常规任务,并且不知道逐项循环.

一个可能的解决方案不是使用处理程序,而是使用extratask + conditional

就像是

- 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
Run Code Online (Sandbox Code Playgroud)

  • 您还可以创建一个通知处理程序并在其中放置"with_items:task.results".如果您担心丑陋的输出,您可以控制传递给"with_items:"子句的内容,如下所示:"with_items:task.results | selectattr('changed')| map(attribute ='item')| list"(并且不要忘记在"debug:msg = ..."中将"item.item"更改为"item" (4认同)