【发布时间】:2015-08-06 09:23:05
【问题描述】:
我已经用 ansible 玩了将近两个星期了,但我没有弄清楚模板包含与上下文的真正是如何工作的。
默认情况下,包含的模板会传递给当前上下文 [...]
从这个声明中,我尝试了以下方法:
-
在我在服务器上应用的角色中,我导出了一个事实,该事实描述了要在每个主机上实例化的检查(我正在尝试创建一个 smart nagios_server 角色)。
- name: tell nagios what to monitor set_fact: nagios_monitor="{{ nagios_monitor }} dns" 在 nagios 角色中,我渲染了一个主模板,它将在一个文件中实例化所有检查。检查本身在包含的模板中定义。
在角色/nagios_server/tasks/main.yml 中:
- name: configure Nagios checks
template: src="{{ item }}.cfg.j2" dest="/etc/nagios3/conf.d/{{ item }}.cfg"
with_items:
- hosts
- commands
- checks
- defaults
notify:
- restart nagios
在角色/nagios_server/templates/checks.cfg.j2 中:
{% for host in groups['all'] %}
{% set checks = hostvars[host]['nagios_monitor'].strip().split(" ") %}
# Checks for {{ host }}
{% for elmt in checks %}
{% if elmt != "" %}
{% include "checks/"+elmt+".cfg.j2" with context %}
{% endif %}
{% endfor %}
{% endfor %}
在角色/nagios_server/templates/checks/dns.cfg.j2 中:
define service {
host_name {{ host }}
service_description DNS lookup
check_command check_dns_lookup
use generic-service
}
当我运行 playbook 时,出现以下错误:
fatal: [vagrant] => {'msg': "AnsibleUndefinedVariable: One or more undefined variables: 'host' is undefined", 'failed': True}
我错过了什么吗?我应该如何使它工作?
【问题讨论】:
-
如果您想了解更多信息,您可以在github.com/billietl/servconfig找到完整的代码。
-
我把 github repo 移到了github.com/billietl/ansible-playground,所以我可以自己使用 github.com/billietl/servconfig