python - Ansible Arista eos_l2_interface 模块:TypeError 不是 JSON 可序列化的
问题描述
版本:
- Ansible/Python 2.7
- Arista EOS 4.16.8M (7050SX)
- CentOS 7.5
我有一本遍历接口字典并根据需要应用更改的剧本。该剧本使用循环,虽然第一次更改总是会成功,但下一次更改将失败。
剧本:
- hosts: devswitches
gather_facts: false
tasks:
- name: Configure layer 2 access interfaces
eos_l2_interface:
name: "{{ item.name }}"
mode: access
access_vlan: "{{ item.vlan }}"
loop: "{{ interfaces }}"
when:
- item.vlan is defined
变量文件:
interfaces:
- name: Ethernet10
description: I am et10 a trunk port
trunk: true
trunknative: 399
trunkallowed: 399
- name: Ethernet11
description: I am et11 an access port
vlan: 399
- name: Ethernet12
description: I am et12 an access port too
vlan: 399
事情开始了 - Ethernet10 被跳过,Ethernet11 被改变了。然后坏事发生。
TASK [Configure layer 2 access interfaces] ********************************************************************************************
skipping: [lt-ts.mitre.org] => (item={u'trunknative': 399, u'trunkallowed': 399, u'description': u'I am et10 a trunk port', u'name': u'Ethernet10', u'trunk': True})
changed: [lt-ts.mitre.org] => (item={u'vlan': 399, u'name': u'Ethernet11', u'description': u'I am et11 an access port'})
fatal: [lt-ts.mitre.org]: FAILED! => {"msg": "Traceback (most recent call last):\n File \"/usr/bin/ansible-connection\", line 321, in <module>\n main()\n File \"/usr/bin/ansible-connection\", line 287, in main\n conn.set_options(var_options=variables)\n File \"/usr/lib/python2.7/site-packages/ansible/module_utils/connection.py\", line 167, in __rpc__\n response = self._exec_jsonrpc(name, *args, **kwargs)\n File \"/usr/lib/python2.7/site-packages/ansible/module_utils/connection.py\", line 144, in _exec_jsonrpc\n data = json.dumps(req)\n File \"/usr/lib64/python2.7/json/__init__.py\", line 243, in dumps\n return _default_encoder.encode(obj)\n File \"/usr/lib64/python2.7/json/encoder.py\", line 207, in encode\n chunks = self.iterencode(o, _one_shot=True)\n File \"/usr/lib64/python2.7/json/encoder.py\", line 270, in iterencode\n return _iterencode(o, 0)\n File \"/usr/lib64/python2.7/json/encoder.py\", line 184, in default\n raise TypeError(repr(o) + \" is not JSON serializable\")\nTypeError: u'XXXXXXXXXXXXXX' is not JSON serializable\n"}
TypeError 中引用的对象是本地管理员帐户的帐户密码,它包含在保险库加密变量中。传输机制是https(httpapi):
ansible_connection: httpapi
ansible_httpapi_use_ssl: true
ansible_network_os: eos
ansible_user: admin
ansible_ssh_pass: !vault |
$ANSIBLE_VAULT;1.1;AES256
66656138626139623035333864343431323337313338383965326430313631666666333764303339
6539623236316239393235363XXXXXXXXXXXXXXXXXXXXXXXXXXX3732326561346633656539333062
66663866323033386537376661623464613133333834316561306330613439313132373662626430
6662653936356334660a323035373332653165376439386438373832653030363234623634313339
6334
ansible_become: yes
ansible_become_method: enable
ansible_become_pass: !vault |
$ANSIBLE_VAULT;1.1;AES256
61336334343933373063623932356534643633646166643132353935303062376663386532316538
306135643835373265366534326XXXXXXXXXXXXXXXXXX8640a303164396434643862333930623562
33313738316630396265346438343366643164616464303161383364663532363232643836636130
6139623734653637320a386434633434366338373036393730333530623764643036613836373232
3231
我试过 with_items: 而不是 loop:,结果相同。这感觉像一个错误,有人有任何见解吗?
解决方案
推荐阅读
- java - 基于列值在java中对矩阵进行排序的最佳方法
- django - 序列化表示反向查找的布尔值的最佳方法
- java - 如何使用 Java API 仅将 Avro 文件中的非可选值插入 BigQuery 表
- excel - 如何引用传递给我的函数的单元格上方的单元格?
- javascript - 如何以角度调用 .wasm 方法
- ecmascript-6 - IE11是否支持es2015?
- objective-c - NSDateFormatter 在日期格式未指定时添加 AM/PM
- javascript - 反应选择干扰反应表的下拉值
- gradle - Jenkins Gradle 用 wrapper 构建,使用 artifactory 插件
- mysql - 列出 MySQL 中共享组的最常见项目