<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ma-netmod-yang-config-template-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="template">YANG Templates</title>
    <seriesInfo name="Internet-Draft" value="draft-ma-netmod-yang-config-template-00"/>
    <author fullname="Qiufang Ma">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>
          <city>Nanjing, Jiangsu</city>
          <code>210012</code>
          <country>China</country>
        </postal>
        <email>maqiufang1@huawei.com</email>
      </address>
    </author>
    <author 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>
    </author>
    <date year="2024" month="October" day="21"/>
    <area>Operations and Management</area>
    <workgroup>Network Modeling</workgroup>
    <keyword>YANG</keyword>
    <keyword>template</keyword>
    <keyword>NMDA</keyword>
    <abstract>
      <?line 42?>

<t>NETCONF and RESTCONF protocols provide programmatic operation interfaces for accessing
configuration data modeled by YANG. This document defines the use of YANG-based
configuration template mechanism so that the configuration data could be defined as template
and applied repeatedly to avoid the redundant definition of identical Configuration
and ensure consistency of it.</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 50?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>It is not unusual for the YANG data model <xref target="RFC7950"/> to define some shared profiles that could
be referenced in order to simplify the configuration of network services or functionalities.
For example, <xref target="I-D.ietf-opsawg-ntw-attachment-circuit"/> defines a set of profiles
at the network level which could be referred to under the node level to factorize
some common configuration shared by a group of attachment circuits (ACs).</t>
      <t>However, it is not trivial to always take care of the definition of shared profiles/policies/templates during the design of every data model.
There is a desire to make use of common YANG-based templates without relying on
specific definition in YANG data models.</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"/>.
By defining a common set of nodes as a configuration template and applying the
configuration template repeatedly, it avoids the redundant definition of identical
configuration and also ensures consistency of it. Configuration template could
be used based on any existing YANG data models, this document doesn't make any
assumption on the YANG data model design, i.e., it does not rely on the shared profile/group
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>2024-08-27 --&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 YANG terminology defined in <xref section="3" sectionFormat="of" target="RFC7950"/>.</t>
      <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 can also be called
"hierarchical template", or "template" for short.</t>
        </dd>
        <dt>inherited template:</dt>
        <dd>
          <t>A configuration template that is applied in the configuration data tree or
reused by other templates.</t>
        </dd>
        <dt>parent template:</dt>
        <dd>
          <t>A configuration template that is an inherited template.</t>
        </dd>
      </dl>
    </section>
    <section anchor="hierarchical-template-overview">
      <name>Hierarchical Template Overview</name>
      <t>A configuration template must first be defined before it can be inherited <xref target="inheriting-temp"/>. The creation,
modification, and deletion of configuration templates are achieved by network
management operations via NETCONF or RESTCONF protocols. The content of the configuration
template must be an instantiated chunk of data starting from any level node in the module hierarchies.</t>
      <t>For example, <xref target="temp-ex-interface"/> provides an interface configuration template
that sets "mtu" as 1500 for ethernet interfaces:</t>
      <figure anchor="temp-ex-interface">
        <name>Example of An Interface template</name>
        <artwork><![CDATA[
<templates>
  <template>
    <id>interface-type-mtu</id>
    <interface>
      <type>ianaift:ethernetCsmacd</type>
      <mtu>1500</mtu>
      <description>MTU value is set by template</description>
    </interface>
  </template>
</templates>
]]></artwork>
      </figure>
      <t>The YANG data model of configuration templates is defined in <xref target="template-yang"/>.</t>
      <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
should 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.</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="inheriting-temp">
      <name>Inheriting Templates</name>
      <t>This document allows configuration templates to be inherited by
configuration nodes in the data tree or new templates at corresponding level. A node inherits at most
one configuration template.</t>
      <t>If a configuration template is inherited by a node in the data tree, it acts as
if the configuration defined in the template is contained and is
merged with the configuration provided explicitly at the corresponding level in the data tree
with the explicitly provided configuration takes precedence.</t>
      <t>If a configuration template is inherited by another new template,
the configuration of the new template is the merging result of configuration defined
in both templates with the new template takes precedence over its parent template.
This is useful when some additional configuration is intended to be defined on the
basis of the parent template.</t>
      <t>Any modification to the parent template also applies where the template is inherited.</t>
      <section anchor="the-stmt-extend-metadata">
        <name>The "stmt-extend" Metadata</name>
        <t>Template inheritance is indicated by declaring the metadata object called "stmt-extend".</t>
        <t>If the template is inherited by a node in the data tree, the metadata object is added
to that specific node.</t>
        <t>If the template is inherited by other templates, the metadata object is added to
the node at corresponding level of the template contents.</t>
        <t>The "stmt-extend" metadata <bcp14>MUST</bcp14> have only one value to specify the parent template
identifier that is inherited. The encoding of "stmt-extend" metadata object follows the way defined
in <xref section="5" sectionFormat="of" target="RFC7952"/>.</t>
        <t>For example, a client may configure physically present interfaces "eth0" and "eth1"
with the list node "interface" inheriting the template defined in <xref target="temp-ex-interface"/>:</t>
        <artwork><![CDATA[
<interfaces xmlns:template="urn:ietf:params:xml:ns:yang:ietf-template">
  <interface template:stmt-extend="interface-type-mtu">
    <name>eth0</name>
  </interface>
  <interface template:stmt-extend="interface-type-mtu">
    <name>eth1</name>
  </interface>
</interfaces>
]]></artwork>
        <t>And the above interface configuration renders the following expanded configuration:</t>
        <artwork><![CDATA[
<interfaces>
  <interface>
    <name>eth0</name>
    <type>ianaift:ethernetCsmacd</type>
    <mtu>1500</mtu>
    <description>MTU value is set by template</description>
  </interface>
  <interface>
    <name>eth1</name>
    <type>ianaift:ethernetCsmacd</type>
    <mtu>1500</mtu>
    <description>MTU value is set by template</description>
  </interface>
</interfaces>
]]></artwork>
      </section>
      <section anchor="template-extension">
        <name>Template Extension</name>
        <t>If there is some further configuration data that needs to be created but not included
in the parent template, it can be provided at the corresponding level when
inheriting the configuration template. For example, the client may want to define
another template and provide an additional "enabled" leaf value
on the basis of template defined in <xref target="temp-ex-interface"/>:</t>
        <artwork><![CDATA[
<templates>
  <template>
    <id>interface-type-mtu-enabled</id>
    <interface xmlns:template="urn:ietf:params:xml:ns:yang:ietf-template"
               template:stmt-extend="interface-type-mtu">
      <enabled>true</enabled>
    </interface>
  </template>
</templates>
]]></artwork>
        <t>And the above interface configuration defined in the template
"interface-type-mtu-enabled" renders the following expanded configuration:</t>
        <artwork><![CDATA[
<interface>
  <type>ianaift:ethernetCsmacd</type>
  <mtu>1500</mtu>
  <description>MTU value is set by template</description>
  <enabled>true</enabled>
</interface>
]]></artwork>
        <t><xref target="template-inherits"/> provides more examples of inheriting an existing template by indicating
the "stmt-extend" metadata object.</t>
      </section>
    </section>
    <section anchor="overriding-temp">
      <name>Overriding Templates</name>
      <t>It may be desired to override some configuration in an existing template when it is interited.
This may be achieved by directly editing the configuration template that is inherited,
however, the parent template may have also been inherited by other instance nodes or
templates, and direct modification of the parent template may yield unexpected results.</t>
      <t>This document allows a configuration template to be overridden by other templates
or configuration explicitly provided by the client.</t>
      <section anchor="modification">
        <name>Modification</name>
        <t>If there is some configuration values that need to be modified, the desired value
can be provided at the corresponding level when inheriting the configuation template.</t>
        <t>For example, a client may configure physically present interfaces "eth0" and "eth1"
inheriting the template defined in <xref target="temp-ex-interface"/>, but the "mtu" value of "eth1"
needs to be 9122, and the "description" value also needs to be modified accordingly:</t>
        <artwork><![CDATA[
<interfaces xmlns:template="urn:ietf:params:xml:ns:yang:ietf-template">
  <interface template:stmt-extend="interface-type-mtu">
    <name>eth0</name>
  </interface>
  <interface template:stmt-extend="interface-type-mtu">
    <name>eth1</name>
    <mtu>9122</mtu>
    <description>MTU value is set explicitly</description>
  </interface>
</interfaces>
]]></artwork>
      </section>
      <section anchor="deletion">
        <name>Deletion</name>
        <t>The deletion of configuration data is flagged by declaring the metadata object
called "operation-tag" with a value "delete". If some node instance defined in the configuration template
is intended to be deleted in the configuration explicitly by the client or by new
templates, the "operation-tag" metadata annotation is added to that specific node. Servers <bcp14>MUST</bcp14> ignore this
metadata if the configuration identified currently does not exist in the configuration
template.</t>
        <t>The "operation-tag" metadata <bcp14>MUST</bcp14> have only one value to specify the intended operation.
The encoding of "operation-tag" metadata object follows the way defined in <xref section="5" sectionFormat="of" target="RFC7952"/>.</t>
        <t>For example, a client may want to delete the "description" node instance defined
in <xref target="temp-ex-interface"/> for interface "eth1", and the following shows the example
configuration:</t>
        <artwork><![CDATA[
<interfaces xmlns:template="urn:ietf:params:xml:ns:yang:ietf-template">
  <interface template:stmt-extend="interface-type-mtu">
    <name>eth0</name>
  </interface>
  <interface template:stmt-extend="interface-type-mtu">
    <name>eth1</name>
    <mtu>9122</mtu>
    <description template:operation-tag="delete">MTU value is set by template</description>
  </interface>
</interfaces>
]]></artwork>
        <t>And it renders the following expanded configuration:</t>
        <artwork><![CDATA[
<interfaces>
  <interface>
    <name>eth0</name>
    <type>ianaift:ethernetCsmacd</type>
    <mtu>1500</mtu>
    <description>MTU value is set by template</description>
  </interface>
  <interface>
    <name>eth1</name>
    <type>ianaift:ethernetCsmacd</type>
    <mtu>9122</mtu>
  </interface>
</interfaces>
]]></artwork>
      </section>
      <section anchor="listleaf-list-reordering">
        <name>List/leaf-list Reordering</name>
        <t>There may be a desire to reorder some existing list/leaf-list entries defined in an
existing template, or specify the ordering of new instances when they are created.
It only applies to lists and leaf-lists indicated with the "ordered-by user"
statement.</t>
        <t>The reordering of list/leaf-list entry data is flagged by declaring the metadata
object called "operation-tag" with different values. The "operation-tag" used
for reordering has one of the following values:</t>
        <ul spacing="normal">
          <li>
            <dl>
              <dt>position-first:</dt>
              <dd>
                <t>The attached entry is positioned as the first entry in the list/leaf-list.
There must be no more than one entry that is annotated as "position-first" within the same operation request.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>position-last:</dt>
              <dd>
                <t>The attached entry is positioned as the last entry in the list/leaf-list.
There must be no more than one entry that is annotated as "position-last" within the same operation request.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>position-before:</dt>
              <dd>
                <t>The attached entry is positioned before some other specified
entries in the list/leaf-list. This value <bcp14>MUST</bcp14> be followed by one or more
space-seperated key values to indicate the entries that the attached entry is
just positioned before. The "position-before" metadata and key values are
seperated by colon ":". There must not be any other entries that use
"position-before" to target the entry attached as "position-first" within the
same operation rquest.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>position-after:</dt>
              <dd>
                <t>The attached entry is positioned after some other specified
entries in the list/leaf-list. This value <bcp14>MUST</bcp14> be followed by one or more
space-seperated key values to indicate the entries that the attached entry is
just positioned after. The "position-after" metadata and key values are
seperated by colon ":". There must not be any other entries that use
"position-after" to target the entry attached as "position-last" within the
same operation request.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <t>For example, the following template provides the user-ordered ACL configuration:</t>
        <artwork><![CDATA[
<templates>
  <template>
    <id>ACL-rules-template</id>
    <acls>
      <acl>
        <name>allow-access-from-tcp</name>
        <matches>
          <protocol>tcp</protocol>
        </matches>
        <action>permit</action>
      </acl>
      <acl>
        <name>allow-access-from-udp</name>
        <matches>
          <protocol>udp</protocol>
        </matches>
        <action>permit</action>
      </acl>
    </acls>
  </template>
</templates>
]]></artwork>
        <t>If the client wants to create another template with an additional ACL entry named "deny-traffic-from-ftp"
ordered as the first entry and ACL entry named "allow-access-from-tcp" as the last one:</t>
        <artwork><![CDATA[
<templates>
  <template>
    <id>ACL-rules-template2</id>
    <acls xmlns:template="urn:ietf:params:xml:ns:yang:ietf-template"
      template:stmt-extend="acl-rule-template">
      <acl template:operation-tag="position-first">
        <name>deny-traffic-from-ftp</name>
        <matches>
          <protocol>ftp</protocol>
        </matches>
      </acl>
      <acl template:operation-tag="position-last">
        <name>allow-access-from-tcp</name>
      </acl>
    </acls>
  </template>
</templates>
]]></artwork>
        <t>The client may also deliver the configuration defined in template
"acl-rule-template" with some other additional ACL entries that is properly ordered:</t>
        <artwork><![CDATA[
<acls xmlns:template="urn:ietf:params:xml:ns:yang:ietf-template"
  template:stmt-extend="acl-rule-template">
  <acl template:operation-tag="position-before:\
    'allow-access-from-tcp allow-access-from-udp'">
    <name>deny-access-to-ipv4</name>
    <matches>
      <destination-ipv4-network>192.0.2.0/24</destination-ipv4-network>
    </matches>
  </acl>
  <acl template:operation-tag="position-after:'deny-access-to-ipv4'">
    <name>deny-access-to-ipv6</name>
    <matches>
      <destination-ipv6-network>2001:db8::/32</destination-ipv6-network>
    </matches>
  </acl>
</acls>
]]></artwork>
        <t>The applied ACL configuration renders the following expanded configuration:</t>
        <artwork><![CDATA[
<acls>
  <acl>
    <name>deny-access-to-ipv4</name>
    <matches>
      <destination-ipv4-network>192.0.2.0/24</destination-ipv4-network>
    </matches>
  </acl>
  <acl>
    <name>deny-access-to-ipv6</name>
    <matches>
      <destination-ipv6-network>2001:db8::/32</destination-ipv6-network>
    </matches>
  </acl>
  <acl>
    <name>allow-access-from-tcp</name>
    <matches>
      <protocol>tcp</protocol>
    </matches>
    <action>permit</action>
  </acl>
  <acl>
    <name>allow-access-from-udp</name>
    <matches>
      <protocol>udp</protocol>
    </matches>
    <action>permit</action>
  </acl>
</acls>
]]></artwork>
      </section>
    </section>
    <section anchor="interaction-with-nmda-datastores">
      <name>Interaction with NMDA datastores</name>
      <t>Some implementation 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-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 inherits a configuration template, the configuration
template does not expand in &lt;running&gt;, a read back of &lt;running&gt; returns what is
sent by the client with the "stmt-extend" metadata attached to the specific node.
Configuration template which is inherited or overridden by the node instance <bcp14>MUST</bcp14> be expanded in &lt;intended&gt;.</t>
      <ul empty="true">
        <li>
          <t>Editor's Note: The read-back of &lt;running&gt; might break legacy clients that don't
understand template?</t>
        </li>
      </ul>
    </section>
    <section anchor="different-levels-of-templates">
      <name>Different Levels of Templates</name>
      <t>The configuration templates may be defined at different levels, depending on where it is used and maintained.
For exmaple, A network-level template maintained by the software-defined networking
(SDN) <xref target="RFC7149"/> <xref target="RFC7426"/> controller defines configuration that may be shared
by multiple network elements. While device-level template maintained by the network
element defines configuration that can only be applied to specific network element.
Refer to <xref target="appendix-network"/> for examples of network-level templates.</t>
    </section>
    <section anchor="template-yang">
      <name>The "ietf-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-template" module:</t>
        <artwork><![CDATA[
module: ietf-template
  +--rw templates
     +--rw template* [id]
        +--rw id                 string
        +--rw description?       string
        +--rw content?           <anydata>
        +--ro last-modified?     yang:timestamp
        +--ro parent-template*   -> ../../template/id
        +--ro inherited-by*      union
]]></artwork>
        <ul empty="true">
          <li>
            <t>Editor's Note: Should the 'stmt-extend' and 'operation-tag' metadata annotations be defined here?</t>
          </li>
        </ul>
      </section>
      <section anchor="yang-module">
        <name>YANG Module</name>
        <sourcecode markers="true" name="ietf-template@2024-08-27.yang"><![CDATA[
module ietf-template {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-template";
  prefix template;

  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:  <mailto:netmod@ietf.org>
     Author: Qiufang Ma
             <mailto:maqiufang1@huawei.com>";
             
  description
    "This module defines a template list with a RPC to expand
     the template.

     Copyright (c) 2024 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 2024-08-27 {
     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.";
       }
       leaf-list parent-template {
         type leafref {
           path "../../template/id";
         }
         config false;
         description
           "The identifier of the template that this template is
            inherited from.";
       }
       leaf-list inherited-by {
         type union {
           type instance-identifier;
           type leafref {
             path "../../template/id";
           }
         }
         config false;
         description
           "The data tree node or an identifier of the template that
            inherits this template.";
       }
     }
   }
}

]]></sourcecode>
      </section>
    </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-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-template
        namespace:          urn:ietf:params:xml:ns:yang:ietf-template
        prefix:             template
        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="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="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="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="I-D.ietf-opsawg-ntw-attachment-circuit">
          <front>
            <title>A Network YANG Data Model for Attachment Circuits</title>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Richard Roberts" initials="R." surname="Roberts">
              <organization>Juniper</organization>
            </author>
            <author fullname="Oscar Gonzalez de Dios" initials="O. G." surname="de Dios">
              <organization>Telefonica</organization>
            </author>
            <author fullname="Samier Barguil" initials="S." surname="Barguil">
              <organization>Nokia</organization>
            </author>
            <author fullname="Bo Wu" initials="B." surname="Wu">
              <organization>Huawei Technologies</organization>
            </author>
            <date day="5" month="September" year="2024"/>
            <abstract>
              <t>   This document specifies a network model for attachment circuits.  The
   model can be used for the provisioning of attachment circuits prior
   or during service provisioning (e.g., VPN, Network Slice Service).  A
   companion service model is specified in the YANG Data Models for
   Bearers and 'Attachment Circuits'-as-a-Service (ACaaS) (I-D.ietf-
   opsawg-teas-attachment-circuit).

   The module augments the base network ('ietf-network') and the Service
   Attachment Point (SAP) models with the detailed information for the
   provisioning of attachment circuits in Provider Edges (PEs).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-ntw-attachment-circuit-13"/>
        </reference>
        <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="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="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-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="29" month="September" year="2024"/>
            <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-09"/>
        </reference>
        <reference anchor="RFC7149">
          <front>
            <title>Software-Defined Networking: A Perspective from within a Service Provider Environment</title>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <author fullname="C. Jacquenet" initials="C." surname="Jacquenet"/>
            <date month="March" year="2014"/>
            <abstract>
              <t>Software-Defined Networking (SDN) has been one of the major buzz words of the networking industry for the past couple of years. And yet, no clear definition of what SDN actually covers has been broadly admitted so far. This document aims to clarify the SDN landscape by providing a perspective on requirements, issues, and other considerations about SDN, as seen from within a service provider environment.</t>
              <t>It is not meant to endlessly discuss what SDN truly means but rather to suggest a functional taxonomy of the techniques that can be used under an SDN umbrella and to elaborate on the various pending issues the combined activation of such techniques inevitably raises. As such, a definition of SDN is only mentioned for the sake of clarification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7149"/>
          <seriesInfo name="DOI" value="10.17487/RFC7149"/>
        </reference>
        <reference anchor="RFC7426">
          <front>
            <title>Software-Defined Networking (SDN): Layers and Architecture Terminology</title>
            <author fullname="E. Haleplidis" initials="E." role="editor" surname="Haleplidis"/>
            <author fullname="K. Pentikousis" initials="K." role="editor" surname="Pentikousis"/>
            <author fullname="S. Denazis" initials="S." surname="Denazis"/>
            <author fullname="J. Hadi Salim" initials="J." surname="Hadi Salim"/>
            <author fullname="D. Meyer" initials="D." surname="Meyer"/>
            <author fullname="O. Koufopavlou" initials="O." surname="Koufopavlou"/>
            <date month="January" year="2015"/>
            <abstract>
              <t>Software-Defined Networking (SDN) refers to a new approach for network programmability, that is, the capacity to initialize, control, change, and manage network behavior dynamically via open interfaces. SDN emphasizes the role of software in running networks through the introduction of an abstraction for the data forwarding plane and, by doing so, separates it from the control plane. This separation allows faster innovation cycles at both planes as experience has already shown. However, there is increasing confusion as to what exactly SDN is, what the layer structure is in an SDN architecture, and how layers interface with each other. This document, a product of the IRTF Software-Defined Networking Research Group (SDNRG), addresses these questions and provides a concise reference for the SDN research community based on relevant peer-reviewed literature, the RFC series, and relevant documents by other standards organizations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7426"/>
          <seriesInfo name="DOI" value="10.17487/RFC7426"/>
        </reference>
      </references>
    </references>
    <?line 683?>

<section anchor="template-syntax">
      <name>template Syntax</name>
      <t>Some implementations support richer syntax in the template definition so that
the use of configuration template could be more flexible.</t>
      <section anchor="variable-declaration">
        <name>Variable Declaration</name>
        <t>TBD</t>
      </section>
      <section anchor="loop-statement">
        <name>Loop Statement</name>
        <t>TBD</t>
      </section>
      <section anchor="if-else-statement">
        <name>If-Else Statement</name>
        <t>TBD</t>
      </section>
    </section>
    <section anchor="appendix-network">
      <name>Usage Examples</name>
      <t>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:</t>
      <artwork><![CDATA[
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;
        }
      }
    }
  }
}
]]></artwork>
      <section anchor="template-creation">
        <name>Creating Templates</name>
        <t>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:</t>
        <artwork><![CDATA[
{
    "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"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        ]
    }
}
]]></artwork>
      </section>
      <section anchor="template-inherits">
        <name>Inheriting Templates</name>
        <t>The operator may create another template with an additional NTP server instance
when inheriting the template created in <xref target="template-creation"/>. The configuration
is shown as follows:</t>
        <artwork><![CDATA[
{
    "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"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        ]
    }
}
]]></artwork>
        <t>The configuration of template "template-ntp2" renders the following expanded configuration:</t>
        <artwork><![CDATA[
{
    "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"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        ]
    }
}
]]></artwork>
        <t>the following shows the network-level ntp configuration
using "template-ntp" and "template-ntp2" that may be sent to a SDN controller:</t>
        <artwork><![CDATA[
{
    "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"
        }
    ]
}
]]></artwork>
        <t>And it renders the following expanded configuration:</t>
        <artwork><![CDATA[
{
    "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"
                    }
                ]
            }
        }
    ]
}
]]></artwork>
      </section>
      <section anchor="overriding-templates">
        <name>Overriding Templates</name>
        <t>The client may override the template created in <xref target="template-creation"/> to specify
the NTP server named "ntp-server-2" as the perferred one for device "ne-4":</t>
        <artwork><![CDATA[
{
    "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"
                }
            ]
        }
    ]
}
]]></artwork>
        <t>It is equivalent to the configuration as follows:</t>
        <artwork><![CDATA[
{
    "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"
                    }
                ]
            }
        }
    ]
}
]]></artwork>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
uybRyieKAAA=

-->

</rfc>
