cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
519
Views
0
Helpful
10
Replies
Highlighted
Beginner

IOS-XE openconfg_interfaces error

Hello,

 

I am attempting to push a basic openconfig-interfaces configuration to an IOS-XE(version 16.9.4) device using YDK, and the model is rendering properly but the device is rejecting the configuration with the following error:

 

<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="3">
  <rpc-error>
    <error-type>application</error-type>
    <error-tag>operation-failed</error-tag>
    <error-severity>error</error-severity>
    <error-path xmlns:oc-vlan="http://openconfig.net/yang/vlan" xmlns:oc-eth="http://openconfig.net/yang/interfaces/ethernet" xmlns:oc-if="http://openconfig.net/yang/interfaces">                                                            
    /oc-if:interfaces/oc-if:interface[oc-if:name='GigabitEthernet1/0/1']/oc-eth:ethernet/oc-vlan:switched-vlan/oc-vlan:config/oc-vlan:access-vlan                                                                                             
  </error-path>
    <error-message xml:lang="en">/oc-if:interfaces/interface[name='GigabitEthernet1/0/1']/oc-eth:ethernet/oc-vlan:switched-vlan/config/access-vlan: Runtime mapping error.</error-message>                                                    
    <error-info>
      <bad-element>access-vlan</bad-element>
    </error-info>
  </rpc-error>
</rpc-reply>

This error only occurs when I try and commit the candidate -- if I do a validate, the RPC comes back with an 'ok'.  Here's the actual NETCONF payload I am sending:

<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><edit-config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">                                                                                                                             
  <target>                                                                                                                                                                                                                                     
    <candidate/>                                                                                                                                                                                                                               
  </target>                                                                                                                                                                                                                                    
  <config><interfaces xmlns="http://openconfig.net/yang/interfaces">                                                                                                                                                                           
  <interface>                                                                                                                                                                                                                                  
    <name>GigabitEthernet1/0/1</name>                                                                                                                                                                                                          
    <config>                                                                                                                                                                                                                                   
      <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>                                                                                                                                             
      <name>GigabitEthernet1/0/1</name>                                                                                                                                                                                                        
      <description>TESTING</description>                                                                                                                                                                                                       
    </config>                                                                                                                                                                                                                                  
    <ethernet xmlns="http://openconfig.net/yang/interfaces/ethernet">                                                                                                                                                                          
      <switched-vlan xmlns="http://openconfig.net/yang/vlan">                                                                                                                                                                                  
        <config>                                                                                                                                                                                                                               
          <interface-mode>ACCESS</interface-mode>                                                                                                                                                                                              
          <access-vlan>10</access-vlan>                                                                                                                                                                                                        
        </config>                                                                                                                                                                                                                              
      </switched-vlan>                                                                                                                                                                                                                         
    </ethernet>                                                                                                                                                                                                                                
  </interface>                                                                                                                                                                                                                                 
</interfaces>                                                                                                                                                                                                                                  
</config>                                                                                                                                                                                                                                      
</edit-config>                                                                                                                                                                                                                                 
</rpc>  

 Can anyone tell me if I'm missing something here?  I've tried using a merge operation, or no explicit operation at all but the behavior is unchanged.

10 REPLIES 10
Highlighted
Cisco Employee

This doesn't really seem like an issue with YDK.  It points to a model mapping issue on the XE device.  I'll check to see if there's a workaround.

Highlighted

This issue mysteriously resolved itself when I started working on it again this morning, were you able to reproduce this?

Highlighted

This has started happening again after sitting idle over the weekend.

Highlighted

Could you please post your script and python environment (pip list | grep ydk).

Yan Gorelik
YDK Solutions
Highlighted

Sure, here's my environment:

root@ba46e77e2368:~/ydk-py/persist# pip list | grep ydk
ydk                     0.8.4      
ydk-models-cisco-ios-xe 16.9.3     
ydk-models-cisco-nx-os  9.3.3      
ydk-models-ietf         0.1.5.post2
ydk-models-openconfig   0.1.7 

...and the little script I'm testing with:

from ydk.services import NetconfService, Datastore
from ydk.providers import NetconfServiceProvider
from ydk.models.openconfig import openconfig_interfaces, openconfig_vlan_types
from ydk.models.ietf import iana_if_type
from ydk.filters import YFilter


def build_oc_if(phys_port, descr, vlan_id):
    """
    configures an openconfig interface model

    :param port: interface name, e.g. Gi0/0/0
    :param descr: interface description
    :param vlan_id: VLAN id number
    """
    interfaces = openconfig_interfaces.Interfaces()
    i.name = phys_port
    i.config.type = iana_if_type.EthernetCsmacd()
    i.config.name = phys_port
    i.config.description = descr
    i.ethernet.switched_vlan.config.interface_mode = \
        openconfig_vlan_types.VlanModeType().ACCESS
    i.ethernet.switched_vlan.config.access_vlan = vlan_id

    return i


if __name__ == '__main__':
    import sys
    import logging
    from getpass import getpass

    log = logging.getLogger('ydk')
    log.setLevel(logging.INFO)
    handler = logging.StreamHandler()
    formatter = logging.Formatter(
            "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
            )
    handler.setFormatter(formatter)
    log.addHandler(handler)

    interface = build_oc_if("GigabitEthernet1/0/1", "TEST DESCRIPTION", 10)

    password = getpass(prompt="SSH password: ")
    nc = NetconfService()

    nc_provider = NetconfServiceProvider(
        address=sys.argv[1],
        port=830,
        username='grundler',
        password=password)

    interface.yfilter = YFilter.replace
    model = openconfig_interfaces.Interfaces()
    model.interface.append(interface)


    nc.edit_config(nc_provider,
                   Datastore.candidate,
                   model)

    nc.validate(nc_provider, Datastore.candidate)

    nc.commit(nc_provider)

    nc.close_session(nc_provider)
Highlighted

In the first post you noted that XE device version is 16.9.4, but in your environment the XE model version is 16.9.3. That could be the root cause of the issue, because models could be essentially different. Please upgrade you XE model bundle to 16.9.4 and repeat your script.

Yan Gorelik
YDK Solutions
Highlighted

Hi Yan, this is using the openconfig model bundle
Highlighted

I tried your script on XE sandbox and got the same error. I then realized that this could be due to limitation on usage of openconfig models on XE-16.9.x devices. Indeed, when I checked deviations, I found that configuration of vlan using openconfig models currently is not supported. Therefore for vlan configuration you should use native Cisco XE models.

Yan Gorelik
YDK Solutions
Highlighted
Beginner

I found a similar situation with IOS XE and Openconfig BGP. I cannot create a new peer using openconfig-bgp model.

I can create the bgp process, I can update a peer, but I cannot create a new one, both via netconf and restconf.

The error I get is below. It complains about send-community configuration, which is optional. But it does not work even I do set define <send-community> in my request.

Interresting also is that I cannot retrieve the send-community configuration if I set it manually via CLI. 

 

<errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf">
    <error>
        <error-message>/network-instances/network-instance{default}/protocols/protocol{oc-pol-types:BGP 65111}/bgp/neighbors/neighbor{1.1.1.2}/config/send-community: Runtime mapping error.</error-message>
        <error-path>/openconfig-network-instance:network-instances/network-instance</error-path>
        <error-tag>malformed-message</error-tag>
        <error-type>application</error-type>
    </error>
</errors>

My xml filter is below. It works (update the peer) if I create the peer first on CLI. 

 

<network-instance xmlns="http://openconfig.net/yang/network-instance"  xmlns:oc-netinst="http://openconfig.net/yang/network-instance">
    <name>default</name>
    <config>
        <name>default</name>
    </config>
    <protocols>
        <protocol>
            <identifier xmlns:oc-pol-types="http://openconfig.net/yang/policy-types">oc-pol-types:BGP</identifier>
            <name>65111</name>
            <config>
                <identifier xmlns:oc-pol-types="http://openconfig.net/yang/policy-types">oc-pol-types:BGP</identifier>
                <name>65111</name>
            </config>
            <bgp>
                <global>
                    <config>
                        <as>65111</as>
                    </config>
                </global>
			<neighbors>
  <neighbor>
    <neighbor-address>1.1.1.2</neighbor-address>
    <config>
      <neighbor-address>1.1.1.2</neighbor-address>
      <peer-as>65112</peer-as>

    </config>
    
</neighbor>
</neighbors>

 

Highlighted

The XML payload in your post does not pass simple validation test! That tells me, the payload was not generated by YDK. Its content does not look correct.

Yan Gorelik
YDK Solutions
Content for Community-Ad
Cisco Community October 2020 Spotlight Award Winners
This widget could not be displayed.