在ansible playbook中合并多个vars文件

问题描述 投票:0回答:1

我想看看是否可以在ansible中分割一个相当大的var文件。

这是集合:https://github.com/Icinga/ansible-collection-icinga

---
- name: Build Icinga Image
  hosts: all
  become: yes
  vars_files:
    - vars/icinga-config/main.yml
  collections:
    - icinga.icinga

  tasks:     
    - ansible.builtin.include_role:
        name: icinga2        

var 文件的结构如下:

icinga2_objects:
  internal.icinga:
    - name: host1.fqdn
       type: Host
       file: zones.d/main/host1.fqdn.conf
       address: 127.0.0.2
    - name: host2.fqdn
       type: Host
       file: zones.d/main/host2.fqdn.conf
       address: 127.0.0.3

请帮忙!我不知道下一步该尝试什么

我尝试将其放入单独的 var 文件中,但当我这样做时,其中一个文件会被忽略。这是一个例子:

- name: Build Icinga Image
  hosts: all
  become: yes
  vars_files:
    - vars/icinga-config/host1.yml
    - vars/icinga-config/host2.yml
  collections:
    - icinga.icinga

  tasks:     
    - ansible.builtin.include_role:
        name: icinga2        

var 文件的结构如下:

vars/icinga-config/host1.yml

icinga2_objects:
  internal.icinga:
    - name: host1.fqdn
       type: Host
       file: zones.d/main/host1.fqdn.conf
       address: 127.0.0.2

vars/icinga-config/host2.yml

icinga2_objects:
  internal.icinga:
    - name: host2.fqdn
       type: Host
       file: zones.d/main/host2.fqdn.conf
       address: 127.0.0.3

关于如何让它们合并而不被忽略的任何想法。

ansible icinga2
1个回答
0
投票

我没有使用 Icinga 的经验,但它的 Monitoring Configuration Objects 文档明确指出您不应该像您一样使用该

icinga2_objects
变量:

默认

icinga2_objects
变量的优点是,您可以在许多不同的服务器上运行 playbook,而无需在 playbook 中的每个主机上部署监控配置。否则,该变量应仅放置在
host_vars
文件中,以限制在每个主机上的部署。

作为辅助选项,您可以使用没有第二级的变量,如下例所示。

注意!如果不限制,它将部署在每个主机上。这应该只在

host_vars
中定义,除非你知道你在做什么!

关于如何让它们合并而不被忽略的任何想法。

上面的警告注释来自于 Ansible 变量的一般工作方式

鉴于您没有提供库存示例,在我看来,这个问题是一种 X/Y 问题 - 似乎您需要首先弄清楚如何组织变量。很难针对您的情况给出具体答案,因为可能的选择太多。

除了建议仔细阅读以下文档之外,我别无选择:

© www.soinside.com 2019 - 2024. All rights reserved.