在 Ansible 剧本中使用嵌套清单列表

Using nested inventory lists in Ansible playbooks

因为我在 Ansible 的帮助下自动化我们的一些网络环境,所以我想开始使用嵌套的 inventory/variable 文件。这最重要的是保持一切整洁有序。但是到目前为止,我无法让它正常工作,我也不知道是什么问题。

库存如下:(虚拟内容)

interfaces:
- name: "..."
  port: "..."
  description: "..."
    parameters:
      - speed: "..."
        duplex: "..."
- name: "..."
  port: "..."
  description: "..."
    parameters:
      - speed: "..."
        duplex: "..."  

如您所见,我有一个 "interface" 列表,其中包含一个 "parameters" 列表,我想在我的剧本中解决这两个问题。

剧本如下:

- name: Configuring network ports
  "Some network module":
    name: '{{ item.0.name }}'
    port: '{{ item.0.port }}'
    description: '{{ item.0.description }}'
    speed: '{{ item.1.speed }}'
    duplex: '{{ item.1.duplex }}'
    state: present
  delegate_to: localhost
  with_subelements:
    - "{{ interfaces }}"
    - "{{ parameters }}

在这个过程中,我尝试了不同的清单和剧本语法,并摆弄了一下,试图让事情正常进行,但没有结果。

以下是我在 运行 剧本中收到的一些错误消息。

fatal: [**.**.**.**]: FAILED! => {"msg": "'parameters' is undefined"}
ERROR! could not find 'parameter' key in iterated item '{u'speed': u'...', u'duplex': u'...'}'
fatal: [**.**.**.**]: FAILED! => {"msg": "'list object' has no attribute 'parameter'"}

我做错了什么?

以下是无效的 YAML 语法:

interfaces:
- name: "..."
  port: "..."
  description: "..."
    parameters:
      - speed: "..."
        duplex: "..."

description 不能同时是标量 映射。

你可以选择

interfaces:
- name: "..."
  port: "..."
  description: "..."

interfaces:
- name: "..."
  port: "..."
  description:
    parameters:
      - speed: "..."
        duplex: "..."

但不能两者兼得。