Cisco ISE: «Ошибка инициализации ресурса: недействительный JSON: текущий токен не END_OBJECT» - PullRequest
0 голосов
/ 18 июня 2020

Я хочу выполнить операцию PUT в Cisco ISE, чтобы изменить описание существующего сетевого устройства, используя Python. Чтобы это произошло, вы должны отправить полезную нагрузку с тем сетевым устройством, на котором вы собираетесь выполнять операцию PUT, в XML или JSON. В моем случае я использую JSON. Вот мой код:

import requests
import pprint
import urllib3
import json
from requests.auth import HTTPBasicAuth

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

url = 'https://X.X.X.X:9060/ers/config/networkdevice/ze5abe60-918k-14pq-402x-01507619wf2l'
username = 'username'
password = 'password'
headers = {"Content-type": "application/json", "Accept": "application/json"}
valid_cert = False

payload = {
    "NetworkDevice": {
        "id": "ze5abe60-918k-14pq-402x-01507619wf2l",
        "name": "TESTDEVICE",
        "description": "YAY IT WORKS",
    },
    "profileName": "Cisco",
    "coaPort": 0,
    "link": {
        "rel": "self",
        "href": "https://X.X.X.X:9060/ers/config/networkdevice/ze5abe60-918k-14pq-402x-01507619wf2l",
        "type": "application/json"
    },
    "NetworkDeviceIPList": [{
        "ipaddress": "X.X.X.X",
        "mask": 32
    }]
}

response = requests.request("PUT", url, data=json.dumps(payload), headers=headers, verify=valid_cert,
                            auth=HTTPBasicAuth(username, password))
result = response.json()
pprint.pprint(result)

Этот код Python возвращает следующее: HTTP-ответ 400 и следующая HTTP-ошибка:

 {'ERSResponse': {'operation': 'PUT-update-networkdevice', 'messages':
 [{'title': "Resource Initialization Failed: Invalid JSON: Current
 token not END_OBJECT (to match wrapper object with root name
 'NetworkDevice'), but FIELD_NAME\n ", 'type': 'ERROR', 'code':
 'Application resource validation exception'}], 'link': {'rel':
 'related', 'href':
 'https://X.X.X.X:9060/ers/config/networkdevice/ze5abe60-918k-14pq-402x-01507619wf2l',
 'type': 'application/xml'}}}

Исследование «ОШИБКИ», 'code': 'Application resource validation exception'" (сверху) в официальной документации Cisco API просто дает, что APPLICATION_RESOURCE_VALIDATION_EXCEPTION Происходит, когда проверка semanti c ресурса не соответствует требованиям ». Это, плюс ответ http, указывает мне, что проблема связана с моей полезной нагрузкой JSON.

Центр технической поддержки / поддержки Cisco сообщил, что необходимы поля: Имя профиля и IP-адрес сетевого устройства - поля полезной нагрузки ... хотя я не уверен, согласен ли я с этим, так как это не упоминается в официальной документации API .

Кроме того, я дважды проверил свой формат / синтаксис JSON, используя https://jsonlint.com/

Это кажется правильным. Я также попытался изменить: data=json.dumps (полезная нагрузка) - в фактическом запросе просто data = payload ... безуспешно

Пожалуйста, сообщите! Спасибо!

...