<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic xpath check for Config-Templates in NSO Developer Hub Discussions</title>
    <link>https://community.cisco.com/t5/nso-developer-hub-discussions/xpath-check-for-config-templates/m-p/3775889#M3137</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am having some challenges when implementing config templates based on device version using config-template only.&lt;/P&gt;
&lt;P&gt;My solution&amp;nbsp;is aiming to use the platform&amp;nbsp;version from the devices provided by the NED based on the version nr a config template is pushed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The Version can be anything between&amp;nbsp;&lt;SPAN&gt;saos-06-11-01-0000 and&amp;nbsp;saos-06-17-01-0149. The logic I am aiming to implement&amp;nbsp;is when the version is above&amp;nbsp;saos-06-15-00-000 then push the new config style else push the old format.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is an example of the version output:&lt;/P&gt;
&lt;P&gt;nsoadmin@ncs# show devices device 3916-* platform version &lt;BR /&gt;NAME VERSION &lt;BR /&gt;----------------------------&lt;BR /&gt;3916-A saos-06-17-01-0149 &lt;BR /&gt;3916-B saos-06-14-00-0434&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;nsoadmin@ncs# show devices device 3916-* platform version | display xpath &lt;BR /&gt;/devices/device[name='3916-A']/platform/version saos-06-17-01-0149&lt;BR /&gt;/devices/device[name='3916-B']/platform/version saos-06-14-00-0434&lt;BR /&gt;nsoadmin@ncs#&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;First I tried to use the following&amp;nbsp;logic:&lt;/P&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;set-root-node&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;{/devices/device[name=$EDU-DEVICE]/platform}&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;{/version &amp;lt;=&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;'saos-06-15&lt;/SPAN&gt;&lt;SPAN&gt;-00-0000'&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I realized it was not working due to the datatype which is a string so comparison&amp;nbsp;operators will not work.&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Also converting the check to number did not result in a valid result.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;{&lt;SPAN class="fontstyle0"&gt;number&lt;/SPAN&gt;(/version) &amp;lt;=&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;'saos-06-15&lt;/SPAN&gt;&lt;SPAN&gt;-00-0000'&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I end up using the following logic:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;set-root-node&lt;/SPAN&gt;&lt;SPAN&gt; {/devices/device[name=$EDU-DEVICE]/platform}&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;for&lt;/SPAN&gt;&lt;SPAN&gt; i&lt;/SPAN&gt;&lt;SPAN&gt;=0; {$i &amp;lt; 15};&lt;/SPAN&gt;&lt;SPAN&gt; i&lt;/SPAN&gt;&lt;SPAN&gt;={$i +1}&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; {/version =&lt;/SPAN&gt;&lt;SPAN&gt; concat&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;'saos-06-'&lt;/SPAN&gt;&lt;SPAN&gt;,$i,&lt;/SPAN&gt;&lt;SPAN&gt;'-00-0434'&lt;/SPAN&gt;&lt;SPAN&gt;)}&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;!--OLD style config section--&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;!--New style config section--&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?end?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?end?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;But the issue I have with this approach is that the for loop iterate over all nr's from 0 to 15 each time the result is false it pushes the else section and when the result is true it also pushes&amp;nbsp;the if section, which ends up in both code being pushed to the device having any version between (saos-06-0-00-0434 -&amp;nbsp;saos-06-15-00-0434).&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;The solutions&amp;nbsp;can be implemented in python very easy however a requirement I have is to use XML only.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;Looking forward&amp;nbsp;to read&amp;nbsp;your feedback.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;Thank you.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;</description>
    <pubDate>Wed, 09 Jan 2019 10:46:59 GMT</pubDate>
    <dc:creator>Abdel el Anazi</dc:creator>
    <dc:date>2019-01-09T10:46:59Z</dc:date>
    <item>
      <title>xpath check for Config-Templates</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/xpath-check-for-config-templates/m-p/3775889#M3137</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am having some challenges when implementing config templates based on device version using config-template only.&lt;/P&gt;
&lt;P&gt;My solution&amp;nbsp;is aiming to use the platform&amp;nbsp;version from the devices provided by the NED based on the version nr a config template is pushed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The Version can be anything between&amp;nbsp;&lt;SPAN&gt;saos-06-11-01-0000 and&amp;nbsp;saos-06-17-01-0149. The logic I am aiming to implement&amp;nbsp;is when the version is above&amp;nbsp;saos-06-15-00-000 then push the new config style else push the old format.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is an example of the version output:&lt;/P&gt;
&lt;P&gt;nsoadmin@ncs# show devices device 3916-* platform version &lt;BR /&gt;NAME VERSION &lt;BR /&gt;----------------------------&lt;BR /&gt;3916-A saos-06-17-01-0149 &lt;BR /&gt;3916-B saos-06-14-00-0434&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;nsoadmin@ncs# show devices device 3916-* platform version | display xpath &lt;BR /&gt;/devices/device[name='3916-A']/platform/version saos-06-17-01-0149&lt;BR /&gt;/devices/device[name='3916-B']/platform/version saos-06-14-00-0434&lt;BR /&gt;nsoadmin@ncs#&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;First I tried to use the following&amp;nbsp;logic:&lt;/P&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;set-root-node&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;{/devices/device[name=$EDU-DEVICE]/platform}&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;{/version &amp;lt;=&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;'saos-06-15&lt;/SPAN&gt;&lt;SPAN&gt;-00-0000'&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I realized it was not working due to the datatype which is a string so comparison&amp;nbsp;operators will not work.&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Also converting the check to number did not result in a valid result.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;{&lt;SPAN class="fontstyle0"&gt;number&lt;/SPAN&gt;(/version) &amp;lt;=&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;'saos-06-15&lt;/SPAN&gt;&lt;SPAN&gt;-00-0000'&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I end up using the following logic:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;set-root-node&lt;/SPAN&gt;&lt;SPAN&gt; {/devices/device[name=$EDU-DEVICE]/platform}&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;for&lt;/SPAN&gt;&lt;SPAN&gt; i&lt;/SPAN&gt;&lt;SPAN&gt;=0; {$i &amp;lt; 15};&lt;/SPAN&gt;&lt;SPAN&gt; i&lt;/SPAN&gt;&lt;SPAN&gt;={$i +1}&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; {/version =&lt;/SPAN&gt;&lt;SPAN&gt; concat&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;'saos-06-'&lt;/SPAN&gt;&lt;SPAN&gt;,$i,&lt;/SPAN&gt;&lt;SPAN&gt;'-00-0434'&lt;/SPAN&gt;&lt;SPAN&gt;)}&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;!--OLD style config section--&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;!--New style config section--&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?end?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?end?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;But the issue I have with this approach is that the for loop iterate over all nr's from 0 to 15 each time the result is false it pushes the else section and when the result is true it also pushes&amp;nbsp;the if section, which ends up in both code being pushed to the device having any version between (saos-06-0-00-0434 -&amp;nbsp;saos-06-15-00-0434).&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;The solutions&amp;nbsp;can be implemented in python very easy however a requirement I have is to use XML only.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;Looking forward&amp;nbsp;to read&amp;nbsp;your feedback.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;Thank you.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Wed, 09 Jan 2019 10:46:59 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/xpath-check-for-config-templates/m-p/3775889#M3137</guid>
      <dc:creator>Abdel el Anazi</dc:creator>
      <dc:date>2019-01-09T10:46:59Z</dc:date>
    </item>
    <item>
      <title>Re: xpath check for Config-Templates</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/xpath-check-for-config-templates/m-p/3775995#M3143</link>
      <description>&lt;P&gt;You may want to try &lt;CODE&gt;string-compare(string,string)&lt;/CODE&gt; returning -1, 0, or 1. It is NSO XPath extension usable in other contexts, maybe it works in templates too - see &lt;CODE&gt;tailf_yang_extension&lt;/CODE&gt; man page.&lt;/P&gt;</description>
      <pubDate>Wed, 09 Jan 2019 12:50:12 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/xpath-check-for-config-templates/m-p/3775995#M3143</guid>
      <dc:creator>mvolf</dc:creator>
      <dc:date>2019-01-09T12:50:12Z</dc:date>
    </item>
    <item>
      <title>Re: xpath check for Config-Templates</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/xpath-check-for-config-templates/m-p/3776045#M3145</link>
      <description>&lt;P&gt;Thank you very much for pointing that out, after reading the man page I have to change the logic to the following:&lt;/P&gt;
&lt;DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&amp;lt;?&lt;/SPAN&gt;&lt;SPAN&gt;if&lt;/SPAN&gt;&lt;SPAN&gt; {string-compare(/version, &lt;/SPAN&gt;&lt;SPAN&gt;'saos-06-14-00-0434'&lt;/SPAN&gt;&lt;SPAN&gt;) &amp;lt;=0}&lt;/SPAN&gt;&lt;SPAN&gt;?&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;The result worked exactly&amp;nbsp;as I wanted...&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Wed, 09 Jan 2019 13:32:52 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/xpath-check-for-config-templates/m-p/3776045#M3145</guid>
      <dc:creator>Abdel el Anazi</dc:creator>
      <dc:date>2019-01-09T13:32:52Z</dc:date>
    </item>
  </channel>
</rss>

