我使用 Ansible 部署了大量主机 - 效果确实很好。每个主机都有自己的设置和配置。
现在我想为使用这些主机的另一个系统生成一个配置文件。为此,我需要为每个主机生成一部分配置(配置数据库的配置)。
下面是两个主机具有不同配置且另一个系统使用 Ansible 生成的配置的一部分的情况的示例:
主机1
ansible 配置 dbA
主机2
ansible 配置 dbQ
另一个系统:
主机1 = dbA
主机2 = dbQ
如果它属于不同的集群等,则值的计算方式会有所不同(例如dbQ
,而不是),因此仅从中读取主机配置是不切实际的。我相信我需要遍历主机并让 Ansible 找出变量的计算值,就像部署时一样,但我不知道如何将结果放在一个模板中。dbB
host2
host_vars
请指教 :)
答案1
如果我理解您的情况正确,您可能能够使用 set_fact 和/或模板的组合来执行此操作,然后循环遍历所有主机。例如,假设您有一个定义如下的任务:
- name : Configure database
command: /path/to/some/script {{ inventory_hostname }} {{ some_var }} {{ some_other_var }}
您可以使用 set_fact 将这些值与相关主机关联:
- name: Stash the variables for later use
set_fact:
var_1 : {{ some_var }}
var_2 : {{ some_other_var }}
host_and_var : "{{ inventory_hostname }}-{{ some_var}}"
etc.
然后,当需要创建配置文件时,您将有一个模板操作或 local_action 来生成配置文件。模板将包含以下内容:
{% for host in groups['some_host_group']|sort %}
{% if hostvars[host]["var_1"] is defined %}
{{ host }} = {{ hostvars[host]["var_1"] }}
{% endif %}
{% endfor %}