RESTCONF - haladó példák

Interfész adatok

Az alábbi program lekézdezi az összes GigabitEthernet típusú interfész adatait.

import requests
import json

requests.packages.urllib3.disable_warnings()

ip = "192.168.86.135"
url = f"https://{ip}:443/restconf/data/Cisco-IOS-XE-native:native/interface/GigabitEthernet"
headers = {
    "Accept": "application/yang-data+json",
    "Content-Type": "application/yang-data+json"
}

response = requests.get(
    url=url,
    headers=headers,
    auth=("test","test"), # test:test -> BASE64
    verify=False
)

print(json.dumps(response.json(), indent=2))

Egy kis módosítással indexelhetjük is a GigabitEthernet listát, így csak egy adott interfész adatait kapjuk meg:

url = f"https://{ip}:443/restconf/data/Cisco-IOS-XE-native:native/interface/GigabitEthernet=2"

Ez az URL például a GigabitEthernet2 interfészt választja ki.

IP cím beállítása

Ez a program a GigabitEthernet2 interfész IP címét módosítja.

import requests
import json

requests.packages.urllib3.disable_warnings()

ip = "192.168.86.131"
url = f"https://{ip}:443/restconf/data/Cisco-IOS-XE-native:native/interface/GigabitEthernet=2/ip/address/primary"
headers = {
    "Accept": "application/yang-data+json",
    "Content-Type": "application/yang-data+json"
}
body = {
    "primary": {    
        "address": "2.2.2.2",
        "mask": "255.255.255.0"
    }
}
response = requests.put(
    url=url,
    headers=headers,
    data=json.dumps(body),
    auth=("test","test"),
    verify=False
)

print(response)

Loopback interfészek létrehozása, címzése

Ez a program több interfészt is létrehoz. Fontos a létrehoz ige kiemelése, mivel itt új HTTP erőforrások jönnek létre, így a POST művelet passzol.

import requests
import json

requests.packages.urllib3.disable_warnings()

ip = "192.168.86.131"
url = f"https://{ip}:443/restconf/data/Cisco-IOS-XE-native:native/interface"
headers = {
    "Accept": "application/yang-data+json",
    "Content-Type": "application/yang-data+json"
}
body = {
    "Loopback": [
        {
            "name": "6666",
            "ip": {
                "address": {
                    "primary": {
                        "address": "6.6.6.6",
                        "mask": "255.255.255.255"
                    }
                }
            }
        },
        {
            "name": "4444",
            "ip": {
                "address": {
                    "primary": {
                        "address": "4.4.4.4",
                        "mask": "255.255.255.255"
                    }
                }
            }
        },
    ]

}
response = requests.post(
    url=url,
    headers=headers,
    data=json.dumps(body),
    auth=("test","test"),
    verify=False
)

print(response)

OSPF forgalomirányítás

Az alábbi példában egy új OSPF folyamatot indítunk, és rendelünk is hozzá hálózatokat. Ez a példa azért fontos, mert az URL bejárásakor egy modulváltást figyelhetünk meg. Bár a Cisco-IOS-XE-native modulban sok információt érünk el, vannak olyan területek, amik külön modulokat kaptak. Ilyen az összes forgalomirányítási protokoll is, amelyek önálló modulok. Ha viszont rájuk keresünk, azt tapasztaljuk, hogy nincsen saját gyökér elérési útjuk, hanem az eddig is használt native modult egészítik ki. (augment)

import requests
import json

requests.packages.urllib3.disable_warnings()

ip = "192.168.86.131"
url = f"https://{ip}:443/restconf/data/Cisco-IOS-XE-native:native/router/Cisco-IOS-XE-ospf:router-ospf/ospf"
headers = {
    "Accept": "application/yang-data+json",
    "Content-Type": "application/yang-data+json"
}
body = {
    "process-id": {    
        "id": "20",
       "network": [
           {
             "ip": "10.0.0.0",
             "wildcard": "0.0.0.255",
             "area": "0"
           },
           {
             "ip": "6.6.6.6",
             "wildcard": "0.0.0.0",
             "area": "0"
           },
           {
             "ip": "8.8.8.8",
             "wildcard": "0.0.0.0",
             "area": "0"
           },
       ]
    }
}
response = requests.post(
    url=url,
    headers=headers,
    data=json.dumps(body),
    auth=("test","test"),
    verify=False
)

print(response)