cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
612
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