如何使用ansible模块ios_l2_接口在ios事实中循环?
我想通过Cisco IOS交换机上的每个接口进行循环,并设置一个特定的第2层配置(如果描述与特定的单词相匹配)(-ap-代表accesspoint) 这是剧本:如何使用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
---
- 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筛选器存在问题