我面临的问题是,我需要在ansible中定义一组仅在名称上不同的类似处理程序。
让我举一个例子。下面是一些任务
# tasks/main.yml
- name: Install config of OpenVPN instance 1
notify: restart openvpn-1
...
- name: Install config of OpenVPN instance 2
notify: restart openvpn-2
...
# Multiple more of that pattern.您可能会认为每个实例的配置略有不同,可以在这里处理。
好的。使用处理程序
# handlers/main.yml
- name: restart openvpn-1
systemd:
name: openvpn-server@instance1
state: restarted
- name: restart openvpn-2
systemd:
name: openvpn-server@instance2
state: restarted
# ...您看,这是相当多的重复代码(不太好)。
我想做这样的事情:
# Handler template or so
- name: restart-openvpn-{{ item }}
systemd:
name: openvpn-server@instance{{ item }}
state: restarted
loop:
- "1"
- "2"
# ...这没用,我试过了。
我找到了这个职位,但是这里的工作方式并不像假设任务在loop中运行那样理想。相反,我有一组单独的任务,它们触发处理程序的单个实例。而且,这已经是一个角色。
因此,简短的问题是:如何创建处理程序模板以避免代码冗余?
发布于 2020-04-10 17:03:20
你的代码有效。
例如,我使用了两个服务,并告诉他们使用您的方法重新启动:
- hosts: localhost
connection: local
become: true
tasks:
- name: restart-{{ item }}
systemd:
name: "{{ item }}.service"
state: restarted
loop:
- "whoopsie"
- "wpa_supplicant"O/P为:
PLAY RECAP **********
localhost : ok=2 与代码的主要区别是:添加引号。
根据关于使用变量的不可信文件:
YAML语法要求如果您使用
{{ foo }}启动一个值,则需要引用整行代码,因为它希望确保您没有尝试启动YAML字典。这将在YAML语法文档中进行讨论。 这是行不通的:
https://stackoverflow.com/questions/61144484
复制相似问题