ansible:在通知处理程序中使用with_items

j0057

我想将变量传递给通知处理程序,但在SO,文档或github存储库中的问题上找不到它的位置,怎么做。我正在做的是部署多个Web应用程序,并且当其中一个Web应用程序的代码更改时,它应重新启动该Web应用程序的服务。

这个SO问题开始,我得到了一些解决:

- hosts: localhost
  tasks:
  - name: "task 1"
    shell: "echo {{ item }}"
    register: "task_1_output"
    with_items: [a,b]
  - name: "task 2"
    debug:
      msg: "{{ item.item }}"
    when: item.changed
    with_items: task_1_output.results

(将其放入test.yml并使用来运行ansible-playbook test.yml -c local。)

但这会记录第一个任务的结果,并有条件地遍历第二个任务的结果。我的问题是,当您有两个或多个需要通知第二个任务的任务时,它会变得混乱!例如,如果更新了代码或更改了配置,请重新启动Web服务。

AFAICT,无法将变量传递给处理程序。那会为我彻底解决它。我在github上发现了一些其他人遇到相同问题的问题,并提出了一些语法,但实际上它们都不起作用。

包含子剧本也不会起作用,因为with_items与一起使用include已被弃用。

在我的剧本中,我site.yml列出了一个小组的角色,然后在该group_vars小组中定义了应该安装的Web应用程序(包括版本)列表。这对我来说似乎是正确的,因为这样我就可以将同一本剧本用于登台和制作。但是,也许唯一的解决方案是多次定义角色,并复制角色列表以进行登台和生产。

那么,这里的智慧是什么?

j0057

我最终通过将应用程序拆分到同一角色的多个实例中来解决了该问题。这样,角色中的处理程序可以引用定义为角色变量的变量。

在site.yml中:

- hosts: localhost
  roles:
  - role: something
    name: a
  - role: something
    name: b

在角色/事物/任务/main.yml中:

- name: do something
  shell: "echo {{ name }}"
  notify: something happened

- name: do something else
  shell: "echo {{ name }}"
  notify: something happened

在角色/事物/处理程序/main.yml中:

- name: something happened
  debug:
    msg: "{{ name }}"

似乎比第一个解决方案要少很多!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章