<?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: Create template via Maapi in NSO Developer Hub Discussions</title>
    <link>https://community.cisco.com/t5/nso-developer-hub-discussions/create-template-via-maapi/m-p/3902114#M4138</link>
    <description>Firstly, what is the template you are trying to apply? Also if you main goal is to create an NSO service you can do that directly without involving an action to do so.&lt;BR /&gt;&lt;BR /&gt;-Dan&lt;BR /&gt;</description>
    <pubDate>Fri, 02 Aug 2019 14:53:59 GMT</pubDate>
    <dc:creator>Dan.Sullivan</dc:creator>
    <dc:date>2019-08-02T14:53:59Z</dc:date>
    <item>
      <title>Create template via Maapi</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/create-template-via-maapi/m-p/3898286#M4077</link>
      <description>&lt;P&gt;I'm trying to create and apply a template in NSO 4.7 directly through the Python code, using Maapi and I'm not getting it. Is there any way to do this?&lt;BR /&gt;I found an example that it's possible to change the devices via Maapi but I can't create any template directly by it.&lt;/P&gt;</description>
      <pubDate>Fri, 26 Jul 2019 13:27:11 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/create-template-via-maapi/m-p/3898286#M4077</guid>
      <dc:creator>Thales Souza</dc:creator>
      <dc:date>2019-07-26T13:27:11Z</dc:date>
    </item>
    <item>
      <title>Re: Create template via Maapi</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/create-template-via-maapi/m-p/3900996#M4116</link>
      <description>&lt;P&gt;What problem are u having?&lt;/P&gt;</description>
      <pubDate>Wed, 31 Jul 2019 19:48:53 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/create-template-via-maapi/m-p/3900996#M4116</guid>
      <dc:creator>Dan.Sullivan</dc:creator>
      <dc:date>2019-07-31T19:48:53Z</dc:date>
    </item>
    <item>
      <title>Re: Create template via Maapi</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/create-template-via-maapi/m-p/3902110#M4137</link>
      <description>&lt;P&gt;I'm trying to instantiate a service through Maapi.&lt;/P&gt;&lt;P&gt;I am using this code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;from ncs import maapi
from ncs.application import Service
from ncs.dp import Action

import _ncs.error

class ApplyTemplate(Action):
@Action.action
def cb_action(self, uinfo, name, kp, input, output):
self.log.info('invoke action %s with template %s' % (name, input.name))

def apply_template(t, i):
template = ncs.template.Template(t, i.context_node)
vars = ncs.template.Variables()
for v in i.variable:
vars.add(v.name, v.value)
template.apply(i.name, vars)

do_apply = False
m = maapi.Maapi()
if uinfo.actx_thandle != -1:
# When invoked from the CLI we get a transaction
# Note: unless we are in configure mode it will be read-only
m.attach2(0, 0, uinfo.actx_thandle)
trans = maapi.Transaction(m, uinfo.actx_thandle)
else:
# Start write transaction and apply it at end
trans = m.start_write_trans(usid=uinfo.usid)
do_apply = True

try:
apply_template(trans, input)
except _ncs.error.Error as e:
if e.confd_errno == ncs.ERR_NOT_WRITABLE:
# Happens when invoked from the CLI and not in configure mode,
# assume user wants us to start a separate transaction and
# apply the template there.
m.detach(uinfo.actx_thandle)
trans = m.start_write_trans(usid=uinfo.usid)
do_apply = True
apply_template(trans, input)
else:
raise e

if do_apply:

trans.apply()&lt;/PRE&gt;&lt;P&gt;&lt;SPAN class="tlid-translation translation"&gt;&lt;SPAN class=""&gt;I found this project on Github.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;#&lt;A href="https://github.com/NSO-developer/apply-config-template" target="_blank"&gt;https://github.com/NSO-developer/apply-config-template&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The code runs without error however when I enter the CLI no service has been created.&lt;/P&gt;</description>
      <pubDate>Fri, 02 Aug 2019 14:49:40 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/create-template-via-maapi/m-p/3902110#M4137</guid>
      <dc:creator>Thales Souza</dc:creator>
      <dc:date>2019-08-02T14:49:40Z</dc:date>
    </item>
    <item>
      <title>Re: Create template via Maapi</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/create-template-via-maapi/m-p/3902114#M4138</link>
      <description>Firstly, what is the template you are trying to apply? Also if you main goal is to create an NSO service you can do that directly without involving an action to do so.&lt;BR /&gt;&lt;BR /&gt;-Dan&lt;BR /&gt;</description>
      <pubDate>Fri, 02 Aug 2019 14:53:59 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/create-template-via-maapi/m-p/3902114#M4138</guid>
      <dc:creator>Dan.Sullivan</dc:creator>
      <dc:date>2019-08-02T14:53:59Z</dc:date>
    </item>
    <item>
      <title>Re: Create template via Maapi</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/create-template-via-maapi/m-p/3902203#M4140</link>
      <description>I'm trying to apply the l2vpn template.&lt;BR /&gt;I should do it straight into NSO but I need to do it pragmatically.</description>
      <pubDate>Fri, 02 Aug 2019 16:57:32 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/create-template-via-maapi/m-p/3902203#M4140</guid>
      <dc:creator>Thales Souza</dc:creator>
      <dc:date>2019-08-02T16:57:32Z</dc:date>
    </item>
    <item>
      <title>Re: Create template via Maapi</title>
      <link>https://community.cisco.com/t5/nso-developer-hub-discussions/create-template-via-maapi/m-p/3902250#M4142</link>
      <description>&lt;P&gt;Likewise, I am a bit confused on what you are attempting to do.&lt;/P&gt;
&lt;P&gt;Generally, templates are generated from the CDB config schema (device config, service instance config, etc.) that you want to parameterize and applied via the template.apply mechanism.&amp;nbsp; Applying the template sets the CDB config specified in the template in you transaction.&amp;nbsp; Applying the transaction, then commits those changes.&lt;/P&gt;
&lt;P&gt;Although it seems feasible via some python code, I've not seen a case where the config template is generated 'on-the-fly' and then applied in an action execution, and certainly haven't seen any maapi methods for that specifically.&lt;/P&gt;
&lt;P&gt;In your code below - 'i.name' will be the name the template ('i.name'.xml filename) expected to be found in your packages/&amp;lt;service&amp;gt;/template directory:&lt;/P&gt;
&lt;PRE&gt;template.apply(i.name, vars)&lt;/PRE&gt;
&lt;P&gt;Here's an example of applying a template in a transaction:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="https://community.cisco.com/t5/user/viewprofilepage/user-id/455588"&gt;@Action&lt;/a&gt;.action&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def cb_action(self, uinfo, name, kp, input, output):&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.log.info('action name: ', name)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # open read/write transaction&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;with ncs.maapi.single_write_trans('admin', 'UP') as t:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vars = ncs.template.Variables()&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vars.add('DEVICE', input.device)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vars.add('HNAME', input.hname)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vars.add('DNAME', input.dname)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# when calling a template it needs a context node, normally, for a service&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# this is the service node. Here we want context to point to devices tree...&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root = ncs.maagic.get_root(t)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context_node = root.ncs__devices&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# create a Template object, passing in the context node&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpl = ncs.template.Template(context_node)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# apply the template.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpl.apply('tempBar-template', vars)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# commit transaction including template config changes&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.apply()&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;$ cat tempBar-template.xml&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;lt;config-template xmlns="&lt;A href="http://tail-f.com/ns/config/1.0" target="_blank" rel="noopener"&gt;http://tail-f.com/ns/config/1.0&lt;/A&gt;"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp; &amp;lt;devices xmlns="&lt;A href="http://tail-f.com/ns/ncs" target="_blank" rel="noopener"&gt;http://tail-f.com/ns/ncs&lt;/A&gt;"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;device&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;{$DEVICE}&amp;lt;/name&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;config&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--&amp;nbsp; juniper stuff --&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;configuration xmlns="&lt;A href="http://xml.juniper.net/xnm/1.1/xnm" target="_blank" rel="noopener"&gt;http://xml.juniper.net/xnm/1.1/xnm&lt;/A&gt;"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;system&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;host-name&amp;gt;{$HNAME}&amp;lt;/host-name&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;domain-name&amp;gt;{$DNAME}&amp;lt;/domain-name&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/system&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/configuration&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--&amp;nbsp; juniper stuff --&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/config&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/device&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;nbsp; &amp;lt;/devices&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" size="2"&gt;&amp;lt;/config-template&amp;gt;&lt;/FONT&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 02 Aug 2019 18:36:11 GMT</pubDate>
      <guid>https://community.cisco.com/t5/nso-developer-hub-discussions/create-template-via-maapi/m-p/3902250#M4142</guid>
      <dc:creator>lmanor</dc:creator>
      <dc:date>2019-08-02T18:36:11Z</dc:date>
    </item>
  </channel>
</rss>

