配置所有主机,然后创建所有主机的配置列表?

配置所有主机,然后创建所有主机的配置列表?

我使用 Ansible 部署了大量主机 - 效果确实很好。每个主机都有自己的设置和配置。

现在我想为使用这些主机的另一个系统生成一个配置文件。为此,我需要为每个主机生成一部分配置(配置数据库的配置)。

下面是两个主机具有不同配置且另一个系统使用 Ansible 生成的配置的一部分的情况的示例:

主机1

ansible 配置 dbA

主机2

ansible 配置 dbQ

另一个系统:

主机1 = dbA

主机2 = dbQ

如果它属于不同的集群等,则值的计算方式会有所不同(例如dbQ,而不是),因此仅从中读取主机配置是不切实际的。我相信我需要遍历主机并让 Ansible 找出变量的计算值,就像部署时一样,但我不知道如何将结果放在一个模板中。dbBhost2host_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 %}

相关内容