<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-tt-netmod-yang-config-templates-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="YANG Config Templates">YANG Configuration Templates</title>
    <seriesInfo name="Internet-Draft" value="draft-tt-netmod-yang-config-templates-04"/>
    <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="September" day="22"/>
    <area>Operations and Management</area>
    <workgroup>Network Modeling</workgroup>
    <keyword>YANG</keyword>
    <keyword>template</keyword>
    <keyword>NMDA</keyword>
    <abstract>
      <?line 58?>

<t>This document defines a YANG-based configuration template mechanism
   whereby repetitive configuration data can be factored out into
   templates and applied where needed.  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 67?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines the "template" mechanism mentioned but
   not defined in Network Management Datastore Architecture (NMDA) <xref target="RFC8342"/>.</t>
      <t>Templates enable repetitive configuration to be factored out into
   hierarchies of living templates and applied where the configuration
   is needed.  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>
      <t>Templates are "hierarchal" in that templates may apply yet other
   templates.  Templates are "living" in that their affect on
   configuration is maintained so long as the template is applied.
   Any change made to an applied template has immediate effect on
   the configuration.</t>
      <t>By example, an network management system (NMS) may manage many
   devices.  Devices may be come from different vendors, each of
   which may have multiple types of devices (router, firewall, etc.),
   though sharing a common operating system.  Further, each type of
   device may have different models (e.g., fw-100, fw-1000, etc.).
   In this case, common "fw-100" configuration could be put into
   a template called "common-fw-100-template", which itself inherits
   from a template called "common-fw-template", which itself inherits
   from a template called "common-vendor-template".  Similarly, a
   "common-fw-1000-template" could inherit from "common-fw-template"
   and, likewise, a "common-rtr-template" could inherit from the
   "common-vendor-template".</t>
      <t>Templates are mostly for humans, but are still important even
   when the management of a server's configuration is fully automated.
   For instance, when provided templates, a server can optimize
   internal memory usage, enabling higher performance and scability.</t>
      <t>The solution presented in this document supports both servers that do
   and do not support NMDA.  In both cases, templates are edited and
   applied as configuration in &lt;running&gt;.  For servers supporting NMDA,
   templates may be defined in &lt;system&gt; <xref target="I-D.ietf-netmod-system-config"/>,
   if supported by the server, and &lt;intended&gt; always returns the
   configuration with the templates expanded.  For servers not
   supporting NMDA, a "with-templates-expanded" parameter may be passed
   by a client, when fetching configuration from &lt;running&gt;, to obtain
   the configuration with the templates expanded.  However templates
   are expanded, a "with-template-inheritance" parameter may be passed
   by a client, when fetching expanded configuration, to obtain the
   expanded configuration with annotations indicating from which
   template values came from.</t>
      <t>Templates may be expanded off-box.  If a client has knowledge
   of the complete contents of &lt;running&gt; and &lt;system&gt;, if
   supported by the server, the client can calculate the exact
   result of template expansion.  Template expansion is
   independent of the server's operational state.</t>
      <t>Templates can be used with any YANG data model, including
   those defined with augmentations and/or deviations.</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 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 snippet of configuration data that may 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>
        <t>Examples used in this document encode YANG data using XML,
as defined in <xref target="RFC7950"/>.  Other encodings such as
JSON <xref target="RFC7951"/> and CBOR <xref target="RFC9254"/> could have been
instead.</t>
      </section>
      <section anchor="applicability-statement">
        <name>Applicability Statement</name>
        <t>The solution presented in this document can be implemented by
any YANG-based server.  The solution is data model independent
and can be wholly realized as a preprocessor to the existing
configuration management mechanism on a server.</t>
      </section>
    </section>
    <section anchor="configuration-template-solution">
      <name>Configuration Template Solution</name>
      <section anchor="defining-templates">
        <name>Defining Templates</name>
        <t>Templates must first be defined before they can be applied
(see <xref target="applying-templates"/>).  Templates that are defined
but not applied have no impact on configuration.</t>
        <t>The creation, modification, and deletion of references to templates
is achieved by network management operations on the &lt;running&gt;
datastore via YANG driven protocols such as NETCONF <xref target="RFC6241"/>
and RESTCONF <xref target="RFC8040"/>.</t>
        <t>A server supporting templates <bcp14>MUST</bcp14> implement the
"ietf-config-templates" YANG module defined in <xref target="yang-module"/>.
This module defines a top-level "container" node called "templates"
having a "list" node called "template".  Each "template" node
instance is a YANG configuration template containing the
following descendant nodes:</t>
        <ul spacing="compact">
          <li>
            <t>id: a unique identifier for the template used when applying it.</t>
          </li>
          <li>
            <t>description: an optional description for the template.</t>
          </li>
          <li>
            <t>data-path: an optional schema location, if not root.</t>
          </li>
          <li>
            <t>content: the configuration data the template holds.</t>
          </li>
        </ul>
        <t>Servers <bcp14>SHOULD</bcp14> validate templates at the time they are defined,
that is, before they are applied, as described in <xref target="applying-templates"/>.
Validation is limited as templates do not need to, e.g., define
mandatory nodes, but other checks are possible, such as ensuring
nodes exist in the schema tree and that their values are of the
correct type.</t>
        <t>The subsections below focus solely on how templates are defined, without
any consideration for how they are applied.</t>
        <section anchor="static-config">
          <name>Templates for Static Configuration</name>
          <t>Templates <bcp14>MAY</bcp14> be defined to set static configuration, i.e.,
configuration the is not repetitive, as described in
<xref target="repetitive-config"/>.  Such templates do not reduce the size
of the configuration, but may be useful if wanting to group
configuration scattered throughout the tree. For instance,
for a server providing customer-facing services, there may
be a group for each customer that sets all the configuration
needed for the one customer.</t>
          <t>For example, the following template would, if applied, set the
"/my-yang-module:top-level-node/foo/bar/baz" node to the "empty"
value, creating any missing ancestor nodes as needed.</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": {
        "template": [
            {
                "name": "my-template",
                "description": "...",
                "content": {
                    "my-yang-module:top-level-node": {
                        "foo": {
                            "bar": {
                                "baz": [null]
                            }
                        }
                    }
                }
            }
        ]
    }
}
]]></artwork>
          <t>The following template is identical to the one shown previously, but
uses the "data-path" leaf to compress the "content" leaf's value.</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": {
        "template": [
            {
                "name": "my-template",
                "description": "...",
                "data-path": "/my-yang-module:top-level-node/foo/bar",
                "content": {
                    "my-yang-module:baz": [null]
                }
            }
        ]
    }
}
]]></artwork>
          <t>Templates can set values under "list" nodes as well. For instance, the
following template would, if applied, set the
"/my-yang-module:top-level-node/foo[key='f1']/bar[key='b1']/baz"
node to the "empty" value, creating any missing ancestor nodes as needed.</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": {
        "template": [
            {
                "name": "my-template",
                "description": "...",
                "content": {
                    "my-yang-module:top-level-node": [
                        {
                            "foo": [
                                {
                                    "key": "f1",
                                    "bar": [
                                        {
                                            "key": "b1",
                                            "baz": [null]
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            }
        ]
    }
}
]]></artwork>
          <t>The following template is identical to the one shown previously, but
uses the "data-path" leaf to compress the "content" leaf's value.</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": {
        "template": [
            {
                "name": "my-template",
                "description": "...",
                "data-path": "/my-yang-module:top-level-node/foo[key='f1']/bar[key='b1']",
                "content": {
                    "my-yang-module:baz": [null]
                }
            }
        ]
    }
}
]]></artwork>
        </section>
        <section anchor="repetitive-config">
          <name>Templates for Repetitve Configuration</name>
          <t>The previous example shows a template setting configuration under
a very specific list.  But many times it is desirable to set the
same configuration under any list or any list whose key values
match a pattern.</t>
          <t>To allow a single template to apply to multiple list instances
a wildcard pattern may be used within the key leafs
to identify which list entries a template takes effect for.
This only works for list keys with built-in type "string",
or types derived from "string".</t>
          <t>The wildcard pattern <bcp14>MUST</bcp14> conform to the "Pattern Matching
Notation" defined in Section 2.13 of IEEE-1003.1-2008.</t>
          <t>For example, the following template would, if applied, set the
"baz" node to empty for any existing "bar" list beginning with
'b' under any existing "foo" list.</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": {
        "template": [
            {
                "name": "my-template",
                "description": "...",
                "content": {
                    "my-yang-module:top-level-node": [
                        {
                            "foo": [
                                {
                                    "key": "*",
                                    "bar": [
                                        {
                                            "key": "b*",
                                            "baz": [null]
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            }
        ]
    }
}
]]></artwork>
          <t>The following template is identical to the one shown previously, but
uses the "data-path" leaf to compress the "content" leaf's value.</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": {
        "template": [
            {
                "name": "my-template",
                "description": "...",
                "data-path": "/my-yang-module:top-level-node/foo[key='*']/bar[key='b*']",
                "content": {
                    "my-yang-module:baz": [null]
                }
            }
        ]
    }
}
]]></artwork>
        </section>
      </section>
      <section anchor="applying-templates">
        <name>Applying Templates</name>
        <t>Once templates have been defined (see <xref target="defining-templates"/>, they
may be applied (referenced) to the configuration where needed.
Templates <bcp14>MUST</bcp14> be applied to have any effect on configuration.</t>
        <t>The creation, modification, and deletion of references to templates
is achieved by network management operations on the &lt;running&gt;
datastore via YANG driven protocols such as NETCONF <xref target="RFC6241"/>
and RESTCONF <xref target="RFC8040"/>.</t>
        <t>Servers <bcp14>MUST</bcp14> validate templates at the time they are applied.
Validation is achieved by first fully expanding the templates
(see <xref target="template-expansion"/>) and then performing normal YANG
validation on the expanded configuration.</t>
        <t>The subsections below focus solely on how templates are applied, without
any consideration for how they are expanded.</t>
        <section anchor="config-applying-templates">
          <name>Configuration Applying Templates</name>
          <t>A server supporting templates <bcp14>MUST</bcp14> conceptually use the
"apply-templates" grouping, defined in the "ietf-config-templates"
YANG module, in every "container" and "list" node in the configuration,
excluding nodes defined by the "ietf-config-templates" YANG module
itself.</t>
          <t>As seen in <xref target="yang-module"/>, the "apply-templates" grouping defines
an ordered-by user "leaf-list" called "apply-templates".  The
"apply-templates" leaf-list is of type "leafref" having a "path"
pointing to "/templates/template/name".  That is, it identifies
a list of templates to apply.</t>
          <t>That it is a list, and not a scalar, enables more than one template
to be applied.  That the list is ordered enables subsequent templates
overriding values set by earlier templates.  The algorithm for template
expansion is discussed in <xref target="template-expansion"/>.</t>
          <t>The following example illustrates the configuration's root node
applying three templates.</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": {
        "template": [
            {
                "name": "one",
                "content": {
                    "my-yang-module:top-level-node": {
                        "foo": 1
                    }
                }
            },
            {
                "name": "two",
                "content": {
                    "my-yang-module:top-level-node": {
                        "foo": 2
                    }
                }
            },
            {
                "name": "three",
                "content": {
                    "my-yang-module:top-level-node": {
                        "foo": 3
                    }
                }
            }
        ]
    },
    "my-yang-module:apply-templates": [one, two, three]

}
]]></artwork>
        </section>
        <section anchor="templates-applying-templates">
          <name>Templates Applying Templates</name>
          <t>The template's "content" anydata node contains configuration, and
therefore can apply templates like regular configuration.  It is
that templates can recursively apply templates that enables this
enables templates to be "hierarchal".</t>
          <t>There <bcp14>MUST NOT</bcp14> be any circular chains of template applications.
For example, if template "a" applies template "b", "b" cannot
apply "a".</t>
          <t>The following example illustrates the configuration's root node
applying a template that applies a template that applies a template.</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "three",
            "content": {
                "my-yang-module:top-level-node": {
                    "foo": 3
                }
            }
        },
        {
            "name": "two",
            "content": {
                "apply-templates": [three]
            }
        },
        {
            "name": "one",
            "content": {
                "apply-templates": [two]
            }
        }
    ],
    "my-yang-module:apply-templates": [one]
}
]]></artwork>
        </section>
      </section>
      <section anchor="template-expansion">
        <name>Template Expansion</name>
        <t>Templates <bcp14>MUST</bcp14> be expanded, sometimes called "flattened", in order to
produce a configuration that can be subject to YANG validation and
applied by the server.</t>
        <t>Conceptually, template expansion is a generic (data-model independent)
pre-processor to a server's backend that knows nothing about templates.
That said, a server wishing to optimize internal memory usage to enable
higher performance and scability may have a backend that is template-aware.</t>
        <t>This section presents an algorithm for how to expand templates.</t>
        <section anchor="basic-rules">
          <name>Basic Rules</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 rules are as follows:</t>
          <ul spacing="normal">
            <li>
              <t>The value of a node in the expanded configuration is determined
by using precedence to decide where to take the value from.  </t>
              <ul spacing="normal">
                <li>
                  <t>Non-template configuration always has the highest precedence.</t>
                </li>
                <li>
                  <t>When templates are applied from multiple ancestors and/or self,
the innermost (furthest from root) applications 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>
                <li>
                  <t>When a template configuring list elements uses wildcards, and
more than one matches, each match is applied in order, with the
contents being merged.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>When a template configures nodes higher (closer to the root node)
in the configuration tree than where the template is applied, the
template's higher-level nodes are ignored.</t>
            </li>
          </ul>
        </section>
        <section anchor="merging-notes">
          <name>Merging Notes</name>
          <t>Merging configuration is a concept introduced in RFC 4741 without
a formal definition, which is provided in this section for templates.</t>
          <t>Generally, when configuration C1 is merged into C2, nodes in C2 take
precedence over nodes in C1.  Details follow.</t>
          <ul spacing="normal">
            <li>
              <t>When "leaf" L1 is merged into a "leaf" L2, the L2 leaf is retained
(L1 is discarded).</t>
            </li>
            <li>
              <t>When "anydata" A1 is merged into a "anydata" A2, the A2 anydata is
retained (A1 is discarded).</t>
            </li>
            <li>
              <t>When "leaf-list" LL1 is merged into a "leaf-list" LL2, new values
from LL1 are added (in order) to the end of LL2.  Matching values
are discarded.</t>
            </li>
            <li>
              <t>When "container" C1 is merged into "container" C2, all non-matching
descendant nodes are retained, and all matching descendant nodes are
recursively merged.</t>
            </li>
            <li>
              <t>When "list" LL1 is merged into a "list" LL2, all non-matching elements
from LL1 are added (in order) to the end of LL2, and all matching
elements are recursively merged.</t>
            </li>
          </ul>
          <t>For "ordered-by user" lists/leaf-lists, postpending new values/elements
preserves the understanding that values/elements are processed Left to
Right (or Top to Bottom).  Thus, postpending values/elements causes the
less important configuration (C1) to be processed after the more important
configuration (C2). This may not be semantically accurate in all cases.
For instance, the merging of two sorted lists of numbers should obstensibly
be interleaved as necessary to produce an ordered list of numbers.</t>
        </section>
        <section anchor="algorithm">
          <name>Algorithm</name>
          <aside>
            <t>Note: this section was written by AI by analysing an implementation
that passes all of the test vectors in <xref target="test-vectors"/>.</t>
          </aside>
          <t>This section describes an algorithm that implements the rules above.
The algorithm walks the configuration tree from the root, and, at each
node, merges the node's explicitly-provided configuration with the
configuration contributed by any applied templates.</t>
          <t>The algorithm relies on the underlying YANG data model in order to
classify each node (as a "container", "list", "leaf", "leaf-list", or
"anydata") and to learn each list's key leaf(s), as the merging rules
differ per node type and cannot be inferred from the encoded data alone.</t>
          <section anchor="preparation">
            <name>Preparation</name>
            <t>Before expansion begins:</t>
            <ol spacing="normal" type="1"><li>
                <t>Index every template definition by its "name", so that an
"apply-templates" reference can be resolved to a template's content.</t>
              </li>
              <li>
                <t>Remove the template definitions from the configuration, as they are
not themselves part of the expanded (&lt;intended&gt;) configuration.</t>
              </li>
            </ol>
            <t>Expansion then proceeds by processing the root node as a "container".</t>
          </section>
          <section anchor="collecting-a-nodes-sources-in-precedence-order">
            <name>Collecting a Node's Sources (in Precedence Order)</name>
            <t>At each container (including each list entry, which is a container), the
algorithm assembles an ordered list of "sources" that contribute
configuration to that location, ordered from highest precedence to
lowest:</t>
            <ol spacing="normal" type="1"><li>
                <t>The node's explicitly-provided configuration (i.e., everything
except its "apply-templates" value) comes first.</t>
              </li>
              <li>
                <t>For each name in the node's "apply-templates" value, in the order
listed by the client, the template's content is resolved to this
location (see below) and appended.  Because a template's content may
itself apply further templates, each template's content is processed
recursively, so that templates applied by a template rank below the
template that applied them.</t>
              </li>
            </ol>
            <t>Processing the sources in this order realizes the precedence rules:
explicit configuration outranks templates, self-applied templates
outrank ancestor-applied templates, and, among templates applied at the
same node, earlier-listed templates outrank later ones.  Applying a
template that is already being applied further up the current chain is a
circular reference and is an error.</t>
          </section>
          <section anchor="resolving-a-template-to-the-applied-location-ignore-above">
            <name>Resolving a Template to the Applied Location ("ignore above")</name>
            <t>A template is authored as a full configuration subtree rooted at the top
of the data tree, but it may be applied deep within the tree.  To find
the content a template contributes at the location where it is applied,
the algorithm navigates from the template's root down the same path
(the sequence of container and list-entry steps) that leads to the
applied node.  A list-entry step matches a template entry by comparing
key values, honoring wildcards ("*" and "?") in the template's keys.</t>
            <t>If the template configures nothing at (or below) the applied location,
it contributes nothing.  Any nodes the template configures above the
applied location are simply never reached by this navigation, which is
how the "ignore above" rule is realized.</t>
          </section>
          <section anchor="merging-the-sources">
            <name>Merging the Sources</name>
            <t>Once a location's sources have been collected (highest precedence
first), they are merged according to node type:</t>
            <ul spacing="normal">
              <li>
                <t>"container": The children of all sources are grouped by name,
preserving the order in which each name is first seen (i.e.,
highest-precedence first).  Each group is then merged recursively
according to that child's node type.</t>
              </li>
              <li>
                <t>"leaf" and "anydata"/"anyxml": The value from the highest-precedence
source is kept; lower-precedence values are discarded.</t>
              </li>
              <li>
                <t>"leaf-list": The higher-precedence values are kept, and any
not-yet-present values from lower-precedence sources are appended, in
order.  Duplicate values are discarded.</t>
              </li>
              <li>
                <t>"list": Entries are matched by their key value(s).  Concrete (non-
wildcard) entries establish the set of resulting entries, in order of
first appearance.  A wildcard entry contributes only to already-
established (higher-precedence) entries that it matches; when several
wildcard entries match the same entry, the later ones take
precedence.  Each resulting entry is then merged recursively as a
container.</t>
              </li>
            </ul>
          </section>
        </section>
      </section>
    </section>
    <section anchor="protocol-query-parameters">
      <name>Protocol Query Parameters</name>
      <t>This section defines query parameters that can be used with YANG-driven
protocols such as NETCONF <xref target="RFC6241"/> and RESTCONF <xref target="RFC8040"/>.  For
specific information regarding how these parameters are supported in
NETCONF and RESTCONF, please see "I-D.ietf-netmod-config-templates-nc"
and "I-D.ietf-netmod-config-templates-rc" respectively.</t>
      <section anchor="the-with-template-inheritance-parameter">
        <name>The "with-template-inheritance" Parameter</name>
        <aside>
          <t>FIXME: An R24-comment suggest returning such annotations all time - is that preferred?</t>
        </aside>
        <t>When viewing configuration with templates expanded, it can sometimes
become confusing where certain values were set.  The "with-template-inheritance"
parameter can be passed into configuration-fetching requests such as
RESTCONF's <tt>GET</tt> or NETCONF's <tt>&lt;get-data&gt;</tt>.</t>
        <t>When the "with-template-inheritance" parameter is passed, the configuration
returned is annotated with metadata indicating from which template values
were set from, if any.</t>
        <t>The annotation is a string having a value following the pattern
'node-foo' was inherited from template 'template-bar'`.</t>
      </section>
      <section anchor="the-with-templates-expanded-parameter">
        <name>The "with-templates-expanded" Parameter</name>
        <aside>
          <t>This section applies only to servers that do not support NMDA.</t>
        </aside>
        <t>For servers supporting NMDA, templates are always expanded when the
configuration is fetched from &lt;intended&gt;.</t>
        <t>For servers that do not support NMDA, the "with-templates-expanded"
parameter can be passed into &lt;running&gt; configuration-fetching requests
such as RESTCONF's <tt>GET</tt> or NETCONF's <tt>&lt;get-config&gt;</tt>.</t>
        <t>When the "with-templates-expanded" parameter is passed, the response
is the same as if the configuration had been expanded.</t>
      </section>
      <section anchor="the-with-inactive-removed-parameter">
        <name>The "with-inactive-removed" Parameter</name>
        <aside>
          <t>This section will be deleted.</t>
        </aside>
        <t>This paramter is NOT related to the template solution.  It is a parameter
that could be defined by some future "draft-ietf-netmod-inactive-config" I-D.</t>
        <t>The reason for this section is to lay bare logical extensions to the
"with-template-expanded" parameter.  That is, we could end up with
a multiplicity of such parameters for servers that do not support NMDA
to simulate fetching config from &lt;intended&gt;.</t>
        <t>Would a generic "get-intended" RPC for non-NMDA servers make more sense?</t>
      </section>
    </section>
    <section anchor="yang-module">
      <name>The "ietf-config-templates" 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-templates" module:</t>
        <artwork><![CDATA[
module: ietf-config-templates
  +--rw templates
     +--rw template* [name]
        +--rw name           string
        +--rw description?   string
        +--rw data-path?     yang:xpath1.0
        +--rw content        <anydata>

  grouping apply-templates:
    +-- apply-templates*   -> /templates/template/name
]]></artwork>
      </section>
      <section anchor="ietf-config-templates.yang">
        <name>YANG Module</name>
        <sourcecode markers="true" name="ietf-config-templates@2026-07-03.yang"><![CDATA[
module ietf-config-templates {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-config-templates";
  prefix yct;

  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 top-level 'templates' node, and an
     'apply-templates' grouping.

     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";
   }

   list templates {
     key name;
     description
       "The list of templates managed on this device.";
     leaf name {
       type string;
       description
         "The name of the template.";
     }
     leaf description {
       type string;
       description
         "A textual description of the template.";
     }
     leaf data-path {
       type yang:xpath1.0; // FIXME: should be YPath?
       default "/";
       description
         "The path location in the server's data tree that the
         ../content node is an instance of.  The data-path MUST
         not begin with '/ietf-config-template:templates'.";
     }
     anydata content {
       mandatory true;
       description
         "A subset of server configuration beginning at the
          location identified by the ../data-path node.  All
          top-level nodes MUST be namespace qualified.  When
          ../data-path is '/', the content MUST NOT define
          any nodes under '/ietf-config-template:templates'.";
     }
   }

   grouping apply-templates {
     description
       "A grouping that is conceptually used (i.e., the 'uses'
        statement) at every 'container' and 'list' node in the
        configuration.";
     leaf-list apply-templates {
       type leafref {
         path /yct:templates/yct:name;
       }
       ordered-by user;
       description
         "A user-ordered list of template references.";
     }
   }


   // FIXME: augment "with-templates-expanded" into NETCONF RPCs, what about RESTCONF?


}
]]></sourcecode>
      </section>
    </section>
    <section anchor="operational-consideration">
      <name>Operational Considerations</name>
      <section anchor="human-oriented">
        <name>Human Oriented</name>
        <section anchor="smaller-footprint">
          <name>Smaller Footprint</name>
          <t>Configuration templates are designed to factor out repetititive configuration
to a single definition that is applied repetitively.  Use of templates therefore
generally reduces the size of &lt;running&gt;.</t>
        </section>
        <section anchor="lower-cognative-load">
          <name>Lower Cognative Load</name>
          <t>Configuration templates enable a label (i.e., the template's name) to be given
for semantically related configuration, and then for that label to be referenced
where needed.  The additional structure provided by the template solution
generally improves readability and understandability.</t>
        </section>
      </section>
      <section anchor="machine-oriented">
        <name>Machine Oriented</name>
        <section anchor="scalability-concerns">
          <name>Scalability Concerns</name>
          <t>Large numbers of templates and/or large configurations may have performance
issues during template expansion.  Such issues may be improved by caching
intermediate expansion results, trading CPU-time for storage.</t>
        </section>
        <section anchor="one-to-many-implications">
          <name>One to Many Implications</name>
          <t>Configuration templates are designed to factor out configuration that is
applied repetitively, possibly a large number of times.  In some applications,
(e.g., a network device controller), a single change to a single template
could entail a potentially slow interaction with a large number of external
systems.</t>
          <!--
FIXME: Discuss with co-Authors

(See R9) Implementations MAY restrict, using a mechanism outside the scope of this document, 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.

Implementations MAY differ in whether the configuration templates themselves appear in \<intended\>, independent of whether the templates are applied. Implementations MAY also support conditional visibility, where templates appear in \<intended\> only when they are applied by at least one node via the "apply-templates" annotation. Regardless of the approach chosen, implementations MUST ensure the behavior is consistent and deterministic, and SHOULD be documented to allow clients to rely on predictable operational behaviors.
-->

</section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="access-control">
        <name>Access Control</name>
        <t>Editing configuration in a template <bcp14>MUST</bcp14> be authorized using the same access control
settings used for standard configuration.</t>
      </section>
      <section anchor="the-ietf-config-templates-module">
        <name>The "ietf-config-templates" Module</name>
        <t>This section is modelled after...FIXME.</t>
      </section>
    </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-templates
        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-templates
        namespace:          urn:ietf:params:xml:ns:yang:ietf-config-templates
        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="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="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="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-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="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="RFC7951">
          <front>
            <title>JSON Encoding of Data Modeled with YANG</title>
            <author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>This document defines encoding rules for representing configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using YANG as JavaScript Object Notation (JSON) text.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7951"/>
          <seriesInfo name="DOI" value="10.17487/RFC7951"/>
        </reference>
        <reference anchor="RFC9254">
          <front>
            <title>Encoding of Data Modeled with YANG in the Concise Binary Object Representation (CBOR)</title>
            <author fullname="M. Veillette" initials="M." role="editor" surname="Veillette"/>
            <author fullname="I. Petrov" initials="I." role="editor" surname="Petrov"/>
            <author fullname="A. Pelov" initials="A." surname="Pelov"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <date month="July" year="2022"/>
            <abstract>
              <t>YANG (RFC 7950) is a data modeling language used to model configuration data, state data, parameters and results of Remote Procedure Call (RPC) operations or actions, and notifications.</t>
              <t>This document defines encoding rules for YANG in the Concise Binary Object Representation (CBOR) (RFC 8949).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9254"/>
          <seriesInfo name="DOI" value="10.17487/RFC9254"/>
        </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>
      </references>
    </references>
    <?line 983?>

<section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section provides normative vector tests for implementations.</t>
      <section anchor="example-yang-module">
        <name>Example YANG Module</name>
        <t>This section presents a YANG module that is used by the vector tests.</t>
        <section anchor="original">
          <name>Original</name>
          <t>This is the original YANG module.</t>
          <artwork><![CDATA[
module my-yang-module {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:my-yang-module";
  prefix mym;

  leaf leaf {
    type string;
  }

  leaf-list leaf-list {
    type string;
  }

  container container {
    presence "so mandatory-leaf doesn't make mandatory-container";
    leaf mandatory-leaf {
      type string;
      mandatory true;
    }
  }

  list list {
    key key;
    leaf key {
      type string;
    }
    leaf val {
      type string;
    }
  }

  anydata anydata;

}
]]></artwork>
        </section>
        <section anchor="annotated">
          <name>Annotated</name>
          <t>This is the original YANG module after it has been annotated with
<tt>uses "yct:apply-templates"</tt> statements, as required by <xref target="config-applying-templates"/>.</t>
          <artwork><![CDATA[
module my-yang-module {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:my-yang-module";
  prefix mym;

  import ietf-config-templates {
    prefix yct;
  }

  uses "yct:apply-templates";

  leaf leaf {
    type string;
  }

  leaf-list leaf-list {
    type string;
  }

  container container {
    presence "so mandatory-leaf doesn't make mandatory-container";
    leaf mandatory-leaf {
      type string;
      mandatory true;
    }
    uses "yct:apply-templates";
  }

  list list {
    key key;
    leaf key {
      type string;
    }
    leaf val {
      type string;
    }
    uses "yct:apply-templates";
  }

  anydata anydata;

}
]]></artwork>
        </section>
      </section>
      <section anchor="basic-tests">
        <name>Basic Tests</name>
        <section anchor="no-templates-applied">
          <name>No Templates Applied</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:leaf": "1",
    "my-yang-module:leaf-list": ["1", "2", "3"],
    "my-yang-module:container": {
        "mandatory-leaf": "1"
    },
    "my-yang-module:list": [
        {
            "key": "foo",
            "val": "1"
        },
        {
            "key": "bar",
            "val": "1"
        },
        {
            "key": "baz",
            "val": "1"
        }
    ],
    "my-yang-module:anydata": {
        "some-other-module:zero": 0
    }
}

]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:leaf": "1",
    "my-yang-module:leaf-list": ["1", "2", "3"],
    "my-yang-module:container": {
        "mandatory-leaf": "1"
    },
    "my-yang-module:list": [
        {
            "key": "foo",
            "val": "1"
        },
        {
            "key": "bar",
            "val": "1"
        },
        {
            "key": "baz",
            "val": "1"
        }
    ],
    "my-yang-module:anydata": {
        "some-other-module:zero": 0
    }
}

]]></artwork>
        </section>
        <section anchor="all-configuration-in-a-single-template">
          <name>All Configuration in a Single Template</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:leaf": "1",
                "my-yang-module:leaf-list": ["1", "2", "3"],
                "my-yang-module:container": {
                    "mandatory-leaf": "1"
                },
                "my-yang-module:list": [
                    {
                        "key": "foo",
                        "val": "1"
                    },
                    {
                        "key": "bar",
                        "val": "1"
                    },
                    {
                        "key": "baz",
                        "val": "1"
                    }
                ],
                "my-yang-module:anydata": {
                    "some-other-module:zero": 0
                }
            }
        }
    ],
    "my-yang-module:apply-templates": ["t1"]

}

]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:leaf": "1",
    "my-yang-module:leaf-list": ["1", "2", "3"],
    "my-yang-module:container": {
        "mandatory-leaf": "1"
    },
    "my-yang-module:list": [
        {
            "key": "foo",
            "val": "1"
        },
        {
            "key": "bar",
            "val": "1"
        },
        {
            "key": "baz",
            "val": "1"
        }
    ],
    "my-yang-module:anydata": {
        "some-other-module:zero": 0
    }
}

]]></artwork>
        </section>
        <section anchor="all-configuration-in-a-multiplicity-of-templates">
          <name>All Configuration in a Multiplicity of Templates</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:leaf": "1"
            }
        },
        {
            "name": "t2",
            "content": {
                "my-yang-module:leaf-list": ["1", "2", "3"]
            }
        },
        {
            "name": "t3",
            "content": {
                "my-yang-module:container": {
                    "mandatory-leaf": "1"
                }
            }
        },
        {
            "name": "t4",
            "content": {
                "my-yang-module:list": [
                    {
                        "key": "foo",
                        "val": "1"
                    },
                    {
                        "key": "bar",
                        "val": "1"
                    },
                    {
                        "key": "baz",
                        "val": "1"
                    }
                ]
            }
        },
        {
            "name": "t5",
            "content": {
                "my-yang-module:anydata": {
                    "some-other-module:zero": 0
                }
            }
        }
    ],
    "my-yang-module:apply-templates": ["t1", "t2", "t3", "t4", "t5"]

}

]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:leaf": "1",
    "my-yang-module:leaf-list": ["1", "2", "3"],
    "my-yang-module:container": {
        "mandatory-leaf": "1"
    },
    "my-yang-module:list": [
        {
            "key": "foo",
            "val": "1"
        },
        {
            "key": "bar",
            "val": "1"
        },
        {
            "key": "baz",
            "val": "1"
        }
    ],
    "my-yang-module:anydata": {
        "some-other-module:zero": 0
    }
}

]]></artwork>
        </section>
      </section>
      <section anchor="empty-node-tests">
        <name>Empty Node Tests</name>
        <section anchor="empty-apply-template-list">
          <name>Empty "apply-template" List</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:apply-templates": []
}
]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
}
]]></artwork>
        </section>
        <section anchor="empty-template-content">
          <name>Empty Template Content</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {}
        }
    ],
    "my-yang-module:apply-templates": ["t1"]
}
]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
}
]]></artwork>
        </section>
      </section>
      <section anchor="node-leaf-tests">
        <name>Node "leaf" Tests</name>
        <section anchor="hierarchal-precedence">
          <name>Hierarchal Precedence</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:leaf": "t1-1"
            }
        }
    ],
    "my-yang-module:apply-templates": ["t1"],
    "my-yang-module:leaf": "1"
}

]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:leaf": "t1"
}

]]></artwork>
        </section>
        <section anchor="ordered-precedence">
          <name>Ordered Precedence</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:leaf": "t1"
            }
        },
        {
            "name": "t2",
            "content": {
                "my-yang-module:leaf": "t2"
            }
        },
        {
            "name": "t3",
            "content": {
                "my-yang-module:leaf": "t3"
            }
        }
    ],
    "my-yang-module:apply-templates": ["t1", "t2", "t3"]
}

]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:leaf": "t1"
}

]]></artwork>
        </section>
      </section>
      <section anchor="node-leaf-list-tests">
        <name>Node "leaf-list" Tests</name>
        <section anchor="hierarchal-precedence-1">
          <name>Hierarchal Precedence</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:leaf-list": ["t1"]
            }
        }
    ],
    "my-yang-module:apply-templates": ["t1"],
    "my-yang-module:leaf-list": ["1"]
}

]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:leaf-list": ["1", "t1"]
}

]]></artwork>
        </section>
        <section anchor="ordered-precedence-1">
          <name>Ordered Precedence</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:leaf-list": "t1"
            }
        },
        {
            "name": "t2",
            "content": {
                "my-yang-module:leaf-list": "t2"
            }
        },
        {
            "name": "t3",
            "content": {
                "my-yang-module:leaf-list": "t3"
            }
        }
    ],
    "my-yang-module:apply-templates": ["t1", "t2", "t3"]
}

]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:leaf-list": ["t1", "t2", "t3"]
}

]]></artwork>
        </section>
      </section>
      <section anchor="node-container-tests">
        <name>Node "container" Tests</name>
        <section anchor="hierarchal-precedence-2">
          <name>Hierarchal Precedence</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:container": {
                    "mandatory-leaf": "t1"
                }
            }
        }
    ],
    "my-yang-module:apply-templates": ["t1"],
    "my-yang-module:container": {
        "mandatory-leaf": "1"
    }
}
]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:container": {
        "mandatory-leaf": "1"
    }
}

]]></artwork>
        </section>
        <section anchor="ignore-above">
          <name>Ignore Above</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:leaf": "t1",
                "my-yang-module:leaf-list": ["t1", "t2", "t3"],
                "my-yang-module:container": {
                    "mandatory-leaf": "t1"
                },
                "my-yang-module:list": [
                    {
                        "key": "foo",
                        "val": "t1"
                    },
                    {
                        "key": "bar",
                        "val": "t1"
                    }
                ],
                "my-yang-module:anydata": {
                    "some-other-module:zero": 0
                }
            }
        }
    ],
    "my-yang-module:container": {
        "apply-templates": ["t1"]
    }
}
]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:container": {
        "mandatory-leaf": "t1"
    }
}

]]></artwork>
        </section>
        <section anchor="ordered-precedence-2">
          <name>Ordered Precedence</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:container": {
                    "mandatory-leaf": "t1"
                }
            }
        },
        {
            "name": "t2",
            "content": {
                "my-yang-module:container": {
                    "mandatory-leaf": "t2"
                }
            }
        },
        {
            "name": "t3",
            "content": {
                "my-yang-module:container": {
                    "mandatory-leaf": "t3"
                }
            }
        }
    ],
    "my-yang-module:apply-templates": ["t1", "t2", "t3"]
}

]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:container": {
        "mandatory-leaf": "t1"
    }
}

]]></artwork>
        </section>
      </section>
      <section anchor="node-list-tests">
        <name>Node "list" Tests</name>
        <section anchor="hierarchal-precedence-3">
          <name>Hierarchal Precedence</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:list": [
                    {
                        "key": "foo",
                        "val": "t1"
                    },
                    {
                        "key": "baz",
                        "val": "t1"
                    }
                ]
            }
        }
    ],
    "my-yang-module:apply-templates": ["t1"],
    "my-yang-module:list": [
        {
            "key": "foo",
            "val": "1"
        },
        {
            "key": "bar",
            "val": "1"
        }
    ]
}
]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:list": [
        {
            "key": "foo",
            "val": "1"
        },
        {
            "key": "bar",
            "val": "1"
        },
        {
            "key": "baz",
            "val": "t1"
        }
    ]
}

]]></artwork>
        </section>
        <section anchor="ignore-above-1">
          <name>Ignore Above</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:leaf": "t1",
                "my-yang-module:leaf-list": ["t1", "t2", "t3"],
                "my-yang-module:container": {
                    "mandatory-leaf": "t1"
                },
                "my-yang-module:list": [
                    {
                        "key": "foo",
                        "val": "t1"
                    },
                    {
                        "key": "bar",
                        "val": "t1"
                    }
                ],
                "my-yang-module:anydata": {
                    "some-other-module:zero": 0
                }
            }
        }
    ],
    "my-yang-module:list": [
        {
            "apply-templates": ["t1"],
            "key": "foo"
        }
    ]
}
]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:list": [
        {
            "key": "foo",
            "val": "t1"
        }
    ]
}

]]></artwork>
        </section>
        <section anchor="ordered-precedence-3">
          <name>Ordered Precedence</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:list": [
                    {
                        "key": "foo",
                        "val": "t1"
                    }
                ]
            }
        },
        {
            "name": "t2",
            "content": {
                "my-yang-module:list": [
                    {
                        "key": "foo",
                        "val": "t2"
                    }
                ]
            }
        },
        {
            "name": "t3",
            "content": {
                "my-yang-module:list": [
                    {
                        "key": "foo",
                        "val": "t3"
                    }
                ]
            }
        }
    ],
    "my-yang-module:apply-templates": ["t1", "t2", "t3"]
}

]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:list": [
        {
            "key": "foo",
            "val": "t1"
        }
    ]
}

]]></artwork>
        </section>
        <section anchor="wildcards">
          <name>Wildcards</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:list": [
                    {
                        "key": "*",
                        "val": "t1-*"
                    },
                    {
                        "key": "b*",
                        "val": "t1-b*"
                    },
                    {
                        "key": "?a?",
                        "val": "t1-?a?"
                    }
                ]
            }
        }
    ],
    "my-yang-module:apply-templates": ["t1"],
    "my-yang-module:list": [
        {
            "key": "foo"
        },
        {
            "key": "bar"
        },
        {
            "key": "baz"
        }
    ]
}

]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:list": [
        {
            "key": "foo",
            "val": "t1-*"
        },
        {
            "key": "bar",
            "val": "t1-?a?"
        },
        {
            "key": "baz",
            "val": "t1-?a?"
        }
    ]
}

]]></artwork>
        </section>
      </section>
      <section anchor="node-anydata-tests">
        <name>Node "anydata" Tests</name>
        <section anchor="hierarchal-precedence-4">
          <name>Hierarchal Precedence</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:anydata": {
                    "some-t1-module:color": "red"
                }
            }
        }
    ],
    "my-yang-module:apply-templates": ["t1"],
    "my-yang-module:anydata": {
        "some-other-module:zero": 0
    }
}

]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:anydata": {
        "some-other-module:zero": 0
    }
}

]]></artwork>
        </section>
        <section anchor="ordered-precedence-4">
          <name>Ordered Precedence</name>
          <t>When the &lt;running&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "ietf-config-templates:templates": [
        {
            "name": "t1",
            "content": {
                "my-yang-module:anydata": {
                    "some-t1-module:color": "red"
                }
            }
        },
        {
            "name": "t2",
            "content": {
                "my-yang-module:anydata": {
                    "some-t2-module:age": 23
                }
            }
        },
        {
            "name": "t3",
            "content": {
                "my-yang-module:anydata": {
                    "some-t3-module:planet": "earth"
                }
            }
        }
    ],
    "my-yang-module:apply-templates": ["t1", "t2", "t3"]
}

]]></artwork>
          <t>The &lt;intended&gt; datastore is:</t>
          <artwork><![CDATA[
{
    "my-yang-module:anydata": {
        "some-t1-module:color": "red"
    }
}

]]></artwork>
        </section>
      </section>
    </section>
    <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 tracks the status of requirements identified on the
[Template Requirements Issue Tracker([https://github.com/netmod-wg/template-reqs/issues).</t>
      <t>R1: <eref target="https://github.com/netmod-wg/template-reqs/issues/1">Wherever a template-reference can occur, more than one template-reference can occur (and they are applied)</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: strongly in favor</t>
        </li>
        <li>
          <t>status: supported in document (done)</t>
        </li>
      </ul>
      <t>R2: <eref target="https://github.com/netmod-wg/template-reqs/issues/2">Templates must be able to reference other templates (hierarchal templates)</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: originally a split opinion, subsequently supported.</t>
        </li>
        <li>
          <t>status: supported in document (done)</t>
        </li>
      </ul>
      <t>R3: <eref target="https://github.com/netmod-wg/template-reqs/issues/3">Templates must work with any YANG module (including augments and deviations)</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: strongly in favor</t>
        </li>
        <li>
          <t>status: supported in document (done)</t>
        </li>
      </ul>
      <t>R4: <eref target="https://github.com/netmod-wg/template-reqs/issues/4">Template syntax must be validated when defined (not only when used)</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: originally a split opinion, subsequently supported.</t>
        </li>
        <li>
          <t>status: supported in document (done)</t>
        </li>
      </ul>
      <t>R5: <eref target="https://github.com/netmod-wg/template-reqs/issues/5">Wherever a template-reference can occur, it must be possible to delete nodes from the template</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: mildly NOT in favor</t>
        </li>
        <li>
          <t>unsure if opposed to idea or to doing it in a first release.</t>
        </li>
        <li>
          <t>status: not supported in document (done)</t>
        </li>
      </ul>
      <t>R6: <eref target="https://github.com/netmod-wg/template-reqs/issues/6">Local-config overrides template-config</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: strongly in favor</t>
        </li>
        <li>
          <t>status: supported in document (done)</t>
        </li>
      </ul>
      <t>R7: <eref target="https://github.com/netmod-wg/template-reqs/issues/7">Templates are persistent (living templates) modifications to them are automatically applied to all consumers</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: strongly in favor</t>
        </li>
        <li>
          <t>status: supported in document (done)</t>
        </li>
      </ul>
      <t>R8: <eref target="https://github.com/netmod-wg/template-reqs/issues/8">Support basic programmatic elements in templates</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: strongly opposed (but Joe Clarke later said he would've voted in favor)</t>
        </li>
        <li>
          <t>unsure if opposed to idea or to doing it in a first release.</t>
        </li>
        <li>
          <t>status: NOT supported in document (discuss more?)</t>
        </li>
      </ul>
      <t>R9: <eref target="https://github.com/netmod-wg/template-reqs/issues/9">It must be possible to constrain which nodes can be template-consumers</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: strongly in favor</t>
        </li>
        <li>
          <t>really? how can it be important?</t>
        </li>
        <li>
          <t>status: NOT supported in document (discuss more first?)</t>
        </li>
      </ul>
      <t>R10: <eref target="https://github.com/netmod-wg/template-reqs/issues/10">For living templates, the configuration with both unexpanded and expanded templates is able to be returned</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: strongly in favor (with jstern's refinement)</t>
        </li>
        <li>
          <t>status: supported in document (done)</t>
        </li>
      </ul>
      <t>R11: <eref target="https://github.com/netmod-wg/template-reqs/issues/11">Possibility to reorder some user-ordered list/leaf-list entries defined in a template</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: strongly opposed</t>
        </li>
        <li>
          <t>status: not supported in document (done)</t>
        </li>
      </ul>
      <t>R12: <eref target="https://github.com/netmod-wg/template-reqs/issues/12">The &lt;running&gt; datastore contains the unexpanded template</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: strongly in favor</t>
        </li>
        <li>
          <t>status: supported in document (done)</t>
        </li>
      </ul>
      <t>R13: <eref target="https://github.com/netmod-wg/template-reqs/issues/13">For NMDA, the &lt;intended&gt; datastore returns the expanded template</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: strongly in favor</t>
        </li>
        <li>
          <t>status: supported in document (done)</t>
        </li>
      </ul>
      <t>R14: <eref target="https://github.com/netmod-wg/template-reqs/issues/14">Off-box template-expansion of &lt;running&gt; containing templates must be possible (potentially enabling off-box validation)</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: strongly in favor</t>
        </li>
        <li>
          <t>status: supported in document (done)</t>
        </li>
      </ul>
      <t>R15: <eref target="https://github.com/netmod-wg/template-reqs/issues/15">For NMDA, the &lt;intended&gt; datastore returns the unexpanded templates</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: mostly opposed</t>
        </li>
        <li>
          <t>status: supported in document (done)</t>
        </li>
      </ul>
      <t>R16: <eref target="https://github.com/netmod-wg/template-reqs/issues/16">Common data nodes</eref></t>
      <ul spacing="normal">
        <li>
          <t>never discussed: this requirement is closed in GitHub</t>
        </li>
        <li>
          <t>status: not supported in document (done)</t>
        </li>
      </ul>
      <t>R17: <eref target="https://github.com/netmod-wg/template-reqs/issues/17">For NMDA, The &lt;operational&gt; datastore returns unexpanded template config (depends on #15)</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: mostly opposed</t>
        </li>
        <li>
          <t>status: not supported in document (done)</t>
        </li>
      </ul>
      <t>R18: <eref target="https://github.com/netmod-wg/template-reqs/issues/18">Support limited-regex in template-config for template-consumer application</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: strongly in favor</t>
        </li>
        <li>
          <t>status: supported in document (done)</t>
        </li>
      </ul>
      <t>R19: <eref target="https://github.com/netmod-wg/template-reqs/issues/19">When multiple templates are applied to a node, a precedence order must be defined (either ascending or descending)</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: strongly in favor</t>
        </li>
        <li>
          <t>status: supported in document (done)</t>
        </li>
      </ul>
      <t>R20: <eref target="https://github.com/netmod-wg/template-reqs/issues/20">When templates are applied at multiple ancestor nodes, the innermost (closest) template takes precedence.</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: mostly in favor</t>
        </li>
        <li>
          <t>status: supported in document (done)</t>
        </li>
      </ul>
      <t>R21: <eref target="https://github.com/netmod-wg/template-reqs/issues/21">The solution enables non-nmda servers to return the expanded data</eref></t>
      <ul spacing="normal">
        <li>
          <t>discussed: strongly in favor</t>
        </li>
        <li>
          <t>status: supported in document (but does it make sense?)</t>
        </li>
      </ul>
      <t>R22: <eref target="https://github.com/netmod-wg/template-reqs/issues/22">Method to exclude templates applied at ancestor nodes</eref></t>
      <ul spacing="normal">
        <li>
          <t>never discussed</t>
        </li>
        <li>
          <t>status: needs to be discussed (will schedule an Interim meeting)</t>
        </li>
      </ul>
      <t>R23: <eref target="https://github.com/netmod-wg/template-reqs/issues/23">Clarify the ability to apply a template at the datastore root node '/'</eref></t>
      <ul spacing="normal">
        <li>
          <t>never discussed</t>
        </li>
        <li>
          <t>status: needs to be discussed (will schedule an Interim meeting)</t>
        </li>
      </ul>
      <t>R24: <eref target="https://github.com/netmod-wg/template-reqs/issues/24">Metadata annotation to determine which template a node was applied from</eref></t>
      <ul spacing="normal">
        <li>
          <t>never discussed</t>
        </li>
        <li>
          <t>supported in document via "with-template-inheritance"?</t>
        </li>
        <li>
          <t>an R24-comment suggest returning such annotations all time - is that preferred?</t>
        </li>
        <li>
          <t>status: needs to be discussed (will schedule an Interim meeting)</t>
        </li>
      </ul>
      <t>R25: <eref target="https://github.com/netmod-wg/template-reqs/issues/25">Misaligned module template name</eref></t>
      <ul spacing="normal">
        <li>
          <t>never discussed</t>
        </li>
        <li>
          <t>status: needs to be discussed (will schedule an Interim meeting)</t>
        </li>
      </ul>
      <t>R26: <eref target="https://github.com/netmod-wg/template-reqs/issues/26">Seems a typo in this example</eref></t>
      <ul spacing="normal">
        <li>
          <t>never discussed</t>
        </li>
        <li>
          <t>status: needs to be discussed (will schedule an Interim meeting)</t>
        </li>
      </ul>
      <t>R27: <eref target="https://github.com/netmod-wg/template-reqs/issues/27">Adding an example for this might help</eref></t>
      <ul spacing="normal">
        <li>
          <t>never discussed</t>
        </li>
        <li>
          <t>status: needs to be discussed (will schedule an Interim meeting)</t>
        </li>
      </ul>
      <t>R28: <eref target="https://github.com/netmod-wg/template-reqs/issues/28">Good to have apply-groups-except equivalent feature as in Junos</eref></t>
      <ul spacing="normal">
        <li>
          <t>never discussed</t>
        </li>
        <li>
          <t>status: needs to be discussed (will schedule an Interim meeting)</t>
        </li>
      </ul>
      <t>R29: <eref target="https://github.com/netmod-wg/template-reqs/issues/29">Provide the ability to see the expanded view of configuration</eref></t>
      <ul spacing="normal">
        <li>
          <t>never discussed</t>
        </li>
        <li>
          <t>status: needs to be discussed (will schedule an Interim meeting)</t>
        </li>
      </ul>
      <t>R30: <eref target="https://github.com/netmod-wg/template-reqs/issues/30">Can the template be applied to a leaf/leaf-list?</eref></t>
      <ul spacing="normal">
        <li>
          <t>never discussed</t>
        </li>
        <li>
          <t>status: needs to be discussed (will schedule an Interim meeting)</t>
        </li>
      </ul>
    </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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
jnW6dgTZTDQKBRhV9KrPaPDviAacqp/UqvKS+nfMFi9DRq5PPW6iml39iZxr
lbKrI+plbVci7arO7Qhc7bEMmf2fiyuss47k/s+KmphLkb/Sqol8lyzvarO2
P0b2/metX67rzNr49Ap40HYZK+0vuZjLF7B+FUG8Q1SL9DPh/0z4r0T4n9XC
sa0g+ZdmAcuu0+VlSffedQFL7sT6K7rzLiu6MWa1/vrvvhNEP3PAq896sxxw
/RP/4l1O/FNlq10mDnwhGa1pq5/Z7Wd2ywNaNCCjO73nhpWMfEsNf1rzTnYo
+eCdDTYtePu68oLVFTDTN9LyWm39kwO+w5+eWPCu0vKaIArI8DbSpgyDd8o/
2Br4Xt2qTw9wV5anyt3ecpFqHZgvJ3FyS2+Sopb+eOyv4vjGv8nZfExhV0b5
SMKtXcGdm8ROn9G/fn+YWKUfUvn2b0pEnOBCFPfmzmoFJfGFpZs7xpoIVlbG
/lsRF7PTj0xh3DI+Kplxy/gL0JrKdVsyhSM/TlH4O5KftQwgdZSvHvS7H/tN
qWzXlV1valKP3h1ykbh9LBL3F0QP78Sv6zaq36335DlqxcVPxHXUtrYl67va
tFeznC2dtvHpX8GNs+QCLtVXecAPefPL9qv/txB13j9/eM9C0nob2LvRDXx4
F0VdDFu5gU9CMHuX2+bpin9bNfEvyq+u4nO5Br/6ALrxp2fQ583dBEv7BDe3
vreibIXRZ9n7s+z9Wfa+Idn7MnqxmrTaZt7BfZJU7VJK8rcQ5T/utbs6L3/f
VtMPAoYWBaK6TfPzsSKfPgwYWtSQ6jbNz01Kdu/BavzeKczP5mWNfz/CcvtK
ZKV3+6b5+RXnHd70xA/CB1ebGRv+JRWj6+kI19MFll+jj3u/ffx8B9Wofuzv
pB/VhqoDzJlN7BO2f0PLydWEaACW1YSSDLWgTo414OutP4Cb6+Mls91AGP3f
QlL+QCjzngXdK+5iz7af4KR7d25yA+8kol5xA3dMe0CPVFMUgg7z8uSvZgFf
fvtWYZpvBseKGUecwk8lSarlh9Qx/DsH6o4vEJviylh9w5TIfsmv6OTmCVWv
AsaQH3+dzYemdlNfahPwU1PxG0VVxKXIHk3E7zvZ1fg1qeWJ3eBXGz575Dc8
xIJt6hWXJd/81ZQ+nsTlyXyIBbmlPHnvfGJL0vdgqmKbS71hveXgaBdO6mes
o4TVQ10Fn171adkMH5Lu8iMG5Ql+kOqVbdWmFOer1Fvaer157WVu725hMnuP
XuCa49sdA0yHz9IJFuFL1Tg8y3JqwAAdVJ5CcpVnNkewZhjqaA927DLdp1gX
HCsVYZUkKp5k9pKVlUc+8U0sy+vtp2vtaK+5I1O1gmqSFQAsrF4Wp1T+i4q8
4mOHWOXMbq5/nT3fae6Zitlxnbl0USmW4b2AKzU4C6lJdRZzSZi1dn3nhs/x
rrcnVSzg/r6xpwnCXTzi6h7IVs3LJ5tYa82VA8OSNGtt5e4HP8AvrnNN8XE2
AYTUPSTU5qdmpPpc473NdeDwRRMOU1DRYZdYvrdyqHMuexaPASxYHo9KlwGt
C7EIPi4uQ3zDx0IxoZDfs8s10doqoLxyecuA9SUAC59WTUQ+UkCp85zKHtlt
8DfrbPrLG8bjryp3E6klPk8gteA2k/jMr9tZbFVeCjCv6kyZys7LDIs6cdFU
+9xuxjURoTXMnBfr7PmrG97zPdjzsVT3G1Ilklme4Vs1tHylE8MMveKD66z7
3op1GzzcxPdwf8y0OkjC/NS8SViE8UjB9TjHmpMbWCYrk93QZrduFqnxuiwD
mZT0RN77AGH3NcDusP2G4xmDhGEfG+WrLu9y+ai/PiZ8fVVMwCdek8UDerEQ
VxCXUlcW9him5YN19s8gJCjs7gAY8P2y+gVpeaqO2dwQGDqcmH0yDVma/cOx
eZTWBJxU+JMfuVtLcNm5AqzUJi3uX1gUD5+4zYlVUa3w61yoXZTjXhIqcDFh
EmX4iVCqt9ooyr3tajOZdzoNm6zUclxr56tkNrkq1yXquyS3LdWPxTXLorV3
yu+0jRZB7Z3I3u4dQVr3sN4SNYjxjndzM3u5afFrF+WvF+Nxb5i9cbTFlYWu
lg8351O5qk0atulXRabq4dghk1lEqoPR11MkWsS2dwPBF+scZwtyrkWJd9uk
r6wol1yxy/aCQpM8tEVVw4h3rLUuIyDxc+He6khZ9pRdqnubZPxapPo+Ln+Y
D69NFr6qnAETCK/abesxtByBefhvk6sX4wOe6haAeC0ItIhLK07mKrv0BaYk
nuIrpjDlRL/xRSQj7lI5/Dq390tKr7WpVbLUWrfna9ZpUvOa45IC0VyZWx4D
856HlgewDQ2xOp6OSXEPiwhNLkg+cnqqgv9a70CvLPVc1QaxY/bevuWwdEDB
Kv6IvnwjmczEaapzRCm1SReoKLe8SubhKQznvaO9lo2iRXgRHF5rw7vCvc1L
CvI2REHPZabTUeje68zknlaZH97itTZyU/YjVBOw6iS/fX5qXvOk3aFs8kyX
J5kUgEf7Sa0yuTnX6nGutaO9dgJbJSpajwoRYm0LFDZBFSzwQWAqi5qqQ3x1
IJ6qqdZYgJt2g1IKKkPxmMv1hk6mbJTN54eFfBqbZfKo0sb2xlrbu/Oet3eX
DyuU4pj2fWkykXDZdV1/qTqU9wBCd5ZoQVlrf3dX7a8V97Ai/YoXu1mXCm/4
9fSbAjcKSc/iAmQ3esNDjIwWsvQm7Dpg/OI9owkKRMdaT+mBysUss8/raS6F
vdail8hGN7ZolIb2R2y7Tc1K3WvNU3oa80Qns7VW/9V7Xj1KOd9nTETpIRt2
K9HbW/jwEz64pVB+BE0AcXysQ3q3hx53Vz/O02w9gnrvPe8LJZ2XXHm9TlDN
O5SWz+Frzo0nQ9ba1dfvd1d3UIY5CNPqS0nDmtyGVgZnaniwluNg571uBP2B
+9Fpmp0nesTujuDtgB/d0aP/6ozDpNCdC/Za8oMWbBUEQfxUXIRheqqeZnP1
UOcTnXfVj/RI+jHadEBq9V735ac8jjIYuwx+xvd0+fUqodrsaKFHMeRFWXyR
CbBGnm+Kq6sv+itWFdo96dpjC/TgO00VSNF+82b6aRyd9gCkOb3wIXDkJ31S
9Qu+Lmwt1YMguK14qN40NC/Hk6u2FpXQ29nx2sq7wdUOY6/1GF9xR+9UtR+e
ZFHpZcUr0/BHON+ncToaJuEo+D/8tZ1eTOcAAA==

-->

</rfc>
