我正在努力解决在Ansible模板中拉动库存变量的模式,请帮忙。 :)
我正在设置一个监控服务器,我希望能够使用Ansible自动配置服务器。我正在努力使用模板中的循环来允许我这样做。
到目前为止,我的半工作解决方案是在调用我所拥有的模板任务的剧本中:
monitoringserver.yml
vars:
servers_to_monitor:
- {cname: web1, ip_address: 192.168.33.111}
- {cname: web2, ip_address: 192.168.33.112}
- {cname: db1, ip_address: 192.168.33.211}
- {cname: db2, ip_address: 192.168.33.212}
template.yml
all_hosts += [
{% for host in servers_to_monitor %}
"{{ host.cname }}{{ host.ip }}|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
{% endfor %}
]
但这并不理想,因为我无法为要监控的不同服务器定义不同的IP地址。其他人怎么做到这一点?我确信它一定是微不足道的,但我的大脑正在努力学习语法。
由于
艾伦
编辑:澄清生成的模板如下所示:
all_hosts += [
"web1|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
"web2|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
"db1|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
"db2|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
]
我想要的是web1 / web2 / db1 / db2的值会有所不同,具体取决于我使用的是生产清单文件还是开发清单文件。
答案 0 :(得分:29)
理想情况下,您将使用不同的库存文件进行生产和分段,这样可以保留相同的{{ inventory_hostname }}
值,但可以定位不同的机器。
您还可以循环浏览不同的群组...
主机:
[web]
web1
web2
[db]
db1
db2
剧本:
- name: play that sets a group to loop over
vars:
servers_to_monitor: "{{ groups['db'] }}"
tasks:
- template:
src: set-vars.j2
dest: set-vars.js
模板:
all_hosts += [
{% for host in servers_to_monitor %}
"{{ hostvars[host].inventory_hostname }}{{ hostvars[host].ansible_default_ipv4.address }}|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
{% endfor %}
]