Interaction with Cisco IOS XE API

5.3.c i Via NETCONF/YANG using Python ncclient library

General information on “Cisco IOS XE API via NETCONF/YANG”:

<config>
    XML-FORMATTED CONFIG GOES HERE
</config>
## Basic ncclient library subtree output filter (example)
subtree_filter="""
<native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">
    <router>
        <ospf xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-ospf">
        </ospf>
    </router>
</native>
"""


## Retrieve and filter running configuration
running_config = netconf_session.get_config("running", filter=("subtree", subtree_filter))

Basic IOS XE OSPF configuration using a template via Python w/ ncclient library (example):

## IMPORT manager FROM ncclient MODULE
from ncclient import manager


## DEFINE PARAMETERS FOR THE NETCONF SESSION
netconf_host = 'ios-xe-mgmt-latest.cisco.com'
netconf_port = 10000
netconf_user = 'developer'
netconf_pass = 'C1sco12345'


## CONNECT NETCONF SESSION
netconf_connection = manager.connect(
    host=netconf_host,
    port=netconf_port,
    username=netconf_user,
    password=netconf_pass,
    hostkey_verify=False
    )


## CHECK IF CONNECT WAS SUCCESSFUL
if netconf_connection.connected == True:
    print('NETCONF session to ' + netconf_host + ' established!')


## MAIN PROGRAM
config_edit = open("netconf_ospf_template.xml")
push_config = netconf_session.edit_config(xml, target="running")


## DISCONNECT NETCONF SESSON
netconf_connection.close_session()


## CHECK IF DISCONNECT WAS SUCCESSFUL
if netconf_connection.connected == False:
    print('NETCONF session to ' + netconf_host + ' disconnected!')

5.3.c ii Via RESTCONF/YANG using Python requests library and Postman

Basic IOS XE interface configuration via Python w/ requests library (example):

## IMPORT requests AND json MODULE
import requests
import json


## DEFINE THE PAYLOAD DATA TO BE SENT
payload_raw = {
    "ietf-interfaces:interface": {
        "name": "Loopback1337",
        "description": "Configured by PYTHON w/ REQUESTS",
        "type": "iana-if-type:softwareLoopback",
        "enabled": True,
        "ietf-ip:ipv4": {
            "address": [
                {
                    "ip": "1.3.3.7",
                    "netmask": "255.255.255.255"
                }
            ]
        }
    }
}

## SERIALIZE THE PAYLOAD DATA
payload_json = json.dumps(payload_raw, indent=4)


## DEFINE PARAMETERS FOR THE HTTP REQUEST
url = 'https://ios-xe-mgmt-latest.cisco.com:9443/restconf/data/ietf-interfaces:interfaces'

auth_user = 'developer'
auth_pass = 'C1sco12345'

headers = {
  'Accept': 'application/yang-data+json',
  'Content-Type': 'application/yang-data+json'
}


## THE FINAL HTTP REQUEST
restconf = requests.post(url,
                        auth=(auth_user, auth_pass),
                        verify=False,
                        headers=headers,
                        data=payload_json)