【问题标题】:Ansible loop through group vars in templateAnsible 循环遍历模板中的组变量
【发布时间】:2015-01-15 08:33:37
【问题描述】:

我正在努力解决在 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}

模板.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 的值根据我使用的是生产库存文件还是开发库存文件而有所不同。

【问题讨论】:

  • 你能添加你想要的实际结果吗?
  • 谢谢拉蒙,添加了一个编辑来澄清:)
  • 我现在设法通过创建两个 group_var dirs monitor-dev 和 monitor-pub 来解决这个问题,然后让游戏簿使用所有角色,并且生产的库存文件调用特定的组变量。不过好像不太对:)
  • 你能澄清一下吗?你说“我正在设置一个监控服务器”,然后是“不同的监控服务器的不同 IP 地址”虽然这可能并不重要,但你设置了多少台服务器?另外,我在您提供的结果语法中看不到 IP。这有点令人困惑。您在哪里需要 IP 地址?
  • 对不起,我是个白痴 :) 我已经更新了问题

标签: jinja2 ansible ansible-playbook


【解决方案1】:

理想情况下,您将使用不同的库存文件进行生产和暂存,这将允许您保持相同的 {{ 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 %}
] 

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
相关资源
最近更新 更多