<?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 Re: template - 'when' attribute cannot be used on key elements in NSO Developer Hub Discussions</title>
    <link>https://community.cisco.com/t5/nso-developer-hub-discussions/template-when-attribute-cannot-be-used-on-key-elements/m-p/3454225#M479</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;SPAN style="color: #3d3d3d; font-family: arial; font-size: 12px;"&gt;In short, if you want to implement such block with when statements, you'd need to have the when condition on a higher level in the hierarchy of the target model (e.g. on 'sap' rather than on 'sap-id'), and you'd need to duplicate the block in your xml template, so that you'd have one complete block with &amp;lt;sap-id&amp;gt;{port}:{vlan}&amp;lt;/sap-id&amp;gt; and another with &amp;lt;sap-id&amp;gt;{port}&amp;lt;/sap-id&amp;gt;.&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;I suspected that, but how? The upper block is foreach loop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can i add dummy wrapper in XML that is removed or not used in XML? I'm pretty sure template below will produce the wrong config, there is no "dummy_wrapper" in config tree.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;lt;dummy_wrapper foreach="{sap}"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap when="{not(vlan=0)}"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap-id &amp;gt;{port}:{vlan}&amp;lt;/sap-id&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sap&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap when="{vlan=0}"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap-id&amp;gt;{port}&amp;lt;/sap-id&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sap&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;/dummy_wrapper&amp;gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 14 May 2018 06:31:04 GMT</pubDate>
    <dc:creator>rainnomm56</dc:creator>
    <dc:date>2018-05-14T06:31:04Z</dc:date>
    <item>
      <title>template - 'when' attribute cannot be used on key elements</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/template-when-attribute-cannot-be-used-on-key-elements/m-p/3454223#M477</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Natural key would port and vlan combination for service port. My issue is that NSO does not allow key used in template for "when" statement. How can i have 2 different xml lines with out it?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Live device conf:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;epipe&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service-id&amp;gt;3714&amp;lt;/service-id&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;customer&amp;gt;1&amp;lt;/customer&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;description&amp;gt;NSO 2sap test&amp;lt;/description&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap-id&amp;gt;1/2/1&amp;lt;/sap-id&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sap&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap-id&amp;gt;3/1/1:510&amp;lt;/sap-id&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sap&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/epipe&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;template that gives error on subject line:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap foreach="{sap}"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap-id when="{not(vlan=0)}"&amp;gt;{port}:{vlan}&amp;lt;/sap-id&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap-id when="{vlan=0}"&amp;gt;{port}&amp;lt;/sap-id&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sap&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;service yang for sap:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; list sap {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; key "port vlan";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; min-elements 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; max-elements 2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; leaf port {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type string;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mandatory true;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; leaf vlan {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type uint32 {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; range "0..4096";&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 01 Mar 2019 12:10:06 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/template-when-attribute-cannot-be-used-on-key-elements/m-p/3454223#M477</guid>
      <dc:creator>rainnomm56</dc:creator>
      <dc:date>2019-03-01T12:10:06Z</dc:date>
    </item>
    <item>
      <title>Re: template - 'when' attribute cannot be used on key elements</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/template-when-attribute-cannot-be-used-on-key-elements/m-p/3454224#M478</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The key that cannot be used in 'when' statement is the key of the &lt;STRONG&gt;target&lt;/STRONG&gt; model (e.g. device model).&lt;/P&gt;&lt;P&gt;Port and vlan from you service model (source model) can be used in when statements, but you cannot have when statements on key elements of your target model.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In this case, assuming that your target model is a ned, you can have a look at the ned YANG model, and you should see that it contains a list called sap, and this list's key is composed out of the sap-id leaf, and having the target model's key in a when statement is not allowed, and this is why you're getting the error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In short, if you want to implement such block with when statements, you'd need to have the when condition on a higher level in the hierarchy of the target model (e.g. on 'sap' rather than on 'sap-id'), and you'd need to duplicate the block in your xml template, so that you'd have one complete block with &amp;lt;sap-id&amp;gt;{port}:{vlan}&amp;lt;/sap-id&amp;gt; and another with &amp;lt;sap-id&amp;gt;{port}&amp;lt;/sap-id&amp;gt;.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 13 May 2018 11:07:57 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/template-when-attribute-cannot-be-used-on-key-elements/m-p/3454224#M478</guid>
      <dc:creator>yfherzog</dc:creator>
      <dc:date>2018-05-13T11:07:57Z</dc:date>
    </item>
    <item>
      <title>Re: template - 'when' attribute cannot be used on key elements</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/template-when-attribute-cannot-be-used-on-key-elements/m-p/3454225#M479</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;SPAN style="color: #3d3d3d; font-family: arial; font-size: 12px;"&gt;In short, if you want to implement such block with when statements, you'd need to have the when condition on a higher level in the hierarchy of the target model (e.g. on 'sap' rather than on 'sap-id'), and you'd need to duplicate the block in your xml template, so that you'd have one complete block with &amp;lt;sap-id&amp;gt;{port}:{vlan}&amp;lt;/sap-id&amp;gt; and another with &amp;lt;sap-id&amp;gt;{port}&amp;lt;/sap-id&amp;gt;.&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;I suspected that, but how? The upper block is foreach loop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can i add dummy wrapper in XML that is removed or not used in XML? I'm pretty sure template below will produce the wrong config, there is no "dummy_wrapper" in config tree.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;lt;dummy_wrapper foreach="{sap}"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap when="{not(vlan=0)}"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap-id &amp;gt;{port}:{vlan}&amp;lt;/sap-id&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sap&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap when="{vlan=0}"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sap-id&amp;gt;{port}&amp;lt;/sap-id&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/sap&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;/dummy_wrapper&amp;gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 May 2018 06:31:04 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/template-when-attribute-cannot-be-used-on-key-elements/m-p/3454225#M479</guid>
      <dc:creator>rainnomm56</dc:creator>
      <dc:date>2018-05-14T06:31:04Z</dc:date>
    </item>
    <item>
      <title>Re: template - 'when' attribute cannot be used on key elements</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/template-when-attribute-cannot-be-used-on-key-elements/m-p/3454226#M480</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;It depends on the NSO version. &lt;/P&gt;&lt;P&gt;Starting with NSO 4.6, a functionality similar to what you illustrated is now supported.&lt;/P&gt;&lt;P&gt;Checkout the developer guide - search for "Template processing instructions" and around the same chapter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you need to use an older version of NSO, then maybe you can try and get the foreach one level higher.&lt;/P&gt;&lt;P&gt;If things are getting too hairy, you can also move the iteration to the code that applies the template (if that isn't a template-only service package).&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 May 2018 07:37:08 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/template-when-attribute-cannot-be-used-on-key-elements/m-p/3454226#M480</guid>
      <dc:creator>yfherzog</dc:creator>
      <dc:date>2018-05-14T07:37:08Z</dc:date>
    </item>
  </channel>
</rss>

