cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
606
Views
0
Helpful
1
Replies

Internal error invalid_xpath on packages reload

ron.whitt
Level 1
Level 1

This is a L2VPN service for IOS-XR.  The YANG compiles just fine, but when I reload packages I get this error:

Error: Internal error: {failed,
{invalid_xpath,
"/ncs:devices/ncs:device[ncs:name=current()/../device]/ncs:config/cisco-ios-xr:interface/cisco-ios-xr:Loopback[cisco-ios-xr:id='1']/cisco-ios-xr:ipv4/cisco-ios-xr:address/cisco-ios-xr:ip",
[neighbor_ip,link,orloVpn],
{callback,cs_xpath,
{no_mount_id_found,
[config,
{{'$KEY',1,1}},
device,
['http://tail-f.com/ns/ncs'|devices]]}}}}

 

The error is coming from a line where I'm trying to get the remote end IP "neighbor_ip"

module orloVpn {

  namespace "http://example.com/orloVpn";
  prefix orloVpn;

  import ietf-inet-types {
    prefix inet;
  }
  import tailf-common {
    prefix tailf;
  }
  import tailf-ncs {
    prefix ncs;
  }
  import tailf-ned-cisco-ios-xr {
    prefix cisco-ios-xr;
	}  

  description
    "This service creates L2VPNs across the Optical Routing and Orchestration Lab - V1";

  revision 2016-01-01 {
    description
      "Initial revision. v1";
  }

    // Global service information

  list orloVpn {
    description "This is an RFS skeleton service";
	
    key name;
	unique pwID;	
	
	uses ncs:service-data;
    ncs:servicepoint orloVpn-servicepoint;
	
    leaf name {
      tailf:info "Service instance name / Customer name";
      tailf:cli-allow-range;
	  mandatory true;
      type string;
    }
	
    leaf pwID {
	  tailf:info "Unique Pseudowire ID";
	  mandatory true;
      type uint32 {
        range "1..4294967295";
      }
    }
	
    leaf vlanID {
      tailf:info "Select a VLAN ID, this will be the same at both ends of the circuit (number from 1 to 1000)";
	  mandatory true;
	  type int32 {
        range "1..1000";
      }
    }

    leaf transportMode {
	  tailf:info "Select the tranport encapsulation";
	  mandatory true;
	  type enumeration {
	    enum "l2transport";
		}
	  }  
	      
	// This section creates a list with two elements (link 1 and link 2) describing the service at either end of the circuit
	
    list link { 
	  tailf:info "Service parms for each end of the circuit. NOTE: This service assumes both ends are ASR9Ks";
	  min-elements 2;
	  max-elements 2;
	  key device;
	
	  leaf device {
	    tailf:info "Pick a device for this end of the circuit";
		mandatory true;
        type leafref {
          path "/ncs:devices/ncs:device/ncs:name";
        }
      }

      leaf gigEPort {
	    tailf:info "Select the client side port";
		mandatory true;
        type leafref {
          path "/ncs:devices/ncs:device[ncs:name=current()/../device]/ncs:config/cisco-ios-xr:interface/cisco-ios-xr:GigabitEthernet/cisco-ios-xr:id";
        }
      }
      leaf bridgeGroupName {
	    tailf:info "Input the L2VPN bridge group for the service";
	    mandatory true;
	    type string;
	    }

      leaf bridgeDomainName {
	    tailf:info "Input a name to apply to the Bridge Group and the VFI";
	    mandatory true;
	    type string;
	    }		  
		
	  leaf neighbor_ip {
		mandatory true;
		type inet:ipv4-address;
		tailf:link
		"/ncs:devices/ncs:device[ncs:name=current()/../device]/ncs:config/cisco-ios-xr:interface/cisco-ios-xr:Loopback[cisco-ios-xr:id='1']/cisco-ios-xr:ipv4/cisco-ios-xr:address/cisco-ios-xr:ip";
		}  
	}
  } 
}
<config-template xmlns="http://tail-f.com/ns/config/1.0"
                 servicepoint="orloVpn-servicepoint">
  <devices xmlns="http://tail-f.com/ns/ncs">
  <!-- This is the A End of the Circuit --> 
    <device>
      <name>{/link[1]/device}</name>
      <config>
        <interface xmlns="http://tail-f.com/ned/cisco-ios-xr">
          <GigabitEthernet-subinterface>
            <GigabitEthernet>
              <id>{/link[1]/gigEPort}.{/vlanID}</id>
              <mode>{/transportMode}</mode>
              <encapsulation>
                <dot1q>
                  <vlan-id>{/vlanID}</vlan-id>
                </dot1q>
              </encapsulation>
            </GigabitEthernet>
          </GigabitEthernet-subinterface>		  
        </interface>
        <l2vpn xmlns="http://tail-f.com/ned/cisco-ios-xr">
          <bridge>
            <group>
              <group-name>{/bridgeGroupName}</group-name>
              <bridge-domain>
                <bridge-domain-name>{/bridgeDomainName}</bridge-domain-name>
                <interface>
                  <name>GigabitEthernet{/link[1]/gigEPort}.{/vlanID}</name>
                </interface>
                <vfi>
                  <name>{/bridgeDomainName}</name> 
                  <neighbor>
                    <address>{/link[2]/*/neighbor_ip}</address>
                    <pw-id>{/pwID}</pw-id>
                  </neighbor>
                </vfi>
              </bridge-domain>
            </group>
          </bridge>
        </l2vpn>		
      </config>
    </device>
  <!-- This is the Z End of the Circuit -->	
    <device>
      <name>{/link[2]/device}</name>
      <config>
        <interface xmlns="http://tail-f.com/ned/cisco-ios-xr">
          <GigabitEthernet-subinterface>
            <GigabitEthernet>
              <id>{/link[2]/gigEPort}.{/vlanID}</id>
              <mode>{/transportMode}</mode>
              <encapsulation>
                <dot1q>
                  <vlan-id>{/vlanID}</vlan-id>
                </dot1q>
              </encapsulation>
            </GigabitEthernet>
          </GigabitEthernet-subinterface>		  
        </interface>
        <l2vpn xmlns="http://tail-f.com/ned/cisco-ios-xr">
          <bridge>
            <group>
              <group-name>{/bridgeGroupName}</group-name>
              <bridge-domain>
                <bridge-domain-name>{/bridgeDomainName}</bridge-domain-name>
                <interface>
                  <name>GigabitEthernet{/link[2]/gigEPort}.{/vlanID}</name>
                </interface>
                <vfi>
                  <name>{/bridgeDomainName}</name> 
                  <neighbor>
                    <address>{/link[1]/*/neighbor_ip}</address>
                    <pw-id>{/pwID}</pw-id>
                  </neighbor>
                </vfi>
              </bridge-domain>
            </group>
          </bridge>
        </l2vpn>		
      </config>
    </device>	
  </devices>
</config-template>
1 Reply 1

ron.whitt
Level 1
Level 1

So, I think the node "/devices/device/[my device]/interface/Loopback/1/ipv4/address/ip"  doesn't render in xpath.  It looks like the furthest down you can retrieve is loopback 1/iipv4/address

 

admin@ncs(config)# show full-configuration devices device ASR9001A config cisco-ios-xr:interface Loopback 1 ipv4 address | display xpath
/devices/device[name='ASR9001A']/config/cisco-ios-xr:interface/Loopback[id='1']/ipv4/address/ip 10.0.0.1
/devices/device[name='ASR9001A']/config/cisco-ios-xr:interface/Loopback[id='1']/ipv4/address/mask 255.255.255.255

 

It returns a tuple (/ipv4/address/ip   and /ipv4/address/mask)

 

My goal is to do a link to just the ipv4/address/ip leaf

So... can I do that or am I forced to make it a manual input (i.e. user input for ipv4 address)

Thanks

 

Getting Started

Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the NSO Developer community: