我有一个包含一组Web服务器列表的Ansible变量(所有服务器都在同一主机上):
servers:
- foo
- bar
- baz
一个任务会更改它们的配置文件,并在变量中注册结果:
- name: create server configs
template: ...
with_items: "{{ servers }}"
notify: restart changed servers
register: servers_changed
当任务运行时,重新启动只有更改过的服务器的处理程序:
- name: restart changed servers
command: restart-my-server {{ item.item.name }}
when: item.changed
with_items: "{{ servers_changed.results }}"
我的问题是,我现在需要多个像上面那样的任务,去改变不同的配置文件。但如果我这样做,它们会覆盖servers_changed
变量,因此只有最后一个会被使用。
我可以在每个任务中注册不同的变量,但这样我需要为每个变量编写不同的处理程序。这会变得混乱。有更好的方法吗?
with_items: "{{restart_servers}}"
,从而消除这个when
...? - Wojciech Kaczmarekservers
是一个包含有关每个服务器详细信息的字典列表,但restart_servers
只是标识每个服务器的名称列表。您可以让处理程序循环restart_servers
,但循环servers
可以让它访问有关正在重新启动的每个服务器的详细信息。例如,我让处理程序查看每个服务器的端口号,并等待其变为打开状态后再继续。 - JW.