首页 > 解决方案 > Ansible Arista eos_l2_interface 模块:TypeError 不是 JSON 可序列化的

问题描述

版本:

我有一本遍历接口字​​典并根据需要应用更改的剧本。该剧本使用循环,虽然第一次更改总是会成功,但下一次更改将失败。

剧本:

- 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:,结果相同。这感觉像一个错误,有人有任何见解吗?

标签: pythonnetworkingautomationansibletypeerror

解决方案


推荐阅读