Ansible循环通过模板中的组变量

Ala*_*lis 20 jinja2 ansible ansible-playbook

我正在努力解决在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}
Run Code Online (Sandbox Code Playgroud)

template.yml

all_hosts += [
           {% for host in servers_to_monitor %}
                   "{{ host.cname }}{{ host.ip }}|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/",
           {% endfor %}
] 
Run Code Online (Sandbox Code Playgroud)

但这并不理想,因为我无法为要监控的不同服务器定义不同的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 + "/",
]
Run Code Online (Sandbox Code Playgroud)

我想要的是web1/web2/db1/db2的值是不同的,这取决于我使用的是生产清单文件还是开发清单文件.

Con*_*ado 36

理想情况下,您将使用不同的库存文件进行生产和分段,这将允许您保持相同的{{ inventory_hostname }}值,但目标是不同的机器.

你也可以循环遍历不同的组...

主机:

[web]
web1
web2

[db]
db1
db2
Run Code Online (Sandbox Code Playgroud)

剧本:

- 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
Run Code Online (Sandbox Code Playgroud)

模板:

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 %}
] 
Run Code Online (Sandbox Code Playgroud)