如何使用ansible模块ios_l2_接口在ios事实中循环?

如何使用ansible模块ios_l2_接口在ios事实中循环?,ansible,cisco-ios,Ansible,Cisco Ios,我想通过Cisco IOS交换机上的每个接口进行循环,并设置一个特定的第2层配置(如果描述与特定的单词相匹配)(-ap-代表accesspoint) 这是剧本: --- - name: Cisco Layer 2 Interface hosts: test strategy: free vars: ansible_command_timeout: 60 desc_search: "-ap-" tasks: - name: IOS facts ios_f

我想通过Cisco IOS交换机上的每个接口进行循环,并设置一个特定的第2层配置(如果描述与特定的单词相匹配)(-ap-代表accesspoint)

这是剧本:

---
- name: Cisco Layer 2 Interface
  hosts: test
  strategy: free
  vars:
   ansible_command_timeout: 60
   desc_search: "-ap-"
  tasks:
   - name: IOS facts
     ios_facts:
      gather_subset:
       - '!all'
       - '!min'
      gather_network_resources:
       - 'interfaces'
   - name: Layer 2 config
     ios_l2_interfaces:
      config:
       - name: "{{ item.key }}"
         trunk:
          allowed_vlans: 10,20,30,40
          native_vlan: 10
          encapsulation: dot1q
      state: replaced
     loop: "{{ ansible_net_interfaces|dict2items }}"
     when: item.value.description is search(desc_search)
...
了解事实很有效。但是,模块ios_l2_接口出现以下错误。似乎-name:item.key的键不起作用,但是错误消息清楚地显示它在那里

An exception occurred during task execution. To see the full traceback, use -vvv. The error was: AttributeError: 'NoneType' object has no attribute 'get'
failed: [demo-sw-02.nb.edeka.net] (item={'key': u'GigabitEthernet1/0/24', 'value': {u'macaddress': u'xxxx.xxxx.xxxx', u'lineprotocol': None, u'description': u'#demo-ap-02', u'duplex': None, u'mediatype': u'10/100/1000BaseTX', u'mtu': 1500, u'operstatus': u'up', u'bandwidth': 1000000, u'ipv4': [], u'type': u'Gigabit Ethernet'}}) => {
    "ansible_loop_var": "item",
    "changed": false,
    "item": {
        "key": "GigabitEthernet1/0/24",
        "value": {
            "bandwidth": 1000000,
            "description": "#demo-ap-02",
            "duplex": null,
            "ipv4": [],
            "lineprotocol": null,
            "macaddress": "xxxx.xxxx.xxxx",
            "mediatype": "10/100/1000BaseTX",
            "mtu": 1500,
            "operstatus": "up",
            "type": "Gigabit Ethernet"
        }
    },
    "rc": 1
}

MSG:

MODULE FAILURE
See stdout/stderr for the exact error


MODULE_STDERR:

Traceback (most recent call last):
  File "/home/ansible/.ansible/tmp/ansible-local-7161cuIEBE/ansible-tmp-1579863214.5-251145517474981/AnsiballZ_ios_l2_interfaces.py", line 102, in <module>
    _ansiballz_main()
  File "/home/ansible/.ansible/tmp/ansible-local-7161cuIEBE/ansible-tmp-1579863214.5-251145517474981/AnsiballZ_ios_l2_interfaces.py", line 94, in _ansiballz_main
    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
  File "/home/ansible/.ansible/tmp/ansible-local-7161cuIEBE/ansible-tmp-1579863214.5-251145517474981/AnsiballZ_ios_l2_interfaces.py", line 40, in invoke_module
    runpy.run_module(mod_name='ansible.modules.network.ios.ios_l2_interfaces', init_globals=None, run_name='__main__', alter_sys=True)
  File "/usr/lib64/python2.7/runpy.py", line 188, in run_module
    fname, loader, pkg_name)
  File "/usr/lib64/python2.7/runpy.py", line 82, in _run_module_code
    mod_name, mod_fname, mod_loader, pkg_name)
  File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/tmp/ansible_ios_l2_interfaces_payload_CAXtV1/ansible_ios_l2_interfaces_payload.zip/ansible/modules/network/ios/ios_l2_interfaces.py", line 364, in <module>
  File "/tmp/ansible_ios_l2_interfaces_payload_CAXtV1/ansible_ios_l2_interfaces_payload.zip/ansible/modules/network/ios/ios_l2_interfaces.py", line 359, in main
  File "/tmp/ansible_ios_l2_interfaces_payload_CAXtV1/ansible_ios_l2_interfaces_payload.zip/ansible/module_utils/network/ios/config/l2_interfaces/l2_interfaces.py", line 63, in execute_module
  File "/tmp/ansible_ios_l2_interfaces_payload_CAXtV1/ansible_ios_l2_interfaces_payload.zip/ansible/module_utils/network/ios/config/l2_interfaces/l2_interfaces.py", line 88, in set_config
  File "/tmp/ansible_ios_l2_interfaces_payload_CAXtV1/ansible_ios_l2_interfaces_payload.zip/ansible/module_utils/network/ios/config/l2_interfaces/l2_interfaces.py", line 113, in set_state
  File "/tmp/ansible_ios_l2_interfaces_payload_CAXtV1/ansible_ios_l2_interfaces_payload.zip/ansible/module_utils/network/ios/config/l2_interfaces/l2_interfaces.py", line 134, in _state_replaced
  File "/tmp/ansible_ios_l2_interfaces_payload_CAXtV1/ansible_ios_l2_interfaces_payload.zip/ansible/module_utils/network/ios/utils/utils.py", line 75, in filter_dict_having_none_value
AttributeError: 'NoneType' object has no attribute 'get'
任务执行期间发生异常。要查看完整的回溯,请使用-vvv。错误为:AttributeError:'NoneType'对象没有属性'get'
失败:[demo-sw-02.nb.edeka.net](项={'key':u'GigabitEthernet1/0/24','value':{u'macaddress':u'xxxx.xxxx.xxxx',u'lineprotocol':无,u'description':u'#demo-ap-02',u'duplex':无,u'mediatype':u'10/100/1000BaseTX',u'mtu':1500,u'Operatus':u'up u'up u'bandwidth':1000000,u'ipv4':[],u'type':u'GigabitEthernet'}>{
“ansible_loop_var”:“项目”,
“更改”:错误,
“项目”:{
“密钥”:“千兆以太网1/0/24”,
“价值”:{
“带宽”:1000000,
“说明”:“demo-ap-02”,
“双工”:空,
“ipv4”:[],
“lineprotocol”:空,
“macaddress”:“xxxx.xxxx.xxxx”,
“mediatype”:“10/100/1000BaseTX”,
“mtu”:1500,
“operstatus”:“up”,
“类型”:“千兆以太网”
}
},
“rc”:1
}
味精:
模块故障
有关确切的错误,请参阅标准输出/标准输出
模块_STDERR:
回溯(最近一次呼叫最后一次):
文件“/home/ansible/.ansible/tmp/ansible-local-7161cuIEBE/ansible-tmp-1579863214.5-2511145517474981/AnsiballZ_ios_l2_interfaces.py”,第102行,in
_ansiballz_main()
文件“/home/ansible/.ansible/tmp/ansible-local-7161cuIEBE/ansible-tmp-1579863214.5-25145517474981/AnsiballZ_ios_l2_interfaces.py”,第94行,位于AnsiballZ_main中
调用_模块(压缩的_模块、临时路径、ANSIBALLZ_参数)
文件“/home/ansible/.ansible/tmp/ansible-local-7161cuIEBE/ansible-tmp-1579863214.5-25145517474981/AnsiballZ_ios_l2_interfaces.py”,第40行,在调用模块中
runpy.run_模块(mod_name='ansible.modules.network.ios.ios_l2_接口',init_globals=None,run_name=''main_uuuu',alter_sys=True)
文件“/usr/lib64/python2.7/runpy.py”,第188行,在run_模块中
fname、loader、pkg_名称)
文件“/usr/lib64/python2.7/runpy.py”,第82行,在运行模块代码中
模块名称、模块名称、模块加载器、包装名称)
文件“/usr/lib64/python2.7/runpy.py”,第72行,在运行代码中
run_globals中的exec代码
文件“/tmp/ansible_ios_l2_interfaces_payload_CAXtV1/ansible_ios_l2_interfaces_payload.zip/ansible/modules/network/ios/ios_l2_interfaces.py”,第364行,in
文件“/tmp/ansible\u ios\u l2\u interfaces\u payload\u CAXtV1/ansible\u ios\u l2\u interfaces\u payload.zip/ansible/modules/network/ios/ios\u l2\u interfaces.py”,主行359
文件“/tmp/ansible_ios_l2_interfaces_payload_CAXtV1/ansible_ios_l2_interfaces_payload.zip/ansible/module_utils/network/ios/config/l2_interfaces/l2_interfaces.py”,执行模块第63行
文件“/tmp/ansible\u ios\u l2\u interfaces\u payload\u CAXtV1/ansible\u ios\u l2\u interfaces\u payload.zip/ansible/module\u utils/network/ios/config/l2\u interfaces/l2\u interfaces.py”,第88行,在set\u config中
文件“/tmp/ansible_ios_l2_interfaces_payload_CAXtV1/ansible_ios_l2_interfaces_payload.zip/ansible/module_utils/network/ios/config/l2_interfaces/l2_interfaces.py”,第113行,处于设置状态
文件“/tmp/ansible_ios_l2_interfaces_payload_CAXtV1/ansible_ios_l2_interfaces_payload.zip/ansible/module_utils/network/ios/config/l2_interfaces/l2_interfaces.py”,第134行,处于“状态”
文件“/tmp/ansible\u ios\u l2\u interfaces\u payload\u CAXtV1/ansible\u ios\u l2\u interfaces\u payload.zip/ansible/module\u utils/network/ios/utils/utils.py”,第75行,在具有无值的筛选器目录中
AttributeError:“非类型”对象没有属性“get”
我使用的是ansible 2.9.4.

“when”条件工作正常。“filter\u dict\u具有\u none\u值”表明dict2items筛选器存在问题