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

时间:2019-05-06 14:11:17

标签: variables ansible yaml ansible-inventory

当我在Ansible的帮助下自动化某些网络环境时,我想开始使用嵌套的清单/变量文件。最重要的是要保持一切整齐有序。但是到目前为止,我无法使其正常工作,也无法分辨出问题所在。

库存外观如下:(虚拟内容)

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

如您所见,我有一个“界面”列表,其中包含一个“参数”列表,我都想在我的剧本中进行寻址。

Playbook如下:

- 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'"}

我在做什么错了?

1 个答案:

答案 0 :(得分:4)

以下是无效的YAML语法:

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

description不能同时是标量映射。

您可以拥有

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

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

但不能两者都