Ansible组变量冲突

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

我遇到了Ansible group vars priority中描述的问题(功能?),大概是因为我不正确地构造了我的库存。

想法是有两个任务,这些任务适用于清单中定义的所有“路由器”或“防火墙”。这部分工作正常-Ansible可以正确解析清单并在两者之间进行区分。

问题是由于清单的解析方式,因此每个客户组都使用相同的ansible_user和ansible_password。根据文档,这显然是有意义的:

当具有相同父/子级别的组合并时,按字母顺序,最后加载的组会覆盖前一个组。例如,a_group将与b_group合并,匹配的b_group变量将覆盖a_group中的变量。]​​>

任何人都可以提出建议,我该如何纠正?

如果我将“路由器”和“防火墙”子组更改为唯一的,例如custA_routers,custB_routers,则它的行为将达到预期的效果。但是后来我认为我必须编写针对每个子组的任务。请注意,所有主机都是唯一的IP地址。

Playbook:

---
- name: Check routers
  hosts: routers
  tasks:
    - name: Do stuff.
      <commands>
- name: Check firewalls
  hosts: firewalls
  tasks:
    - name: Do stuff.
      <commands>

库存:

all:
  vars:
    ansible_connection: network_cli
    ansible_network_os: ios
  children:
    customerOne:
      vars:
        ansible_user: userOne
        ansible_password: <vaulted pass>
      children:
        routers:
          hosts:
            x.x.x.x
            y.y.y.y
        firewalls:
          vars:
            ansible_network_os: asa
          hosts:
            z.z.z.z
    customerTwo:
      vars:
        ansible_user: userTwo
        ansible_password: <vaulted pass>
      children:
        routers:
          hosts:
            x.x.x.x
            y.y.y.y
        firewalls:
          vars:
            ansible_network_os: asa
          hosts:
            z.z.z.z

我遇到了Ansible组var优先级中描述的问题(功能?),大概是因为我不正确地构造了我的库存。这个想法是有两个任务,它们适用于...

ansible ansible-inventory
2个回答
1
投票

可以简化库存


0
投票

我认为,理想的是创建两个单独的清单,customerOneInventory.yaml和customerTwo.yaml或router.yaml和firewalls.yaml ..,根据您的需要。您只需要指定在ansible playbook运行期间所需的清单文件即可。

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