Ansible 如何循环 with_dict

Ansible how to loop with_dict

我想 运行 这些 mikrotik 命令使用 ansible

interface bridge port add bridge=bridge1 ingress-filtering=no interface=ether3
interface bridge port add bridge=bridge1 ingress-filtering=no interface=ether4

但不是

interface bridge port add bridge=bridge1 ingress-filtering=no interface=ether3,ether4

我的剧本运行 命令错误 如何解决这个问题 tq

`#猫main.yml

- hosts: mikrotiks
  gather_facts: no
  connection: network_cli
  vars:
  ansible_network_os: routeros
  vlans:
  - 10:
    interfaces:
      - ether3
      - ether4
    untagged_interfaces: ether2
    tagged_interfaces: bridge1,ether3,ether4
    network: 10.0.10.0
    netmask: 24
    ip_address1: 10.0.10.1
    ip_address2: 10.0.10.2
    dns: 192.168.88.1
    dhcp_pool1: 10.0.10.101-10.0.10.150
    dhcp_pool2: 10.0.10.151-10.0.10.200
    leasetime: 1d
  - 20:
    interfaces:
      - ether3
      - ether4
    untagged_interfaces: ether2
    tagged_interfaces: bridge1,ether3,ether4
    network: 10.0.20.0
    netmask: 24
    ip_address1: 10.0.20.1
    ip_address2: 10.0.20.2
    dns: 192.168.88.1
    dhcp_pool1: 10.0.20.101-10.0.20.150
    dhcp_pool2: 10.0.20.151-10.0.20.200
    leasetime: 1d
    tasks:
  - import_tasks: vlan.yml

猫vlan.yml


- name: create vlans on R1
  routeros_command:
  commands:
    - "interface bridge port add bridge=bridge1 ingress-filtering=no interface={{ item.value.interfaces }}"
    - "interface bridge port add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged pvid=10 interface={{ item.value.interfaces }}"
  with_dict: "{{ vlans }}"\`

编辑:我的 mikrotik 命令应该是这样的 R1 /interface bridge port add bridge=bridge1 ingress-filtering=no interface=ether3 add bridge=bridge1 ingress-filtering=no interface=ether4 add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged interface=ether2 pvid=10 /interface bridge vlan add bridge=bridge1 tagged=bridge1,ether3,ether4 untagged=ether2 vlan-ids=10 add bridge=bridge1 tagged=bridge1,ether3,ether4 vlan-ids=20

当我使用这些

\`routeros_command:
commands:
  - "/interface bridge port add bridge=bridge1 ingress-filtering=no interface={{ item.1 }}"
  - "/interface bridge port add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged pvid=10 interface={{ item.1 }}"

with_subelements: - “{{ VLAN }}” - 接口`

我遇到了这个错误 `致命的:[R1]:失败! => { "msg": "在迭代项中找不到 'interfaces' 键 '{10: {'interfaces': ['ether3', 'ether4'], 'untagged_interfaces': 'ether2', 'tagged_interfaces': 'bridge1,ether3,ether4', 'network': '10.0.10.0', 'netmask': 24, 'ip_address1': '10.0.10.1', 'ip_address2': '10.0.10.2', 'dns': '192.168.88.1', 'dhcp_pool1': '10.0.10.101-10.0.10.150', 'dhcp_pool2': '10.0.10.151-10.0 .10.200', 'leasetime': '1d'}}'"`

迭代with_subelements,例如

    - debug:
        msg: "{{ item.0.keys()|first }} ... interface={{ item.1 }}"
      with_subelements:
        - "{{ vlans }}"
        - interfaces

给予

  msg: 10 ... interface=ether3
  msg: 10 ... interface=ether4
  msg: 20 ... interface=ether3
  msg: 20 ... interface=ether4