Ansible 和 Jinja2 模板 - vars .yml 添加

Ansible & Jinja 2 templates - vars .yml additions

首先使用 Ansible,我正在尝试做一件相对基础的事情。我创建了一个 Jinja2 模板来输出 Nexus 交换机的配置。它似乎工作正常。我遵循的文件夹结构是,顶级目录是 'role',该目录中是 'tasks'、'templates' 和 'vars' 的子目录。在 'vars' 目录下,我有一个名为 main.yml 的文件,据我所知应该如此。我想要的是包含各种不同元素的多个 vars 文件,这样我就可以使整个事情更加模块化。

以下是我目前的一些配置:

剧本我运行在顶层目录:

    ---
    - name: Apply tor role   
      gather_facts: no   
      hosts: localhost

      roles:
        - tor

tor/tasks/main.yml文件

    - name: Generate Configs
      template: src={{ item.profile }}.j2 dest=staging/drc/{{ item.hostname }}/{{ item.hostname }}.cfg
      with_items: "{{ switches }}"

以及 vars 目录中 main.yml 文件的片段:

---
  switches:
    - hostname: 5K01
      profile: nxos_template
      mgmt_ip: 10.20.90.9/24
      vlans:
      - {vlan_name: LegacyData, vlan_number: '5'}
      - {vlan_name: Voice, vlan_number: '20'}
      - {vlan_name: Data_Center, vlan_number: '50'}
      - {vlan_name: Vmotion, vlan_number: '51'}
      - {vlan_name: Citrix, vlan_number: '52'}
      - {vlan_name: Citrix_XEN, vlan_number: '56'}
      - {vlan_name: Citrix_Green_Infrastructure, vlan_number: '61'}
      - {vlan_name: Citrix_Red_Ingrastructure, vlan_number: '62'}
      - {vlan_name: Citrix_Green_XenApp, vlan_number: '63'}
      - {vlan_name: Citrix_Yellow, vlan_number: '64'}
      - {vlan_name: Citrix_Red_Desktops, vlan_number: '68'}
      - {vlan_name: Zerto-VRA-Network, vlan_number: '90'}
      - {vlan_name: Management, vlan_number: '92'}
      - {vlan_name: PCI_FW_Intermediate_Network, vlan_number: '121'}
      features:
        - nxapi
        - interface-vlan
        - hsrp
        - lacp
        - vpc
        - eigrp
        - npiv
        - fcoe
        - fport-channel-trunk
        - dhcp
        - fex
        - lldp

我想删除 vlans: dict 到另一个名为 vlans.yml 的 vars 文件。我想我会把它放在与当前 main.yml vars 文件相同的目录中,然后在某处调用 vlans.yml 文件。我试过使用 'include_vars:' 选项,但它不会,特别是当它与 'template:' 操作在同一块中使用时给我一个错误。

回答你的问题,是的。您可以毫无问题地将这些信息移动到新文件中。

假设您有一个 main.yml 和 vlans.yml vars 文件,这是您发布的剧本:

---
- name: Apply tor role   
  gather_facts: no   
  hosts: localhost
  roles:
    - tor

这应该是您的文件结构:

$ tree roles/
roles/
└── tor
    ├── tasks
    │   └── main.yml
    └── vars
        ├── main.yml
        └── vlans.yml

对于您的角色 tor,您需要导入 vlans.yml 变量:

- name: include vlans variable file
  include_vars: vars/vlans.yml

- name: Generate Configs
  template: src={{ item.profile }}.j2 dest=staging/drc/{{ item.hostname }}/{{ item.hostname }}.cfg
  with_items: "{{ switches }}"