所以我有这个剧本,它检查是否安装了选定的包。没什么特别的。然后我想将输出发送到我的电子邮件,如果一切顺利的话等等。
--- - 名称:安装基本应用程序 主机:库存中的一些主机 成为:是 任务: - 名称:加载全局变量 包含变量: 文件:/etc/ansible/vars/global.yml 名称:全球 - 名称:安装 MC 易于: 姓名: mc 状态:现在 注册:mc - 调试: 变量: mc -名称:安装HTOP 易于: 名称:htop 状态:现在 注册:htop - 名称:安装 TMUX 易于: 名称: tmux 状态:现在 注册:tmux - 名称:安装 VIM 易于: 名称:vim 状态:现在 注册:vim - 姓名:发送电子邮件 邮件: 主机:“{{ global.mail_server }}” 端口:“{{ global.mail_port }}” 主题:基本应用程序安装由 {{ ansible_user_id }} 运行 子类型:html # 主体:目标服务器:{{ ansible_hostname }}
# stav MC - {{ mc.failed }} {{ mc.changed }}
# stav HTOP - {{ htop }}
# stav TMUX - {{ tmux }}
# stav VIM - {{ vim }} 正文:“{{lookup('template','/etc/ansible/templates/mail.j2')}}” 来自:地址 收件人:地址 运行一次: true
简单的 Jinja 模板:
{% for host in play_hosts %} {{ 主持人 }}:
午夜指挥官
- 有什么问题吗?{{ mc.failed }}
- 有任何更改吗?{{ mc.changed}}
顶部
- 有什么问题吗?{{ htop.failed}}
- 有任何更改吗?{{ mc.changed}}
{% 结束 %}
这是我的电子邮件中的输出:
主机1: 午夜指挥官 - 有什么问题吗? 错误 - 有改变吗?是的 顶部 - 有什么问题吗? 错误 - 有改变吗?是的 ________________________________________ 主机2: 午夜指挥官 - 有什么问题吗? 错误 - 有改变吗?是的 顶部 - 有什么问题吗? 错误 - 有改变吗?是的
但只在 host1 上进行了更改。如果我在 host2 上进行更改,则所有地方都会出现 False。这意味着,从 apt 模块注册的变量仅从第一个主机填充。我在这里做错了什么?
答案1
如果我知道您发送电子邮件的具体方式,我会对此更加确定。但我假设您是从 host1 执行此操作。
问题可能是您没有hostvars
正确访问电子邮件模板。
这
{{ mc.failed }}
实际上是
{{ hostvars[inventory_hostname].mc.failed }}
这取决于您从哪个主机运行它。
在模板中尝试这个(使用host
上面的变量):
{{ hostvars[host].mc.failed }}
关于此主题的文档可以在这里找到: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables