我已经以 yaml 格式设置了库存文件,并希望将有关事件的邮件推送给不同的收件人。 F.e.我希望能够发送与我的清单文件的子组不同的邮件。
这是我的示例库存文件:
---
linux:
children:
groupA:
vars:
mail: [email protected]
hosts:
host_node01:
ansible_host: 10.0.10.2
groupB:
vars:
mail: [email protected]
hosts:
host_node02:
ansible_host: 10.0.20.2
这是我的示例剧本,仅获取 var 的输出来检查一切是否正常:
---
- name: Debugging
hosts: linux
gather_facts: true
tasks:
- name: debug stuff1
debug:
msg: "{{ inventory_hostname }} has Mail: {{ mail }}"
when: "inventory_hostname in groups['groupA']"
- name: debug stuff2
debug:
msg: "{{ inventory_hostname }} has Mail: {{ mail }}"
when: "inventory_hostname in groups['groupB']"
如果我运行此剧本,它会告诉我变量邮件在“debug stuff2”任务中不可用。
我尝试在谷歌上搜索“在多个组上使用相同的 group_var for ansible”,但找不到任何有用的东西,也许我只是没有寻找正确的语法,因为我对 Ansible 还很陌生。
我知道我可以执行多个任务之类的操作,并将电子邮件地址硬编码到任务中,并使用“何时”来检查 inventory_hostname 是否在特殊组中,但这会大大破坏整个剧本。
编辑:错误消息的输出:
FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'mail' is undefined. 'mail' is undefined"}
好吧,忘了它吧...它按预期工作,我不记得在运行作业之前,我的库存文件必须与我的 cronjob 同步到我自己的本地 git 存储库中的 ansible 主机...这就是为什么缺少变量。