Версии:
- Ansible / Python 2.7
- Arista EOS 4.16.8M (7050SX)
- CentOS 7.5
Iиметь книгу, которая просматривает словарь интерфейсов и применяет изменения по мере необходимости.В пьесе используются циклы, и хотя первое изменение неизменно будет успешным, следующее изменение не будет выполнено.
Плейбук:
- 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
Файл Vars:
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:, тот же результат.Это похоже на ошибку, у кого-нибудь есть понимание?