首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何循环with_dict

如何循环with_dict
EN

Stack Overflow用户
提问于 2022-04-05 05:21:27
回答 1查看 155关注 0票数 2

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

代码语言:javascript
运行
复制
interface bridge port add bridge=bridge1 ingress-filtering=no interface=ether3
interface bridge port add bridge=bridge1 ingress-filtering=no interface=ether4

但不是

代码语言:javascript
运行
复制
interface bridge port add bridge=bridge1 ingress-filtering=no interface=ether3,ether4

我的剧本运行错误命令如何修复那个tq。

`#猫main.yml

代码语言:javascript
运行
复制
- 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

cat vlan.yml

代码语言:javascript
运行
复制
- 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

当我用这些

代码语言:javascript
运行
复制
\`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 }}“-接口

我得到了一个错误fatal: [R1]: FAILED! => { "msg": "could not find 'interfaces' key in iterated item '{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'}}'"

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-05 07:12:17

迭代with_subelements,例如:

代码语言:javascript
运行
复制
    - debug:
        msg: "{{ item.0.keys()|first }} ... interface={{ item.1 }}"
      with_subelements:
        - "{{ vlans }}"
        - interfaces

给出

代码语言:javascript
运行
复制
  msg: 10 ... interface=ether3
  msg: 10 ... interface=ether4
  msg: 20 ... interface=ether3
  msg: 20 ... interface=ether4
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71746669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档