01-25-2022 12:56 AM - edited 01-25-2022 01:13 AM
Hi all,
I'm trying to convert my service from using CLI-based NEDs to purely NETCONF-based. In my YANG module I'm referencing the list of interfaces that the selected device has available;
(abbreviated version):
module l3vpn {
namespace "http://com/example/l3vpn";
prefix l3vpn;
import ietf-inet-types {
prefix inet;
}
import tailf-ncs {
prefix ncs;
}
import tailf-common {
prefix tailf;
}
import tailf-ned-cisco-ios-xr {
prefix cisco-ios-xr;
}
augment "/ncs:services" {
list l3vpn {
key "name";
unique "vpn-id";
uses ncs:service-data;
ncs:servicepoint "l3vpn";
leaf name {
tailf:info "VRF Name";
mandatory true;
type string;
}
leaf customer {
tailf:info "Customer name";
type string;
}
leaf vpn-id {
tailf:info "Unique VPN ID, used for RD/RT";
mandatory true;
type uint32 {
range "1..65535";
}
}
list link {
tailf:info "Attachment Circuits to VPN";
key "ac-name";
unique "ac-name";
leaf ac-name {
tailf:info "AC connection ID - ie. AC123456";
mandatory true;
type string;
}
leaf device {
tailf:info "PE Router";
mandatory true;
type leafref {
path "/ncs:devices/ncs:device/ncs:name";
}
}
container iosxr {
when "/ncs:devices/ncs:device[ncs:name=current()/../device]/ncs:device-type/ncs:cli/ncs:ned-id='cisco-ios-xr-id:cisco-ios-xr'" {
tailf:dependency "../device";
tailf:dependency "/ncs:devices/ncs:device/ncs:device-type";
}
choice interface-type {
case GigabitEthernet {
leaf xr-GigabitEthernet {
type leafref {
path "deref(../../device)/../ncs:config/cisco-ios-xr:interface/cisco-ios-xr:GigabitEthernet/cisco-ios-xr:id";
}
}
}
}
}
}
}
}
In the new YANG definition, I'm omitting the 'import tailf-ned-cisco-ios-xr' and changes the IOSXR container to:
container iosxr {
when "/ncs:devices/ncs:device[ncs:name=current()/../device]/ncs:device-type/ncs:netconf/ncs:ned-id='XR-nc-6.3:XR-nc-6.3'" {
tailf:dependency "../device";
tailf:dependency "/ncs:devices/ncs:device/ncs:device-type";
}
leaf xr-interface {
type leafref {
path "deref(../../device)/../ncs:config/interface-configurations/interface-configuration/interface-name";
}
}
}The XPATH string I'm basing it on looks like this:
root@ncs# show running-config devices device A9K config interface-configurations interface-configuration act TenGigE0/0/2/0 | display xpath /devices/device[name='A9K']/config/ifmgr-cfg:interface-configurations/interface-configuration[active='act'][interface-name='TenGigE0/0/2/0']/cdp-cfg:cdp/enable
And the JSON structure looks like this:
root@ncs# show running-config devices device A9K config interface-configurations interface-configuration act TenGigE0/0/2/0 | display json
{
"data": {
"tailf-ncs:devices": {
"device": [
{
"name": "A9K",
"config": {
"Cisco-IOS-XR-ifmgr-cfg:interface-configurations": {
"interface-configuration": [
{
"active": "act",
"interface-name": "TenGigE0/0/2/0",
"Cisco-IOS-XR-cdp-cfg:cdp": {"": "enable"
}
}
]
}
}
}
]
}
}
}While troubleshooting, I've tried to import the Cisco-IOS-XR-ifmgr-cfg module and use it as a prefix for the elements in the XPATH, however when I try to compile this I'm getting an error that the module doesn't have the 'interface-configurations' element.
Any ideas or clues?
Best regards
-J
Solved! Go to Solution.
01-25-2022 02:39 AM
Ok, so I managed to figure this one out myself after several hours debugging. After scouring all the folders for the interface-configurations container, I found that the modules in the ncsc-out subfolder augmented the ncs:config element.
In my Makefile I had both the ../src/yang and the ../src/ncsc-out/modules/yang. I omitted the ../src/yang path from the YANGPATH, included the 'import Cisco-IOS-XR-ifmgr-cfg { prefix ifmgr-cfg; }' statement in the service yang definition and added the ifmgr-cfg prefix to all elements in the 'xr-interface' XPATH statement.
01-25-2022 02:39 AM
Ok, so I managed to figure this one out myself after several hours debugging. After scouring all the folders for the interface-configurations container, I found that the modules in the ncsc-out subfolder augmented the ncs:config element.
In my Makefile I had both the ../src/yang and the ../src/ncsc-out/modules/yang. I omitted the ../src/yang path from the YANGPATH, included the 'import Cisco-IOS-XR-ifmgr-cfg { prefix ifmgr-cfg; }' statement in the service yang definition and added the ifmgr-cfg prefix to all elements in the 'xr-interface' XPATH statement.
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide