02-19-2021 01:55 PM - edited 02-19-2021 01:56 PM
Hello,
Is there anything extra that should be done to convert enum to string for eval at templates?
I have this simple model and XML template:
<config-template xmlns="http://tail-f.com/ns/config/1.0"> <devices xmlns="http://tail-f.com/ns/ncs"> <device> <!-- Select the devices from some data structure in the service model. In this skeleton the devices are specified in a leaf-list. Select all devices in that leaf-list: --> <name>{/device}</name> <config> <interface xmlns="http://tail-f.com/ned/cisco-nx"> <?if {interface_type = 'Ethernet'} ?> <Ethernet> <name>{interface_id}</name> <switchport> <access> <vlan>200</vlan> </access> </switchport> <description>ncepnspkafd0001-1V.15.25.OB1</description> <speed>10000</speed> <duplex>full</duplex> </Ethernet> <?end?> <?if {interface_type = 'Loopback'} ?> <loopback> <name>{interface_id}</name> <description>Routing loopback interface</description> <ip> <address> <ipaddr>10.2.0.3/32</ipaddr> <tag>12345</tag> </address> </ip> </loopback> <?end?> </interface> </config> </device> </devices> </config-template>
module xpath-yang-tests { namespace "http://example.com/xpath-yang-tests"; prefix xpath-yang-tests; import ietf-inet-types { prefix inet; } import tailf-common { prefix tailf; } import tailf-ncs { prefix ncs; } description "Bla bla..."; revision 2016-01-01 { description "Initial revision."; } container action { tailf:action double { tailf:actionpoint xpath-yang-tests-action; input { leaf number { type uint8; } } output { leaf result { type uint16; } } } } list xpath-yang-tests { description "This is an RFS skeleton service"; key name; leaf name { tailf:info "Unique service id"; tailf:cli-allow-range; type string; } uses ncs:service-data; ncs:servicepoint xpath-yang-tests-servicepoint; // may replace this with other ways of refering to the devices. leaf-list device { type leafref { path "/ncs:devices/ncs:device/ncs:name"; } } // replace with your own stuff here leaf interface_id { type string; } leaf interface_type { tailf:info "nve, Ethernet, TenGigE, etc"; description "nve, Ethernet, TenGigE, etc"; type enumeration { enum nve; enum Ethernet; enum Loopback; } } /* leaf test { type leafref { path "/xpath-yang-tests:xpath-yang-tests/"; } } */ } }
But I can't get the <?if ?> to work, they always evaluate to false even when the enum has the same value
Thanks in advance
Solved! Go to Solution.
02-19-2021 02:25 PM
Try using /interface_type and /interface_id, I wonder if your context node gets moved by the implicit /device iteration, since it is a leaf-list.
02-19-2021 02:12 PM - edited 02-19-2021 02:12 PM
I don't think you need to do anything extra. But, what do you get in xpath.trace or when doing commit dry-run | debug xpath?
02-19-2021 02:15 PM
Hi Viktor, this is the output:
sfloresk@ncs(config)# show configuration xpath-yang-tests test device [ eng04-cspine-01 ] interface_id 100 interface_type Loopback ! sfloresk@ncs(config)# commit dry-run | debug xpath 2021-02-19T15:14:22.405 xpath: evaluating: /xpath-yang-tests[name='test']/device: /ncs:devices/ncs:device/ncs:name 2021-02-19T15:14:22.405 xpath: exists(/devices/device[name='eng04-cspine-01']) = true 2021-02-19T15:14:22.406 xpath: result: /xpath-yang-tests[name='test']/device: true (0.000 s) 2021-02-19T15:14:22.428 xpath: template xpath-yang-tests-template: evaluating: /device 2021-02-19T15:14:22.428 xpath: template xpath-yang-tests-template: match: /xpath-yang-tests[name='test']/device[.='eng04-cspine-01']: eng04-cspine-01 2021-02-19T15:14:22.428 xpath: template xpath-yang-tests-template: result: one node (0.000 s) 2021-02-19T15:14:22.429 xpath: template xpath-yang-tests-template: evaluating: string(boolean(interface_type = 'Ethernet')) 2021-02-19T15:14:22.429 xpath: template xpath-yang-tests-template: result: false (0.000 s) 2021-02-19T15:14:22.429 xpath: template xpath-yang-tests-template: evaluating: string(boolean(interface_type = 'Loopback')) 2021-02-19T15:14:22.429 xpath: template xpath-yang-tests-template: result: false (0.000 s) 2021-02-19T15:14:22.437 xpath: evaluating: /xpath-yang-tests[name='test']/device: /ncs:devices/ncs:device/ncs:name 2021-02-19T15:14:22.437 xpath: exists(/devices/device[name='eng04-cspine-01']) = true 2021-02-19T15:14:22.437 xpath: result: /xpath-yang-tests[name='test']/device: true (0.000 s) cli { local-node { data +xpath-yang-tests test { + device [ eng04-cspine-01 ]; + interface_id 100; + interface_type Loopback; +} } } sfloresk@ncs(config)#
02-19-2021 02:25 PM
Try using /interface_type and /interface_id, I wonder if your context node gets moved by the implicit /device iteration, since it is a leaf-list.
02-19-2021 03:07 PM
That worked, thanks!
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: