<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-tt-netmod-yang-config-templates-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="template">YANG Configuration Templates</title>
    <seriesInfo name="Internet-Draft" value="draft-tt-netmod-yang-config-templates-03"/>
    <author fullname="Kent Watsen">
      <organization>Watsen Networks</organization>
      <address>
        <email>kent+ietf@watsen.net</email>
      </address>
    </author>
    <author fullname="Qiufang Ma">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>
          <city>Jiangsu</city>
          <code>210012</code>
          <country>China</country>
        </postal>
        <email>maqiufang1@huawei.com</email>
      </address>
    </author>
    <author fullname="Deepak Rajaram">
      <organization>Nokia</organization>
      <address>
        <postal>
          <country>India</country>
        </postal>
        <email>deepak.rajaram@nokia.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="03"/>
    <area>Operations and Management</area>
    <workgroup>Network Modeling</workgroup>
    <keyword>YANG</keyword>
    <keyword>template</keyword>
    <keyword>NMDA</keyword>
    <abstract>
      <?line 70?>

<t>NETCONF and RESTCONF protocols provide programmatic interfaces for
   accessing configuration data modeled by YANG.  This document defines
   the use of a YANG-based configuration template mechanism whereby
   configuration data can be defined in one or more templates and
   applied repeatedly.  This avoids the redundant definition of
   identical configuration and ensures the consistency of it, thus
   allowing configuration data to be managed more conveniently and efficiently.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Network Modeling Working Group mailing list (netmod@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/netmod/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/QiufangMa/template-mechanism"/>.</t>
    </note>
  </front>
  <middle>
    <?line 80?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document considers the case of a datastore that contains
   multiple subtrees with similar or identical nodes within them, such
   that the datastore contains repetitive data with limited variation.
   If a client has to repeatedly configure the same nodes for each
   subtree, this can become complex and error-prone.</t>
      <t>This document proposes a solution to improve this, called
   "Configuration Templates". A configuration template is a fragment of configuration that the
   server is instructed to replicate multiple times to generate copies
   of the configuration.  This allows repetitive subtrees of
   configuration to be written only once, in the template.  When needed,
   individual instantiations of a template can override the values of
   nodes, or add new instance-specific nodes.</t>
      <t>NMDA <xref target="RFC8342"/> allows the configuration templates to be defined in
   &lt;running&gt; and expanded in &lt;intended&gt;, but it does not specify details
   about how configuration templates could be created and applied.</t>
      <t>This document defines the use of configuration templates in the
   context of YANG-driven network management protocols such as NETCONF
   <xref target="RFC6241"/> and RESTCONF <xref target="RFC8040"/>.  Configuration templates can be
   used with any YANG data model, this document doesn't make any
   assumption on the YANG data model design, i.e., it does not rely on a
   shared profile/group being defined in the YANG data model.</t>
      <section anchor="editorial-note-to-be-removed-by-rfc-editor">
        <name>Editorial Note (To be removed by RFC Editor)</name>
        <t>Note to the RFC Editor: This section is to be removed prior to publication.</t>
        <t>This document contains placeholder values that need to be replaced with finalized
values at the time of publication.  This note summarizes all of the
substitutions that are needed.  No other RFC Editor instructions are specified
elsewhere in this document.</t>
        <t>Please apply the following replacements:</t>
        <ul spacing="normal">
          <li>
            <t>XXXX --&gt; the assigned RFC number for this draft</t>
          </li>
          <li>
            <t>2026-07-03 --&gt; the actual date of the publication of this document</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>The meanings of the symbols in tree diagrams are defined in
<xref target="RFC8340"/>.</t>
      <t>This document uses the terminology defined in <xref section="3" sectionFormat="of" target="RFC7950"/> and <xref section="3" sectionFormat="of" target="RFC8342"/>.</t>
      <t>This document uses the following terminology in <xref target="RFC6241"/>:</t>
      <ul spacing="normal">
        <li>
          <t>configuration data</t>
        </li>
      </ul>
      <t>Besides, this document defines the following terminology:</t>
      <dl>
        <dt>configuration template:</dt>
        <dd>
          <t>A chunk of reusable configuration data that
    could be applied to the configuration repeatedly, in order to
    simplify the delivery of network configuration and ensure the
    consistency of it.  A configuration template is referred to interchangeably as "template" or "YANG template" throughout this document.</t>
        </dd>
      </dl>
    </section>
    <section anchor="requirements">
      <name>Requirements</name>
      <t>This section describes requirements that the configuration
  templates solution must satisfy. A general theme
  of the configuration template work is to come up with a "Minimal
  Viable Product (MVP)" that delivers a baseline solution with essential functionality but avoids excessive complexity. More
  advanced features could be considered as extensions in future work.</t>
      <section anchor="defining-and-managing-templates">
        <name>Defining and Managing Templates</name>
        <t>Templates can be defined with any YANG module. They contain nodes of
  configuration data, and are stored in the running
  datastore of the server after creation.</t>
        <t>A client can view and manipulate a template in &lt;running&gt;. System may generate a template in &lt;system&gt; (<xref target="I-D.ietf-netmod-system-config"/>).
  In this sense, a template and its contents behave like
  any other configuration data.</t>
      </section>
      <section anchor="template-inherits">
        <name>Applying Templates</name>
        <t>A template can be applied to zero or more nodes in the running
  datastore.  Each node can have zero or more templates applied to it,
  and the order specified by the client determines the precedence with which templates are applied within that node.</t>
        <t>Templates can be applied at multiple nodes in the hierachy. When viewing the contents of &lt;running&gt;, there is a mechanism to see
  which templates have been applied to each node, and in which order.</t>
      </section>
      <section anchor="producing-the-intended-datastore">
        <name>Producing the Intended Datastore</name>
        <t>The server's intended datastore is the result of combining all the
applications of templates together with non-template configuration (i.e., configuration explicitly created by clients rather than derived from applied templates) in &lt;running&gt; and &lt;system&gt; (see <xref target="I-D.ietf-netmod-system-config"/>).  This is called template expansion.</t>
        <t>The intended configuration inside a subtree is the result of taking
the relevant contents of every template applied to the subtree's root
node and its ancestors, and combining it with the (non-template) data
nodes inside the subtree.</t>
        <t>A node inside a subtree may be present in multiple templates that
have been applied, and/or it may be present as non-template configuration
inside the subtree. The requirements for template expansion are as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The value of a node in &lt;intended&gt; is determined
by using precedence rule to decide where to take the value from.</t>
          </li>
          <li>
            <t>Non-template configuration always has the highest precedence.</t>
          </li>
          <li>
            <t>When templates are applied to multiple ancestors, the innermost
ancestor takes precedence.</t>
          </li>
          <li>
            <t>When multiple templates are applied to a particular node, the
order of application (as indicated by the client when applying the
templates) determines the precedence within that node.</t>
          </li>
        </ul>
        <t>Whenever the contents of a template is updated in &lt;running&gt; or &lt;system&gt;, the
result of template expansion appears in &lt;intended&gt;.</t>
      </section>
      <section anchor="pattern-matching-in-templates">
        <name>Pattern Matching in Templates</name>
        <t>The configuration inside a template definition can contain values for
list keys that are simple regular expressions, using a limited subset
of regular expression syntax.  This controls which list entries that
particular subtree of the template takes effect for when the template
is applied.</t>
        <t>An example of this would be to have a template that is applied to a
top-level "interfaces" container, but the template only takes effect
for certain interface names that match the regular expression.</t>
      </section>
      <section anchor="off-box-template-expansion">
        <name>Off-box Template Expansion</name>
        <t>If the client knows the complete contents of &lt;running&gt; and &lt;system&gt;, which include non-
template configuration, template definitions and template applications, the client must be able to calculate the result of template
expansion, i.e., the contents of &lt;intended&gt;.</t>
        <t>In other words, the outcome of template expansion depends solely on
the contents of running and system datastores.</t>
      </section>
    </section>
    <section anchor="configuration-template-solution">
      <name>Configuration Template Solution</name>
      <section anchor="define-templates">
        <name>Defining Templates</name>
        <t>A configuration template must first be defined before it can be applied (see <xref target="inheriting-temp"/>). The creation,
modification, and deletion of configuration templates are achieved by network
management operations via NETCONF or RESTCONF protocols. The contents of the configuration
template must be an instantiated chunk of data starting from any level node in the hierarchies of any YANG data model.</t>
        <t>For example, <xref target="base-template"/> provides an interface configuration template named "base-interface":</t>
        <figure anchor="base-template">
          <name>Example of An Interface Template</name>
          <artwork align="center"><![CDATA[
<templates xmlns="urn:ietf:params:xml:ns:yang:ietf-config-template">
 <template>
   <id>base-interface</id>
   <content>
     <interfaces xmlns="urn:example:interface">
       <interface>
         <enabled>true</enabled>
         <mtu>65536</mtu>
         <description>default provisioned interface</description>
       </interface>
     </interfaces>
   </content>
 </template>
</templates>
]]></artwork>
        </figure>
        <t>The YANG data model of configuration templates is defined in <xref target="template-yang"/>.</t>
        <section anchor="regex">
          <name>Template Definition with Pattern Matching</name>
          <t>To allow a single template to apply to multiple instances with similar naming conventions without explicit replication, a regular expression string may be used within key leafs to restrict which list entries a template takes effect for. It <bcp14>MUST NOT</bcp14> be used on any nodes other than a list key with built-in type "string", or types derived from "string".</t>
          <t>Any regular expression pattern <bcp14>MUST</bcp14> conform to <xref target="RFC9485"/>, which defines
a subset of XML Schema Definition (XSD) regular expressions <xref target="XSD-TYPES"/>.</t>
          <t>For example, <xref target="regex-example"/> provides an interface configuration template
 that sets "type" as ethernetCsmacd and "mtu" as 1500 for all interfaces
 names match the pattern "eth.*", i.e., starting with the prefix "eth":</t>
          <figure anchor="regex-example">
            <name>Example of An Interface Template with Pattern Matching</name>
            <artwork align="center"><![CDATA[
<templates xmlns="urn:ietf:params:xml:ns:yang:ietf-config-template">
  <template>
    <id>ethernet-interface</id>
    <content>
      <interfaces xmlns="urn:example:interface">
        <interface>
          <name>eth.*</name>
          <type>ethernetCsmacd</type>
          <mtu>1500</mtu>
          <description>default provisioned ethernet interface</description>
        </interface>
      </interfaces>
    </content>
  </template>
</templates>
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="inheriting-temp">
        <name>Applying Templates</name>
        <t>For each configuration node, including container, list, anydata, anyxml, leaf-list, and leaf, one or more
templates can be applied. This causes configuration from one or more
templates to be merged with explicitly provided configuration data
to produce a final set of configuration that is intended to be applied by the server.
Any update to the applied templates will be reflected in the merging result.</t>
        <section anchor="apply-templates">
          <name>The "apply-templates" Metadata</name>
          <t>Template application is indicated using the "apply-templates"
metadata annotation <xref target="RFC7952"/>.  The value of this is a list of space-separated template
identifiers. The order of appearance of the template identifiers in the list determines their precedence when producing the merging result. If the template is applied to a node in the data tree,
the metadata object is added to that specific node.</t>
          <t>The encoding of "apply-templates" metadata object follows the way defined
in <xref section="5" sectionFormat="of" target="RFC7952"/>.</t>
          <t>For example, <xref target="application-example"/> provides the interface configuration
with the container node "interfaces" applying the templates "ethernet-interface" and "base-interface", defined in
<xref target="regex-example"/> and <xref target="base-template"/> respectively:</t>
          <figure anchor="application-example">
            <name>An Example of Applying Templates</name>
            <artwork align="center"><![CDATA[
    <interfaces xmlns="urn:example:interface"
      xmlns:ct="urn:ietf:params:xml:ns:yang:ietf-config-template"
      ct:apply-templates="ethernet-interface base-interface">
      <interface>
        <name>loopback0</name>
      </interface>
      <interface>
        <name>eth0</name>
      </interface>
      <interface>
        <name>eth1</name>
      </interface>
    </interfaces>
]]></artwork>
          </figure>
          <t>And the above interface configuration renders the expanded configuration shown in <xref target="expansion-result-1"/>:</t>
          <figure anchor="expansion-result-1">
            <name>Template Expansion</name>
            <artwork align="center"><![CDATA[
    <interfaces xmlns="urn:example:interface">
      <interface>
        <name>loopback0</name>
        <enabled>true</enabled>
        <mtu>65536</mtu>
        <description>default provisioned interface</description>
      </interface>
      <interface>
        <name>eth0</name>
        <enabled>true</enabled>
        <type>ethernetCsmacd</type>
        <mtu>1500</mtu>
        <description>default provisioned ethernet interface</description>
      </interface>
      <interface>
        <name>eth1</name>
        <enabled>true</enabled>
        <type>ethernetCsmacd</type>
        <mtu>1500</mtu>
        <description>default provisioned ethernet interface</description>
      </interface>
    </interfaces>
]]></artwork>
          </figure>
        </section>
        <section anchor="creating-editing-and-deleting-the-apply-templates-metadata">
          <name>Creating, editing and deleting the "apply-templates" metadata</name>
          <t>The "apply-templates" metadata annotation may be modified by the client by
specifying a different value in subsequent operations. Any modification to this annotation <bcp14>MUST</bcp14> provide the complete, updated list of template identifiers on the target node, rather than merging with or appending to it. There are
three cases when modifying the "apply-templates" annotation:</t>
          <ul spacing="normal">
            <li>
              <t>The "apply-templates" annotation is specified and the value is non-
empty (i.e. a list of templates to apply to the node). The "apply-
templates" metadata is changed to match the exact value in the request.</t>
            </li>
            <li>
              <t>The "apply-templates" annotation is specified and the value is either empty or
contains only whitespace. The "apply-templates" metadata is removed and thus no
templates are applied to the node.</t>
            </li>
            <li>
              <t>The "apply-templates" annotation is not specified. The "apply-templates"
metadata currently present on the node (if any) is unchanged.</t>
            </li>
          </ul>
          <t>For example, <xref target="update-application-1"/> creates two interface entries named "loopback0" and "eth0" and applies template "base-interface" to the interfaces container:</t>
          <figure anchor="update-application-1">
            <name>An Initial Template Application Example</name>
            <artwork align="center"><![CDATA[
<interfaces xmlns="urn:example:interface"
  xmlns:ct="urn:ietf:params:xml:ns:yang:ietf-config-template"
  ct:apply-templates="base-interface">
  <interface>
    <name>loopback0</name>
  </interface>
  <interface>
    <name>eth0</name>
  </interface>
</interfaces>
]]></artwork>
          </figure>
          <t>A subsequent request in <xref target="update-application-2"/> also applies template "ethernet-interface" to the interfaces container:</t>
          <figure anchor="update-application-2">
            <name>Request to Prepend a Second Template</name>
            <artwork align="center"><![CDATA[
<interfaces xmlns="urn:example:interface"
            ct:apply-templates="ethernet-interface base-interface"/>
]]></artwork>
          </figure>
          <t>After this request, &lt;running&gt; is as shown in <xref target="update-application-3"/>:</t>
          <figure anchor="update-application-3">
            <name>Running Contents After Multiple Template Application</name>
            <artwork align="center"><![CDATA[
<interfaces xmlns="urn:example:interface"
  xmlns:ct="urn:ietf:params:xml:ns:yang:ietf-config-template"
  ct:apply-templates="ethernet-interface base-interface">
  <interface>
    <name>loopback0</name>
  </interface>
  <interface>
    <name>eth0</name>
  </interface>
</interfaces>
]]></artwork>
          </figure>
          <t><xref target="update-application-4"/> adds a new interface list entry, and leaves the applied
templates unchanged:</t>
          <figure anchor="update-application-4">
            <name>Request to Add a New Interface Entry</name>
            <artwork align="center"><![CDATA[
<interfaces xmlns="urn:example:interface">
  <interface>
    <name>eth1</name>
  </interface>
</interfaces>
]]></artwork>
          </figure>
          <t>After this request, &lt;running&gt; is as shown in <xref target="update-application-5"/>.</t>
          <figure anchor="update-application-5">
            <name>Running Contents After Interface Addition</name>
            <artwork align="center"><![CDATA[
<interfaces xmlns="urn:example:interface"
  xmlns:ct="urn:ietf:params:xml:ns:yang:ietf-config-template"
  ct:apply-templates="ethernet-interface base-interface">
  <interface>
    <name>loopback0</name>
  </interface>
  <interface>
    <name>eth0</name>
  </interface>
  <interface>
    <name>eth1</name>
  </interface>
</interfaces>
]]></artwork>
          </figure>
          <t>Finally, this request deletes all the templates, and leaves the list
entries unchanged:</t>
          <figure anchor="update-application-6">
            <name>Request to Clear All Applied Templates</name>
            <artwork align="center"><![CDATA[
<interfaces xmlns="urn:example:interface"
  xmlns:ct="urn:ietf:params:xml:ns:yang:ietf-config-template"
  ct:apply-templates="">
  <interface>
    <name>loopback0</name>
  </interface>
  <interface>
    <name>eth0</name>
  </interface>
  <interface>
    <name>eth1</name>
  </interface>
</interfaces>
]]></artwork>
          </figure>
          <t>After this request, &lt;running&gt; is as follows:</t>
          <figure anchor="update-application-7">
            <name>Running Contents After Removing Template Applications</name>
            <artwork align="center"><![CDATA[
<interfaces xmlns="urn:example:interface">
  <interface>
    <name>loopback0</name>
  </interface>
  <interface>
    <name>eth0</name>
  </interface>
  <interface>
    <name>eth1</name>
  </interface>
</interfaces>
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="overriding-temp">
        <name>Overriding Templates</name>
        <t>The client may want to to override some configuration in a template
 when it is applied to a particular node in read-write datastores (e.g., &lt;running&gt; or &lt;candidate&gt;).  The client can
 achieve this by providing the desired value at the corresponding
 level when applying the template.  Configuration explicitly provided
 by the client always takes precedence over the same node defined in
 template.</t>
        <t>A template node can be overriden by having its value changed, but it
 can't be deleted.</t>
        <t><xref target="override-template"/> provides an example of overriding a node in a template, a client may
 configure physically present interfaces "eth0" and "eth1" inheriting
 the template defined in <xref target="base-template"/>, but the "mtu" value of "eth1" needs
 to be 9122:</t>
        <figure anchor="override-template">
          <name>Example of Explicit Configuration Overriding a Template</name>
          <artwork align="center"><![CDATA[
<interfaces xmlns="urn:example:interface"
  xmlns:ct="urn:ietf:params:xml:ns:yang:ietf-config-template"
  ct:apply-templates="base-interface">
  <interface>
    <name>eth0</name>
  </interface>
  <interface>
    <name>eth1</name>
    <mtu>9122</mtu>
  </interface>
</interfaces>
]]></artwork>
        </figure>
        <t>And the above interface configuration renders the expanded
 configuration shown in <xref target="override-template-expansion"/>.</t>
        <figure anchor="override-template-expansion">
          <name>Expanded Configuration Result with Overridden MTU</name>
          <artwork align="center"><![CDATA[
    <interfaces xmlns="urn:example:interface">
      <interface>
        <name>eth0</name>
        <enabled>true</enabled>
        <mtu>65536</mtu>
        <description>default provisioned interface</description>
      </interface>
      <interface>
        <name>eth1</name>
        <enabled>true</enabled>
        <mtu>9122</mtu>
        <description>default provisioned interface</description>
      </interface>
    </interfaces>
]]></artwork>
        </figure>
      </section>
      <section anchor="expand-templates">
        <name>Expanding Templates</name>
        <t>When a configuration template is applied to a node in the data tree,
it acts as if the configuration defined in the template is merged
with the configuration provided explicitly at the corresponding level
in the data tree, with the explicitly provided configuration taking
precedence.</t>
        <t>the process of expanding templates to derive &lt;intended&gt; is deterministic and depends solely on the contents of &lt;running&gt;.
The process rules are as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The value of a node in &lt;intended&gt; after template expansion is determined
by using precedence to decide where to take the value from.</t>
          </li>
          <li>
            <t>Non-template configuration always has the highest precedence.</t>
          </li>
          <li>
            <t>When templates are applied to multiple ancestors, the innermost
ancestor takes precedence.</t>
          </li>
          <li>
            <t>When multiple templates are applied to a particular node, the
order of application (as indicated by the client when applying the
templates) determines the precedence within that node.</t>
          </li>
        </ul>
        <t>If a client has knowledge of the complete contents of &lt;running&gt; and &lt;system&gt;,
it can calculate the exact result of template expansion, independent of the server's operational state.</t>
        <t>Whenever the contents of an applied template is updated in &lt;running&gt; or &lt;system&gt;, the
result of template expansion appears in &lt;intended&gt;.</t>
      </section>
      <section anchor="deletion-of-templates">
        <name>Deletion of Templates</name>
        <t>A configuration template can not be deleted if it is currently actively applied to any data node.
When a client attempts to delete a template definition from read-write datastores (e.g., &lt;running&gt; or &lt;candidate&gt;) that is in use, the server <bcp14>MUST</bcp14> reject the deletion request with the error-tag value "data-missing", indicating that the template is still in use.</t>
        <t>To successfully delete a template, a client <bcp14>MUST</bcp14> first update the target configuration nodes to remove the template identifier from their "apply-templates" metadata attribute (as described in <xref target="apply-templates"/>), and then subsequently delete the template definition itself.</t>
      </section>
      <section anchor="validity-of-templates">
        <name>Validity of Templates</name>
        <t>The contents of the template alone is not always sufficient to
enforce the constraints of the data model.  Some constraints may
depend on configuration outside of the templates to satisfy, e.g., a
list may contain a mandatory leaf node which is not defined in the
template but explicitly provided by the client.  However, servers
<bcp14>SHOULD</bcp14> parse the template and enforce the constraints if it is
possible during the processing of template creation, e.g., servers
may validate type constraints for the leaf, including those defined
in the type's "range", "length", and "pattern" properties. Implementations
may also consider using mechanism defined in <xref target="I-D.ietf-netmod-yang-anydata-validation"/> to validate anydata.</t>
        <t>That said, if a template is applied in the configuration data tree,
the results of the template configuration merging with configuration
explicitly provided by the client <bcp14>MUST</bcp14> always be valid, as defined in
<xref section="8.1" sectionFormat="of" target="RFC7950"/>.</t>
      </section>
    </section>
    <section anchor="interact-NMDA">
      <name>Interaction with NMDA datastores</name>
      <t>Some implementations may have predefined configuration templates for the convenience
of clients, which are present in &lt;system&gt; (if implemented, see <xref target="I-D.ietf-netmod-system-config"/>).
In addition, clients can always define their own templates in &lt;running&gt;.
However, configuration template data defined by "ietf-config-template" YANG data model
should not be visible in &lt;operational&gt; until being inherited by a node in the data tree.</t>
      <t>If a node in the data tree applies a configuration template, the configuration
template does not expand in &lt;running&gt;. A read of &lt;running&gt; returns what is
sent by the client with the "apply-templates" metadata attached to the specific node.
A configuration template which is inherited or overridden by the node instance <bcp14>MUST</bcp14> be expanded in &lt;intended&gt;.</t>
    </section>
    <section anchor="interact-non-NMDA">
      <name>Interaction with Non-NMDA datastores</name>
      <t>TBC</t>
    </section>
    <section anchor="template-yang">
      <name>The "ietf-config-template" YANG Module</name>
      <section anchor="data-model-overview">
        <name>Data Model Overview</name>
        <t>The following tree diagram <xref target="RFC8340"/> illustrates the "ietf-config-template" module:</t>
        <artwork><![CDATA[
module: ietf-config-template
  +--rw templates
     +--rw template* [id]
        +--rw id               string
        +--rw description?     string
        +--rw content?         <anydata>
        +--ro last-modified?   yang:timestamp
]]></artwork>
        <ul empty="true">
          <li>
            <t>Editor's Note: Should we use the RFC7952 metadata annotation for the 'apply-templates' metadata here?</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>Editor's Note: the current definition of template configuration
      uses anydata, but this may not be able to be validated at template
      definition time because anydata is opaque.</t>
          </li>
        </ul>
      </section>
      <section anchor="yang-module">
        <name>YANG Module</name>
        <sourcecode markers="true" name="ietf-config-template@2026-07-03.yang"><![CDATA[
module ietf-config-template {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-config-template";
  prefix ct;

  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types";
  }

  organization
    "IETF NETMOD (Network Modeling) Working Group";
  contact
    "WG Web:  https://datatracker.ietf.org/wg/netmod/
     WG List: NETMOD <mailto:netmod@ietf.org>
     
     Editor: Kent Watsen
             <mailto:kent+ietf@watsen.net>
     Editor: Qiufang Ma
             <mailto:maqiufang1@huawei.com>
     Editor: Deepak Rajaram
             <mailto:deepak.rajaram@nokia.com>";
             
  description
    "This module defines a template list with a RPC to expand
     the template.

     Copyright (c) 2026 IETF Trust and the persons identified
     as authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with
     or without modification, is permitted pursuant to, and
     subject to the license terms contained in, the Revised
     BSD License set forth in Section 4.c of the IETF Trust's
     Legal Provisions Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC
     itself for full legal notices.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
     'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
     'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document
     are to be interpreted as described in BCP 14 (RFC 2119)
     (RFC 8174) when, and only when, they appear in all
     capitals, as shown here.";

   revision 2026-07-03 {
     description
       "Initial revision.";
     reference
       "RFC XXXX: YANG Templates";
   }

   container templates {
     description
       "Specifies the template parameters.";
     list template {
       key id;
       description
         "The list of templates managed on this device.";
       leaf id {
         type string;
         description
           "The identifier of the template that uniquely identifies a
            template.";
       }
       leaf description {
         type string;
         description
           "A textual description of the template.";
       }
       anydata content {
         description
           "inline template content.";
       }
       leaf last-modified {
         type yang:timestamp;
         config false;
         description
           "Timestamp when the template is modified last time.";
       }
     }
   }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="operational-consideration">
      <name>Operational Considerations</name>
      <t>Implementations <bcp14>MAY</bcp14> restrict the applications of configuration templates to some specific nodes in the YANG data tree. Restrictions should be applied consistently across all client operations. Any attempts to apply a template to a restricted node will be rejected. Implementations are recommended to expose the list of configuration nodes that do not support template application, any mechanisms to achieve this are outside the scope of this document.</t>
      <t>Configuration templates are designed to remain unexpanded in &lt;running&gt;. This ensures storage efficiency and preserves the client's control over &lt;running&gt;, i.e., reads of &lt;running&gt; returns the client-submitted configuration with the "apply-templates" metadata attached to target nodes. Any configuration template that is applied in the data tree <bcp14>MUST</bcp14> be expanded in &lt;intended&gt;, which holds a merged result of template expansion and configuration explicitly provided by clients.</t>
      <t>Implementations <bcp14>MAY</bcp14> differ in whether the configuration templates themselves appear in &lt;intended&gt;, independent of whether the templates are applied. Implementations <bcp14>MAY</bcp14> also support conditional visibility, where templates appear in &lt;intended&gt; only when they are applied by at least one node via the "apply-templates" annotation. Regardless of the approach chosen, implementations <bcp14>MUST</bcp14> ensure the behavior is consistent and deterministic, and <bcp14>SHOULD</bcp14> be documented to allow clients to rely on predictable operational behaviors.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="the-ietf-xml-registry">
        <name>The "IETF XML" Registry</name>
        <t>This document registers the following URI in the "IETF XML Registry" <xref target="RFC3688"/>.</t>
        <artwork><![CDATA[
        URI: urn:ietf:params:xml:ns:yang:ietf-config-template
        Registrant Contact: The IESG.
        XML: N/A, the requested URI is an XML namespace.
]]></artwork>
      </section>
      <section anchor="the-yang-module-names-registry">
        <name>The "YANG Module Names" Registry</name>
        <t>This document registers the following YANG module in the "YANG Module Names"
   registry <xref target="RFC6020"/>.</t>
        <artwork><![CDATA[
        name:               ietf-config-template
        namespace:          urn:ietf:params:xml:ns:yang:ietf-config-template
        prefix:             ct
        maintained by IANA? N
        reference:          RFC XXXX
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="P. Shafer" initials="P." surname="Shafer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model. This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC9485">
          <front>
            <title>I-Regexp: An Interoperable Regular Expression Format</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="T. Bray" initials="T." surname="Bray"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document specifies I-Regexp, a flavor of regular expression that is limited in scope with the goal of interoperation across many different regular expression libraries.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9485"/>
          <seriesInfo name="DOI" value="10.17487/RFC9485"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="XSD-TYPES" target="http://www.w3.org/TR/2004/REC-xmlschema-2-20041028">
          <front>
            <title>XML Schema Part 2: Datatypes Second Edition</title>
            <author initials="P. V." surname="Biron" fullname="Paul V. Biron">
              <organization/>
            </author>
            <author initials="K." surname="Permanente" fullname="Kaiser Permanente">
              <organization/>
            </author>
            <author initials="A." surname="Malhotra" fullname="Ashok Malhotra">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="I-D.ietf-netmod-system-config">
          <front>
            <title>System-defined Configuration</title>
            <author fullname="Qiufang Ma" initials="Q." surname="Ma">
              <organization>Huawei</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Chong Feng" initials="C." surname="Feng">
         </author>
            <date day="28" month="January" year="2026"/>
            <abstract>
              <t>   The Network Management Datastore Architecture (NMDA) in RFC 8342
   defines several configuration datastores holding configuration.  The
   contents of these configuration datastores are controlled by clients.
   This document introduces the concept of system configuration
   datastore holding configuration controlled by the system on which a
   server is running.  The system configuration can be referenced (e.g.,
   leafref) by configuration explicitly created by clients.

   This document updates RFC 8342.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-system-config-20"/>
        </reference>
        <reference anchor="RFC7952">
          <front>
            <title>Defining and Using Metadata with YANG</title>
            <author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>This document defines a YANG extension that allows for defining metadata annotations in YANG modules. The document also specifies XML and JSON encoding of annotations and other rules for annotating instances of YANG data nodes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7952"/>
          <seriesInfo name="DOI" value="10.17487/RFC7952"/>
        </reference>
        <reference anchor="I-D.ietf-netmod-yang-anydata-validation">
          <front>
            <title>Validating anydata in YANG Library context</title>
            <author fullname="Ahmed Elhassany" initials="A." surname="Elhassany">
              <organization>Swisscom</organization>
            </author>
            <author fullname="Thomas Graf" initials="T." surname="Graf">
              <organization>Swisscom</organization>
            </author>
            <date day="2" month="December" year="2025"/>
            <abstract>
              <t>   This document describes a method to use YANG RFC 8525 and standard
   YANG validation rules in RFC 7950 to validate YANG data nodes that
   are children of an "anydata" data node.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-yang-anydata-validation-00"/>
        </reference>
      </references>
    </references>
    <?line 774?>

<section anchor="requirement-implementation-status">
      <name>Requirement Implementation Status</name>
      <t>Note to the RFC Editor: Please remove this section before publication.</t>
      <t>This appendix aims to track which of identified requirements have been addressed in the current version, and, where applicable, how they are fulfilled by the proposed mechanism.</t>
      <t>These requirements are sourced from https://github.com/netmod-wg/template-reqs/issues, specifically those that 1) have already been discussed during interims and shown consensus, 2) present split opinions and thus require further discussion, or 3) are new technical requirements added by folks after interim discussion.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Requirement</th>
            <th align="left">Fulfilled</th>
            <th align="left">Requirement Description</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">R1: Allowed Multiple templates to be applied at a single node</td>
            <td align="left">Y</td>
            <td align="left">see <xref target="inheriting-temp"/></td>
          </tr>
          <tr>
            <td align="left">R2: Templates must work with any YANG module</td>
            <td align="left">Y</td>
            <td align="left">see <xref target="define-templates"/></td>
          </tr>
          <tr>
            <td align="left">R3: Templates must be validated when defined</td>
            <td align="left">N</td>
            <td align="left">Per discussion at IETF 125, the consensus seems to be to make a best effort to validate the template at definition time, and that the current text is sufficient</td>
          </tr>
          <tr>
            <td align="left">R4: Local-config overrides template-config</td>
            <td align="left">Y</td>
            <td align="left">see <xref target="overriding-temp"/></td>
          </tr>
          <tr>
            <td align="left">R5: Living template: modified template data gets expanded for all consumers</td>
            <td align="left">Y</td>
            <td align="left">see <xref target="expand-templates"/></td>
          </tr>
          <tr>
            <td align="left">R6: Support basic programmatic elements (loops, conditions) in templates</td>
            <td align="left">N</td>
            <td align="left">Seems to add some complexity</td>
          </tr>
          <tr>
            <td align="left">R7: Allow a server to constrain which nodes can be templates consumer</td>
            <td align="left">Y</td>
            <td align="left">See <xref target="operational-consideration"/></td>
          </tr>
          <tr>
            <td align="left">R8: Configuration with both expanded and unexpanded templates is able to be returned</td>
            <td align="left">Y</td>
            <td align="left">see <xref target="interact-NMDA"/> and <xref target="operational-consideration"/></td>
          </tr>
          <tr>
            <td align="left">R9: &lt;running&gt; contains the unexpanded template</td>
            <td align="left">Y</td>
            <td align="left">see <xref target="interact-NMDA"/>, also stated explicitly in <xref target="operational-consideration"/></td>
          </tr>
          <tr>
            <td align="left">R10: &lt;intended&gt; contains the expanded template</td>
            <td align="left">Y</td>
            <td align="left">see <xref target="interact-NMDA"/>, also stated explicitly in <xref target="operational-consideration"/></td>
          </tr>
          <tr>
            <td align="left">R11: Enables off-box template expansion of &lt;running&gt;</td>
            <td align="left">Y</td>
            <td align="left">see <xref target="expand-templates"/></td>
          </tr>
          <tr>
            <td align="left">R12: Support limited regex in templates</td>
            <td align="left">Y</td>
            <td align="left">see <xref target="regex"/></td>
          </tr>
          <tr>
            <td align="left">R13: Have a precedence rule when multiple templates are applied at a single node</td>
            <td align="left">Y</td>
            <td align="left">See <xref target="expand-templates"/></td>
          </tr>
          <tr>
            <td align="left">R14: The innermost template takes precedence when templates are applied at multiple ancestor nodes</td>
            <td align="left">Y</td>
            <td align="left">See <xref target="expand-templates"/></td>
          </tr>
          <tr>
            <td align="left">R15: Enable non-NMDA servers to return the expanded data</td>
            <td align="left">N</td>
            <td align="left">have a dedicated section (<xref target="interact-non-NMDA"/>) for this, but empty now</td>
          </tr>
          <tr>
            <td align="left">Not discussed: R16: exclude templates applied at ancestor nodes</td>
            <td align="left">N</td>
            <td align="left">Seems to add some complexity, needs further discussion</td>
          </tr>
          <tr>
            <td align="left">Not discussed: R17: Annotations to determine which template a node was applied from</td>
            <td align="left">N</td>
            <td align="left">Needs further discussion</td>
          </tr>
        </tbody>
      </table>
      <!--
# Usage Examples {#appendix-network}

This section provides some examples to show the use of templates.
JSON encodings are used to not imply a preference in this document.
The fictional data model used throughout this section is shown as follows:

~~~~
module example-network-systime {
  yang-version 1.1;
  namespace "urn:example:network-system-time";
  prefix "ex-nesyst";

  import ietf-inet-types {
    prefix "inet";
  }
  
  list network-device {
    key device-id;
    leaf device-id {
      type string;
    }
    container ntp {
      leaf enabled {
        type boolean;
        mandatory true;
      }
      list server {
        ordered-by user;
        key name;
        leaf name {
          type string;
        }
        leaf-list alias {
          type string;
        }
        leaf address {
          type inet:host;
          mandatory true;
        }
        leaf port {
          type inet:port-number;
          default 123;
        }
      }
    }
  }
}
~~~~

## Creating Templates {#template-creation}

The NTP configuration on multiple network devices may be consistent. To create a
template for NTP configuration, the following template configuration might be sent to a SDN controller:

~~~~
{
    "ietf-templates:templates": {
        "template": [
            {
                "id": "template-ntp",
                "content": {
                    "network-device": [
                        {
                            "ntp": {
                                "enabled": "true",
                                "server": [
                                    {
                                        "name": "ntp-server-1",
                                        "alias": [
                                            "primary"
                                        ],
                                        "address": "ntp.example-1.com"
                                    },
                                    {
                                        "name": "ntp-server-2",
                                        "alias": [
                                            "secondary"
                                        ],
                                        "address": "ntp.example-2.com"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        ]
    }
}
~~~~

## Applying Templates

The operator may create another template with an additional NTP server instance
when inheriting the template created in {{template-creation}}. The configuration
is shown as follows:

~~~~
{
    "ietf-templates:templates": {
        "template": [
            {
                "id": "template-ntp2",
                "content": {
                    "network-device": [
                        {
                            "@": {
                                "ietf-template:stmt-extend": "template-ntp"
                            },
                            "ntp": {
                                "server": [
                                    {
                                        "name": "ntp-server-3",
                                        "alias": [
                                            "secondary"
                                        ],
                                        "address": "ntp.example-3.com"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        ]
    }
}
~~~~

The configuration of template "template-ntp2" renders the following expanded configuration:

~~~~
{
    "ietf-templates:templates": {
        "template": [
            {
                "id": "template-ntp2",
                "content": {
                    "network-device": [
                        {
                            "ntp": {
                                "enabled": "true",
                                "server": [
                                    {
                                        "name": "ntp-server-1",
                                        "alias": [
                                            "primary"
                                        ],
                                        "address": "ntp.example-1.com",
                                        "prefer": true
                                    },
                                    {
                                        "name": "ntp-server-2",
                                        "alias": [
                                            "secondary"
                                        ],
                                        "address": "ntp.example-2.com"
                                    },
                                    {
                                        "name": "ntp-server-3",
                                        "alias": [
                                            "secondary"
                                        ],
                                        "address": "ntp.example-3.com"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        ]
    }
}
~~~~

the following shows the network-level ntp configuration
using "template-ntp" and "template-ntp2" that may be sent to a SDN controller:

~~~~
{
    "example-network-systime:network-device": [
        {
            "@": {
                "ietf-template:stmt-extend": "template-ntp"
            },
            "device-id": "ne-0"
        },
        {
            "@": {
                "ietf-template:stmt-extend": "template-ntp"
            },
            "device-id": "ne-1"
        },
        {
            "@": {
                "ietf-template:stmt-extend": "template-ntp2"
            },
            "device-id": "ne-2"
        },
        {
            "@": {
                "ietf-template:stmt-extend": "template-ntp2"
            },
            "device-id": "ne-3"
        }
    ]
}
~~~~

And it renders the following expanded configuration:

~~~~
{
    "example-network-systime:network-device": [
        {
            "device-id": "ne-0",
            "ntp": {
                "enabled": "true",
                "server": [
                    {
                        "name": "ntp-server-1",
                        "alias": [
                            "primary"
                        ],
                        "address": "ntp.example-1.com"
                    },
                    {
                        "name": "ntp-server-2",
                        "alias": [
                            "secondary"
                        ],
                        "address": "ntp.example-2.com"
                    }
                ]
            }
        },
        {
            "device-id": "ne-1",
            "ntp": {
                "enabled": "true",
                "server": [
                    {
                        "name": "ntp-server-1",
                        "alias": [
                            "primary"
                        ],
                        "address": "ntp.example-1.com"
                    },
                    {
                        "name": "ntp-server-2",
                        "alias": [
                            "secondary"
                        ],
                        "address": "ntp.example-2.com"
                    }
                ]
            }
        },
        {
            "device-id": "ne-2",
            "ntp": {
                "enabled": "true",
                "server": [
                    {
                        "name": "ntp-server-1",
                        "alias": [
                            "primary"
                        ],
                        "address": "ntp.example-1.com"
                    },
                    {
                        "name": "ntp-server-2",
                        "alias": [
                            "secondary"
                        ],
                        "address": "ntp.example-2.com"
                    },
                    {
                        "name": "ntp-server-3",
                        "alias": [
                            "secondary"
                        ],
                        "address": "ntp.example-3.com"
                    }
                ]
            }
        },
        {
            "device-id": "ne-3",
            "ntp": {
                "enabled": "true",
                "server": [
                    {
                        "name": "ntp-server-1",
                        "alias": [
                            "primary"
                        ],
                        "address": "ntp.example-1.com"
                    },
                    {
                        "name": "ntp-server-2",
                        "alias": [
                            "secondary"
                        ],
                        "address": "ntp.example-2.com"
                    },
                    {
                        "name": "ntp-server-3",
                        "alias": [
                            "secondary"
                        ],
                        "address": "ntp.example-3.com"
                    }
                ]
            }
        }
    ]
}
~~~~

## Overriding Templates

The client may override the template created in {{template-creation}} to specify
the NTP server named "ntp-server-2" as the perferred one for device "ne-4":

~~~~
{
    "example-network-systime:network-device": [
        {
            "@": {
                "ietf-template:stmt-extend": "template-ntp"
            },
            "device-id": "ne-4",
            "server": [
                {
                    "name": "ntp-server-1",
                    "alias": [
                        "primary",
                        "secondary"
                    ],
                    "@alias": [
                        {
                            "ietf-template:operation-tag": "delete"
                        }
                    ],
                    "address": "ntp.example-1.com"
                },
                {
                    "@": {
                        "ietf-template:operation-tag": "position-first"
                    },
                    "name": "ntp-server-2",
                    "alias": [
                        "primary",
                        "secondary"
                    ],
                    "@alias": [
                        null,
                        {
                            "ietf-template:operation-tag": "delete"
                        }
                    ],
                    "address": "ntp.example-2.com"
                }
            ]
        }
    ]
}
~~~~

It is equivalent to the configuration as follows:

~~~~
{
    "example-network-systime:network-device": [
        {
            "device-id": "ne-4",
            "ntp": {
                "enabled": "true",
                "server": [
                    {
                        "name": "ntp-server-2",
                        "alias": [
                            "primary"
                        ],
                        "address": "ntp.example-2.com"
                    },
                    {
                        "name": "ntp-server-1",
                        "alias": [
                            "secondary"
                        ],
                        "address": "ntp.example-1.com"
                    }
                ]
            }
        }
    ]
}
~~~~
-->

</section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author would like to thank Lou Berger, Jason Sterne, Kent Watsen, and Robert
Wilton for comments and contributions made during interim meetings.</t>
      <t>The author would like to acknowledge the following drafts and
presenters for kick-starting discussions on Yang Templates:</t>
      <ul spacing="normal">
        <li>
          <t>draft-ma-netmod-yang-config-template-00</t>
        </li>
        <li>
          <t>draft-rajaram-netmod-yang-cfg-template-framework-00</t>
        </li>
        <li>
          <t>draft-wills-netmod-yang-templates-00</t>
        </li>
        <li>
          <t>Jan Lindblad</t>
        </li>
      </ul>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact fullname="Robert Wills">
        <organization>Cisco</organization>
        <address>
          <postal>
            <country>United Kingdom</country>
          </postal>
          <email>rowills@cisco.com</email>
        </address>
      </contact>
      <contact fullname="Qin Wu">
        <organization>Huawei</organization>
        <address>
          <postal>
            <street>101 Software Avenue, Yuhua District</street>
            <city>Jiangsu</city>
            <code>210012</code>
            <country>China</country>
          </postal>
          <email>bill.wu@huawei.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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
L2GinkbJdByH0+B/Ab2uIWoQrQAA

-->

</rfc>
