draft-ietf-netmod-yang-instance-file-format-02.txt | draft-ietf-netmod-yang-instance-file-format-03.txt | |||
---|---|---|---|---|
Netmod B. Lengyel | Netmod B. Lengyel | |||
Internet-Draft Ericsson | Internet-Draft Ericsson | |||
Intended status: Standards Track B. Claise | Intended status: Standards Track B. Claise | |||
Expires: August 30, 2019 Cisco Systems, Inc. | Expires: January 6, 2020 Cisco Systems, Inc. | |||
February 26, 2019 | July 5, 2019 | |||
YANG Instance Data File Format | YANG Instance Data File Format | |||
draft-ietf-netmod-yang-instance-file-format-02 | draft-ietf-netmod-yang-instance-file-format-03 | |||
Abstract | Abstract | |||
There is a need to document data defined in YANG models when a live | There is a need to document data defined in YANG models when a live | |||
YANG server is not available. Data is often needed already at design | server is not available. Data is often needed already at design or | |||
or implementation time or needed by groups that do not have a live | implementation time or needed by groups that do not have a live | |||
running YANG server available. This document specifies a standard | running server available. This document specifies a standard file | |||
file format for YANG instance data (which follows the syntax and | format for YANG instance data (which follows the syntax and semantic | |||
semantic from existing YANG models, re-using the same format as the | from existing YANG models, re-using the same format as the reply to a | |||
reply to a <get> operation/request) and decorates it with metadata. | <get> operation/request) and decorates it with metadata. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on August 30, 2019. | This Internet-Draft will expire on January 6, 2020. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2019 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2.1. High Level Principles . . . . . . . . . . . . . . . . . . 4 | 2.1. Principles . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3. Instance Data File Format . . . . . . . . . . . . . . . . . . 4 | 3. Instance Data File Format . . . . . . . . . . . . . . . . . . 4 | |||
3.1. Specifying the Target YANG Modules: target-ptr . . . . . 6 | 3.1. Specifying the Content Schema . . . . . . . . . . . . . . 6 | |||
3.1.1. INLINE Method . . . . . . . . . . . . . . . . . . . . 7 | 3.1.1. INLINE Method . . . . . . . . . . . . . . . . . . . . 7 | |||
3.1.2. URI Method . . . . . . . . . . . . . . . . . . . . . 8 | 3.1.2. URI Method . . . . . . . . . . . . . . . . . . . . . 7 | |||
3.2. Examples . . . . . . . . . . . . . . . . . . . . . . . . 8 | 3.2. Examples . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
4. Data Life cycle . . . . . . . . . . . . . . . . . . . . . . . 12 | 4. Data Life cycle . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
5. Delivery of Instance Data . . . . . . . . . . . . . . . . . . 13 | 5. Delivery of Instance Data . . . . . . . . . . . . . . . . . . 12 | |||
6. Backwards Compatibility . . . . . . . . . . . . . . . . . . . 13 | 6. Backwards Compatibility . . . . . . . . . . . . . . . . . . . 12 | |||
7. YANG Model . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 7. Yang Instance Data Model . . . . . . . . . . . . . . . . . . 12 | |||
7.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
7.2. YANG Model . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18 | |||
9.1. URI Registration . . . . . . . . . . . . . . . . . . . . 17 | 9.1. URI Registration . . . . . . . . . . . . . . . . . . . . 18 | |||
9.2. YANG Module Name Registration . . . . . . . . . . . . . . 17 | 9.2. YANG Module Name Registration . . . . . . . . . . . . . . 18 | |||
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 17 | 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 18 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 18 | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 19 | 11.2. Informative References . . . . . . . . . . . . . . . . . 20 | |||
Appendix A. Open Issues . . . . . . . . . . . . . . . . . . . . 19 | Appendix A. Open Issues . . . . . . . . . . . . . . . . . . . . 20 | |||
Appendix B. Changes between revisions . . . . . . . . . . . . . 19 | Appendix B. Changes between revisions . . . . . . . . . . . . . 20 | |||
Appendix C. Detailed Use Cases - Non-Normative . . . . . . . . . 21 | Appendix C. Detailed Use Cases - Non-Normative . . . . . . . . . 23 | |||
C.1. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . 21 | C.1. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
C.1.1. Use Case 1: Early Documentation of Server | C.1.1. Use Case 1: Early Documentation of Server | |||
Capabilities . . . . . . . . . . . . . . . . . . . . 22 | Capabilities . . . . . . . . . . . . . . . . . . . . 23 | |||
C.1.2. Use Case 2: Preloading Data . . . . . . . . . . . . . 23 | C.1.2. Use Case 2: Preloading Data . . . . . . . . . . . . . 24 | |||
C.1.3. Use Case 3: Documenting Factory Default Settings . . 23 | C.1.3. Use Case 3: Documenting Factory Default Settings . . 24 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 23 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
1. Terminology | 1. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
14 RFC 2119 [RFC2119] RFC 8174 [RFC8174] when, and only when, they | 14 RFC 2119 [RFC2119] RFC 8174 [RFC8174] when, and only when, they | |||
appear in all capitals, as shown here. | appear in all capitals, as shown here. | |||
Instance Data Set: A named set of data items decorated with metadata | Instance Data Set: A named set of data items decorated with metadata | |||
that can be used as instance data in a YANG data tree. | that can be used as instance data in a YANG data tree. | |||
Instance Data File: A file containing an instance data set formatted | Instance Data File: A file containing an instance data set formatted | |||
according to the rules described in this document. | according to the rules described in this document. | |||
Target YANG Module: A YANG module for which the instance data set | Content-schema: A set of YANG modules with their revision,suupported | |||
contains instance data, like ietf-yang-library in the examples. | features and deviations for which the instance data set contains | |||
instance data | ||||
Content defining Yang module(s): YANG module(s) that make up the | ||||
content-schema | ||||
YANG Instance Data, or just instance data for short, is data that | YANG Instance Data, or just instance data for short, is data that | |||
could be stored in a datastore and whose syntax and semantics is | could be stored in a datastore and whose syntax and semantics is | |||
defined by YANG models. | defined by YANG models. | |||
The term Server is used as defined in [RFC8342] | ||||
2. Introduction | 2. Introduction | |||
There is a need to document data defined in YANG models when a live | There is a need to document data defined in YANG models when a live | |||
YANG server is not available. Data is often needed already at design | server is not available. Data is often needed already at design or | |||
or implementation time or needed by groups that do not have a live | implementation time or needed by groups that do not have a live | |||
running YANG server available. To facilitate this off-line delivery | running server available. To facilitate this off-line delivery of | |||
of data this document specifies a standard format for YANG instance | data this document specifies a standard format for YANG instance data | |||
data sets and YANG instance data files. | sets and YANG instance data files. | |||
The following is a list of already implemented and potential use | The following is a list of already implemented and potential use | |||
cases. | cases. | |||
UC1 Documentation of server capabilities | UC1 Documentation of server capabilities | |||
UC2 Preloading default configuration data | UC2 Preloading default configuration data | |||
UC3 Documenting Factory Default Settings | UC3 Documenting Factory Default Settings | |||
skipping to change at page 3, line 46 ¶ | skipping to change at page 4, line 4 ¶ | |||
purposes | purposes | |||
UC6 Storing diagnostics data | UC6 Storing diagnostics data | |||
UC7 Allowing YANG instance data to potentially be carried within | UC7 Allowing YANG instance data to potentially be carried within | |||
other IPC message formats | other IPC message formats | |||
UC8 Default instance data used as part of a templating solution | UC8 Default instance data used as part of a templating solution | |||
UC9 Providing data examples in RFCs or internet drafts | UC9 Providing data examples in RFCs or internet drafts | |||
In Appendix C we describe the first three use cases in detail. | In Appendix C we describe the first three use cases in detail. | |||
There are already many and varied use cases where YANG instance data | There are many and varied use cases where YANG instance data could be | |||
could be used. We do not want to limit future uses of instance data | used. We do not want to limit future uses of instance data sets, so | |||
sets, so specifying how and when to use Yang instance data is out of | specifying how and when to use Yang instance data is out of scope for | |||
scope for this document. It is anticipated that other documents | this document. It is anticipated that other documents will define | |||
outside the instance data set itself will define specific use cases. | specific use cases. Use cases are listed here only to indicate the | |||
Use cases are listed here only to indicate the need for this work. | need for this work. | |||
2.1. High Level Principles | 2.1. Principles | |||
The following is a list of the basic principles of the instance data | The following is a list of the basic principles of the instance data | |||
format: | format: | |||
P1 Two standard formats are based on the XML and the JSON encoding | P1 Two standard formats are based on the XML and the JSON encoding | |||
P2 Re-use existing formats similar to the <get> operation/request | P2 Re-use existing formats similar to the response to a <get> | |||
operation/request | ||||
P3 Add metadata about the instance data set | ||||
P4 A YANG instance data file shall contain only a single YANG | P3 Add metadata about the instance data set (Section 3, Paragraph 9) | |||
instance data set | ||||
P5 A YANG instance data set may contain data for many target YANG | P4 A YANG instance data set may contain data for many YANG modules | |||
modules | ||||
P6 Instance data may include configuration data, state data or a mix | P5 Instance data may include configuration data, state data or a mix | |||
of the two | of the two | |||
P7 Partial data sets are allowed | P6 Partial data sets are allowed | |||
P8 YANG instance data format may be used for any data for which | P7 YANG instance data format may be used for any data for which YANG | |||
target YANG module(s) are defined and available to the reader, | module(s) are defined and available to the reader, independent of | |||
independent of whether the module is actually implemented by a | whether the module is actually implemented by a server | |||
YANG server | ||||
3. Instance Data File Format | 3. Instance Data File Format | |||
A YANG instance data file MUST contain a single instance data set and | A YANG instance data file MUST contain a single instance data set and | |||
no additional data. | no additional data. | |||
The instance data set is placed in a top level auxiliary container | The format of the instance data set is defined by the ietf-yang- | |||
named "instance-data-set". An instance data set is made up of a | instance-data YANG module. It is made up of a header part and | |||
header part and content-data. The initial header part carries | content-data. The header part carries metadata for the instance data | |||
metadata for the instance data set. It is defined by the ietf-yang- | set. The content-data, defined as an anydata data node, carries the | |||
instance-data YANG module. The content-data is all data inside the | "real data" that we want to document/provide. The syntax and | |||
anydata datanode, this carries the "real data" that we want to | semantics of content-data is defined by the content-schema. | |||
document/provide. The syntax and semantics of content-data is | ||||
defined by the target YANG modules. | ||||
Two formats are specified that can be used to represent YANG instance | Two formats are specified based on the XML and JSON YANG encodings. | |||
data based on the XML and JSON encoding. Later as other YANG | Later as other YANG encodings (e.g. CBOR) are defined further | |||
encodings (e.g. CBOR) are defined further instance data formats may | instance data formats may be specified. | |||
be specified. | ||||
The content-data part of the XML format SHALL follow the encoding | The content-data part SHALL follow the encoding rules defined in | |||
rules defined in [RFC7950] for XML and [RFC7951] for JSON and MUST | [RFC7950] for XML and [RFC7951] for JSON and MUST use UTF-8 character | |||
use UTF-8 character encoding. | encoding. Content-data MAY include: | |||
It MAY include metadata as defined by [RFC7952]. | metadata as defined by [RFC7952]. | |||
It MAY include entity-tags and timestamps as defined in [RFC8040] | entity-tags and timestamps as defined in [RFC8040] encoded | |||
according to [RFC7952] | ||||
It MAY include an explicit tag for default values as defined in | a default attribute as defined in [RFC6243] section 6. and in | |||
[RFC6243] and [RFC8040] | [RFC8040] section 4.8.9. | |||
It MAY include the origin metadata as specified in | origin metadata as specified in [RFC8526] and [RFC8527] | |||
[I-D.ietf-netconf-nmda-netconf] and | ||||
[I-D.ietf-netconf-nmda-restconf] | ||||
It MAY include implementation specific metadata. Unknown metadata | implementation specific metadata. Unknown metadata MUST be | |||
MUST be ignored by users of YANG instance data, allowing it to be | ignored by users of YANG instance data, allowing it to be used | |||
used later for other purposes. | later for other purposes. | |||
It MAY include implementation specific XML attributes. Unknown | in the XML format implementation specific XML attributes. Unknown | |||
attributes MUST be ignored by users of YANG instance data, | attributes MUST be ignored by users of YANG instance data, | |||
allowing them to be used later for other purposes. | allowing them to be used later for other purposes. | |||
The content-data part will be very similar to the result returned for | The content-data part will be very similar to the result returned for | |||
a NETCONF <get-data> or for a RESTCONF get operation. | a NETCONF <get-data> or for a RESTCONF get operation. | |||
The content-data part MUST conform to the corresponding target YANG | The content-data part MUST conform to the content-schema. An | |||
Modules. A single instance data set MAY contain data for any number | instance data set MAY contain data for any number of YANG modules; if | |||
of target YANG modules; if needed it MAY carry the complete | needed it MAY carry the complete configuration and state data set for | |||
configuration and state data set for a YANG server. Default values | a server. Default values SHOULD NOT be included. | |||
SHOULD NOT be included. | ||||
Config=true and config=false data MAY be mixed in the instance data | Config=true and config=false data MAY be mixed in the instance data | |||
file. | file. | |||
Instance data files MAY contain partial data sets. This means | Instance data files MAY contain partial data sets. This means | |||
mandatory, min-elements or require-instance=true constrains MAY be | mandatory, min-elements, require-instance=true, must and when | |||
violated. | constrains MAY be violated. | |||
The name of the file SHALL be of the form: | ||||
instance-data-set-name ['@' revision-date] '.filetype' | ||||
E.g. acme-router-modules@2018-01-25.xml | ||||
The revision date is optional. ".filetype" SHALL be ".json" or ".xml" | ||||
according to the format used. | ||||
Metadata, information about the data set itself SHALL be included in | The name of the instance data file SHOULD take one of the following | |||
the instance data set. This data will be children of the top level | two forms: | |||
instance-data-set container as defined in the ietf-instance-data YANG | ||||
module. Metadata MUST include: | ||||
o name of the instance data set | If revision information inside the data set is present | |||
Metadata SHOULD include: | * instance-data-set-name ['@' revision-date] '.filetype' | |||
o target-ptr: A pointer to the list of target YANG modules their | * E.g. acme-router-modules@2018-01-25.xml | |||
revision, supported features and deviations. | If the leaf name is present in the instance data header this MUST | |||
be used. Revision-date MUST be set to the latest revision date | ||||
inside the instance data set. | ||||
o An inline definition of target-modules, when the INLINE method is | If timestamp information inside the data set is present | |||
used for the target-ptr | ||||
o Description of the instance data set. The description SHOULD | * instance-data-set-name ['@' timestamp] '.filetype' | |||
contain information whether and how the data can change during the | ||||
lifetime of the YANG server. | ||||
Metadata MAY include: | * E.g. acme-router-modules@2018-01-25T15_06_34_3+01_00.json | |||
o Organization responsible for the instance data set | If the leaf name is present in the instance data header this MUST | |||
be used. If the leaf timestamp is present in the instance data | ||||
header this MUST be used; the semicolons and the decimal point if | ||||
present shall be replaced by underscores. | ||||
o Contact information | The revision date or timestamp is optional. ".filetype" SHALL be | |||
".json" or ".xml" according to the format used. | ||||
o Information about the datastore associated with the instance data | Metadata, information about the data set itself SHOULD be included in | |||
set e.g. the datastore from where the data was read or the | the instance data set. Some metadata items are defined in the YANG | |||
datastore where the data could be loaded or the datastore which is | module ietf-yang-instance-data, but other items MAY also be used. | |||
being documented. This information is optional, as often a single | Metadata SHOULD include: | |||
datastore can not be specified. | ||||
o Revision date of the instance data set. If both this date and and | o Name of the data set | |||
the date in the instance data file name are present they MUST have | ||||
the same value. | ||||
o Timestamp: The date and time when the instance data set was last | o Content schema specification | |||
modified. | ||||
o It is anticipated that different organizations will have the need | o Description of the instance data set. The description SHOULD | |||
to augment the metadata with various other data nodes. | contain information whether and how the data can change during the | |||
lifetime of the server. | ||||
3.1. Specifying the Target YANG Modules: target-ptr | 3.1. Specifying the Content Schema | |||
To properly understand and use an instance data set the user needs to | To properly understand and use an instance data set the user needs to | |||
know the list of target YANG modules their revision, supported | know the content-schema. One of the following methods SHOULD be | |||
features and deviations. The metadata "target-ptr" is used to | used: | |||
specify the YANG target module list. One of the following options | ||||
SHOULD be used: | ||||
INLINE method: Include the needed information as part of instance | INLINE method: Include the needed information as part of instance | |||
data set as defined by e.g. ietf-yang-library | data set. | |||
URI method: Include a URI that points to the target module set. | URI method: Include a URI that references another YANG instance | |||
(if you don't want to repeat the info again and again) | data file. This instance data file will use the same content- | |||
schema as the referenced YANG instance data file. (if you don't | ||||
want to repeat the info again and again) | ||||
EXTERNAL Method: Do not include the target-ptr as the target YANG | EXTERNAL Method: Do not include the content-schema as it is | |||
module set is already known, or the information is available | already known, or the information is available through external | |||
through external documents. | documents. | |||
Additional methods e.g. a YANG-package based solution may be added | Additional methods e.g. a YANG-package based solution may be added | |||
later. | later. | |||
Note, the specified target YANG modules only indicate the set of | Note, the specified content-schema only indicates the set of modules | |||
modules that were used to define this YANG instance data set. | that were used to define this YANG instance data set. Sometimes | |||
Sometimes instance data may be used for a YANG server supporting a | instance data may be used for a server supporting a different YANG | |||
different YANG module set e.g. for "UC2 Preloading Data" the instance | module set. (e.g. for "UC2 Preloading Data" the instance data set may | |||
data set may not be updated every time the YANG modules on the YANG | not be updated every time the YANG modules on the server are updated) | |||
server are updated, an unchanged instance data set may still be | Whether the instance data set is usable for a possibly different | |||
usable. Whether the instance data set is usable for a possibly | real-life YANG module set depends on many factors including the | |||
different real-life target YANG module set depends on many factors | compatibility between the specified and the real-life YANG module set | |||
including the compatibility between the specified target and the | (considering modules, revisions, features, deviations), the scope of | |||
real-life target YANG module set (considering modules, revisions, | the instance data, etc. | |||
features, deviations), the scope of the instance data, etc. | ||||
3.1.1. INLINE Method | 3.1.1. INLINE Method | |||
One or more inline-target-spec elements SHALL be specified. The | One or more inline-target-spec elements define YANG module(s) used to | |||
first one specifies ietf-yang-library or a similar YANG module | specify the content defining YANG modules. | |||
listing target YANG modules with their name, revision-date, | ||||
supported-features and deviations. Deviations or unsupported | ||||
features MUST NOT remove any of the above data from the module. | ||||
Using ietf-yang-library MUST be supported. | ||||
E.g. ietf-yang-library@2016-06-21.yang | E.g. ietf-yang-library@2016-06-21.yang | |||
As some versions of ietf-yang-library MAY contain different module- | The anydata inline-content-schema carries instance data (conforming | |||
sets for different datastores, if multiple module-sets are defined, | to the inline-target-spec modules) that actually specifies the | |||
the instance data set's meta-data MUST contain the datastore | content defining YANG modules including revision, supported features, | |||
information and instance data for the ietf-yang library MUST also | deviations and any relevant additional data (e.g. version labels) | |||
contain information specifying the module-set for the relevant | ||||
datastore. | ||||
Subsequent inline-target-spec elements MAY specify YANG modules | ||||
augmenting the first module with useful data (e.g. a semantic | ||||
version). | ||||
When using the inline method a 'target-modules' element MUST be | ||||
present. This SHALL contain instance data corresponding to the YANG | ||||
modules specified in the inline-target-spec elements specifying the | ||||
set of target YANG modules for this instance-data-set. | ||||
3.1.2. URI Method | 3.1.2. URI Method | |||
A target-uri element SHALL contain a URI that references another YANG | A schema-uri leaf SHALL contain a URI that references another YANG | |||
instance data file. The current instance data file will use the same | instance data file. The current instance data file will use the same | |||
set of target YANG modules, revisions, supported features and | content schema as the referenced file. | |||
deviations as the referenced YANG instance data file. | ||||
The referenced instance data file will usually contain data only for | ||||
ietf-yang-library to specify the target YANG modules for the original | ||||
instance data file. | ||||
The URI method is advantageous when the user wants to avoid the | ||||
overhead of specifying the target YANG modules in the instance data | ||||
file: E.g. In Use Case 6, when the system creates a diagnostic file | ||||
every 10 minutes to document the state of the YANG server. | ||||
The referenced YANG instance data file might use the in-line method | The referenced instance data file MAY have no content-data if it is | |||
or might use the URI method to reference further instance data | used solely for specifying the content-schema. The referenced YANG | |||
file(s). However at the end of this reference chain there MUST be an | instance data file might use the INLINE method or might use the URI | |||
instance data file using the in-line method. | method to reference further instance data file(s). However at the | |||
end of this reference chain there MUST be an instance data file using | ||||
the INLINE method. | ||||
If a referenced instance data file is not available the revision | If a referenced instance data file is not available the revision | |||
data, supported features and deviations for the target YANG modules | data, supported features and deviations for the target YANG modules | |||
are unknown. | are unknown. | |||
The URI method is advantageous when the user wants to avoid the | ||||
overhead of specifying the content-schema in each instance data file: | ||||
E.g. In Use Case 6, when the system creates a diagnostic file every | ||||
minute to document the state of the server. | ||||
3.2. Examples | 3.2. Examples | |||
The following example is based on "UC1, Documenting Server | The following example is based on "UC1, Documenting Server | |||
Capabilities". It provides (a shortened) list of supported YANG | Capabilities". It provides (a shortened) list of supported YANG | |||
modules and Netconf capabilities for a YANG server. It uses the | modules and Netconf capabilities for a server. It uses the inline | |||
inline method for the target-ptr. | method to specify the content-schema. | |||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<instance-data-set xmlns= | <instance-data-set xmlns= | |||
"urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"> | "urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"> | |||
<name>acme-router-modules</name> | <name>acme-router-modules</name> | |||
<inline-target-spec> | <inline-spec> | |||
ietf-yang-library@2016-06-21.yang | ietf-yang-library@2016-06-21.yang | |||
</inline-target-spec> | </inline-spec> | |||
<target-modules> | <inline-content-schema> | |||
<module-state xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-library"> | <module-state xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-library"> | |||
<module> | <module> | |||
<name>ietf-yang-library</name> | <name>ietf-yang-library</name> | |||
<revision>2016-06-21</revision> | <revision>2016-06-21</revision> | |||
</module> | </module> | |||
<module> | <module> | |||
<name>ietf-netconf-monitoring</name> | <name>ietf-netconf-monitoring</name> | |||
<revision>2010-10-04</revision> | <revision>2010-10-04</revision> | |||
</module> | </module> | |||
</module-state> | </module-state> | |||
</target-modules> | </inline-content-schema> | |||
<revision> | <revision> | |||
<date>2108-01-25</date> | <date>1956-10-23</date> | |||
<description>Initial version</description> | <description>Initial version</description> | |||
</revision> | </revision> | |||
<description>Defines the minimal set of modules that any acme-router | <description>Defines the minimal set of modules that any acme-router | |||
will contain.</description> | will contain.</description> | |||
<contact>info@acme.com</contact> | <contact>info@acme.com</contact> | |||
<content-data> | <content-data> | |||
<!-- The example lists only 4 modules, but it could list the | <!-- The example lists only 4 modules, but it could list the | |||
full set of supported modules for a YANG server, potentially many | full set of supported modules for a server, potentially many | |||
dozens of modules --> | dozens of modules --> | |||
<module-state xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-library"> | <module-state xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-library"> | |||
<module> | <module> | |||
<name>ietf-yang-library</name> | <name>ietf-yang-library</name> | |||
<revision>2016-06-21</revision> | <revision>2016-06-21</revision> | |||
<namespace> | <namespace> | |||
urn:ietf:params:xml:ns:yang:ietf-yang-library | urn:ietf:params:xml:ns:yang:ietf-yang-library | |||
</namespace> | </namespace> | |||
<conformance-type>implement</conformance-type> | <conformance-type>implement</conformance-type> | |||
</module> | </module> | |||
skipping to change at page 10, line 26 ¶ | skipping to change at page 9, line 44 ¶ | |||
</capabilities> | </capabilities> | |||
</netconf-state> | </netconf-state> | |||
</content-data> | </content-data> | |||
</instance-data-set> | </instance-data-set> | |||
Figure 1: XML Instance Data Set - Use case 1, Documenting server | Figure 1: XML Instance Data Set - Use case 1, Documenting server | |||
capabilities | capabilities | |||
The following example is based on "UC2, Preloading Default | The following example is based on "UC2, Preloading Default | |||
Configuration". It provides a (shortened) default rule set for a | Configuration". It provides a (shortened) default rule set for a | |||
read-only operator role. It uses the inline method for the target- | read-only operator role. It uses the inline method for specifying | |||
ptr. | the content-schema. | |||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<instance-data-set xmlns= | <instance-data-set xmlns= | |||
"urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"> | "urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"> | |||
<name>read-only-acm-rules</name> | <name>read-only-acm-rules</name> | |||
<inline-target-spec>ietf-yang-library@2016-06-21.yang | <inline-spec>ietf-yang-library@2019-01-04.yang</inline--spec> | |||
</inline-target-spec> | <inline-content-schema> | |||
<target-modules> | <yang-library xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-library"> | |||
<module-state xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-library"> | <module-set> | |||
<module> | <name>all</name> | |||
<name>ietf-netconf-acm</name> | <module> | |||
<revision>2012-02-22</revision> | <name>ietf-netconf-acm</name> | |||
</module> | <revision>2012-02-22</revision> | |||
</module-state> | </module> | |||
</target-modules> | </module-set> | |||
</yang-library> | ||||
</inline-content-schema> | ||||
<revision> | <revision> | |||
<date>2018-01-25</date> | <date>1776-07-04</date> | |||
<description>Initial version</description> | <description>Initial version</description> | |||
</revision> | </revision> | |||
<description>Access control rules for a read-only role.</description> | <description>Access control rules for a read-only role.</description> | |||
<contact>info@acme.com</contact> | ||||
<content-data> | <content-data> | |||
<nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"> | <nacm xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-acm"> | |||
<enable-nacm>true</enable-nacm> | <enable-nacm>true</enable-nacm> | |||
<read-default>deny</read-default> | <read-default>deny</read-default> | |||
<exec-default>deny</exec-default> | <exec-default>deny</exec-default> | |||
<rule-list> | <rule-list> | |||
<name>read-only-role</name> | <name>read-only-role</name> | |||
<group>read-only-group</group> | <group>read-only-group</group> | |||
<rule> | <rule> | |||
<name>read-all</name> | <name>read-all</name> | |||
skipping to change at page 11, line 48 ¶ | skipping to change at page 10, line 49 ¶ | |||
</rule> | </rule> | |||
</rule-list> | </rule-list> | |||
</nacm> | </nacm> | |||
</content-data> | </content-data> | |||
</instance-data-set> | </instance-data-set> | |||
Figure 2: XML Instance Data Set - Use case 2, Preloading access | Figure 2: XML Instance Data Set - Use case 2, Preloading access | |||
control data | control data | |||
The following example is based on UC6 Storing diagnostics data. An | The following example is based on UC6 Storing diagnostics data. An | |||
instance data set is produced by the YANG server every 15 minutes | instance data set is produced by the server every 15 minutes that | |||
that contains statistics about NETCONF. As a new set is produced | contains statistics about NETCONF. As a new set is produced | |||
periodically multiple times a day a revision-date would be useless; | periodically many times a day a revision-date would be useless; | |||
instead a timestamp is included. | instead a timestamp is included. | |||
{ | { | |||
"ietf-yang-instance-data:instance-data-set": { | "ietf-yang-instance-data:instance-data-set": { | |||
"name": "acme-router-netconf-diagnostics", | "name": "acme-router-netconf-diagnostics", | |||
"target-uri": "file:///acme-netconf-diagnostics-yanglib.json", | "schema-uri": "file:///acme-netconf-diagnostics-yanglib.json", | |||
"timestamp": "2018-01-25T17:00:38Z", | "timestamp": "2018-01-25T17:00:38Z", | |||
"description": | "description": | |||
"Netconf statistics", | "Netconf statistics", | |||
"content-data": { | "content-data": { | |||
"ietf-netconf-monitoring:netconf-state": { | "ietf-netconf-monitoring:netconf-state": { | |||
"statistics": { | "statistics": { | |||
"netconf-start-time ": "2018-12-05T17:45:00Z", | "netconf-start-time ": "2018-12-05T17:45:00Z", | |||
"in-bad-hellos ": "32", | "in-bad-hellos ": "32", | |||
"in-sessions ": "397", | "in-sessions ": "397", | |||
"dropped-sessions ": "87", | "dropped-sessions ": "87", | |||
skipping to change at page 12, line 34 ¶ | skipping to change at page 11, line 34 ¶ | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
Figure 3: JSON Instance Data File example - UC6 Storing diagnostics | Figure 3: JSON Instance Data File example - UC6 Storing diagnostics | |||
data | data | |||
4. Data Life cycle | 4. Data Life cycle | |||
Data defined or documented in YANG instance data sets may be used for | In UC2 "Preloading default configuration data" the loaded data may be | |||
preloading a YANG server with this data, but the server may populate | changed later e.g. by management operations. In UC6 "Storing | |||
the data without using the actual file in which case the instance | Diagnostics data" the diagnostics values may change on device every | |||
data file is only used as documentation. | second. | |||
While such data will usually not change, data documented by instance | ||||
data sets MAY be changed by the YANG server itself or by management | ||||
operations. It is out of scope for this document to specify a method | ||||
to prevent this. Whether such data changes and if so, when and how, | ||||
SHOULD be described either in the instance data set's description | ||||
statement or in some other implementation specific manner. | ||||
YANG instance data is a snap-shot of information at a specific point | YANG instance data is a snap-shot of information at a specific point | |||
of time. If the data changes afterwards this is not represented in | of time. If the data changes afterwards this is not represented in | |||
the instance data set anymore, the valid values can be retrieved in | the instance data set anymore. The valid values can be retrieved in | |||
run-time via NETCONF/RESTCONF. | run-time via NETCONF/RESTCONF or received e.g. in Yang-Push | |||
notifications. | ||||
Notifications about the change of data documented by instance data | Whether the instance data changes and if so, when and how, SHOULD be | |||
sets may be supplied by e.g. the Yang-Push mechanism, but it is out | described either in the instance data set's description statement or | |||
of scope for this document. | in some other implementation specific manner. | |||
5. Delivery of Instance Data | 5. Delivery of Instance Data | |||
Instance data sets that are produced as a result of some sort of | Instance data sets that are produced as a result of some sort of | |||
specification or design effort SHOULD be available without the need | specification or design effort SHOULD be available without the need | |||
for a live YANG server e.g. via download from the vendor's website, | for a live server e.g. via download from the vendor's website, or in | |||
or in any other way product documentation is distributed. | any other way product documentation is distributed. | |||
Other instance data sets may be read from or produced by the YANG | Other instance data sets may be read from or produced by the YANG | |||
server itself e.g. UC6 documenting diagnostic data. | server itself e.g. UC6 documenting diagnostic data. | |||
6. Backwards Compatibility | 6. Backwards Compatibility | |||
The concept of backwards compatibility and what changes are backwards | The concept of backwards compatibility and what changes are backwards | |||
compatible are not defined for instance data sets as it is highly | compatible are not defined for instance data sets as it is highly | |||
dependent on the specific use case and the target YANG model. | dependent on the specific use case and the content-schema. | |||
However as instance data does use the concept of managed entities | ||||
identified by key values the following guidelines are provided: | ||||
o For list entries representing the same managed entity as | For instance data that is the result of a design or specification | |||
previously key values SHOULD NOT be changed. | activity some changes that may be good to avoid are listed. YANG | |||
uses the concept of managed entities identified by key values; if the | ||||
connection between the represented entity and the key value is not | ||||
preserved during an update this may lead to problems. | ||||
o The meaning of list entries, representing the same managed entity | o If the key value of a list entry that represents the same managed | |||
as previously, SHOULD NOT be changed e.g. redefining an alarm-type | entity as before is changed, the user may mistakenly identify the | |||
but not changing its alarm-type-id should be avoided. | list entry as new. | |||
o Keys for previously removed list entries SHOULD NOT be reused if | o If the meaning of a list entry is changed, but the key values are | |||
they represent a different meaning. | not (e.g. redefining an alarm-type but not changing its alarm- | |||
type-id) the change may not be noticed. | ||||
7. YANG Model | o If the key value of a previously removed list entry is reused for | |||
a different entity, the change may be mis-interpreted as | ||||
reintroducing the previous entity. | ||||
<CODE BEGINS> file "ietf-yang-instance-data.yang" | 7. Yang Instance Data Model | |||
module ietf-yang-instance-data { | ||||
yang-version 1.1; | ||||
namespace | ||||
"urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"; | ||||
prefix yid ; | ||||
import ietf-yang-data-ext { prefix yd; } | 7.1. Tree Diagram | |||
import ietf-datastores { prefix ds; } | ||||
import ietf-inet-types { prefix inet; } | ||||
import ietf-yang-types { prefix yang; } | ||||
organization "IETF NETMOD Working Group"; | The following tree diagram [RFC8340] provides an overview of the data | |||
contact | model. | |||
"WG Web: <https://datatracker.ietf.org/wg/netmodf/> | ||||
WG List: <mailto:netmod@ietf.org> | ||||
Author: Balazs Lengyel | module: ietf-yang-instance-data | |||
<mailto:balazs.lengyel@ericsson.com>"; | structure instance-data-set: | |||
+--rw name? string | ||||
+--rw (content-schema-spec)? | ||||
| +--:(inline) | ||||
| | +--rw inline-spec* string | ||||
| | +--rw inline-content-schema <anydata> | ||||
| +--:(uri) | ||||
| +--rw schema-uri? inet:uri | ||||
+--rw description? string | ||||
+--rw contact? string | ||||
+--rw organization? string | ||||
+--rw datastore? ds:datastore-ref | ||||
+--rw revision* [date] | ||||
| +--rw date string | ||||
| +--rw description? string | ||||
+--rw timestamp? yang:date-and-time | ||||
+--rw content-data? <anydata> | ||||
description "The module defines the structure and content of YANG | 7.2. YANG Model | |||
instance data sets."; | ||||
revision 2019-02-20 { | <CODE BEGINS> file "ietf-yang-instance-data@2019-07-04.yang" | |||
description "Initial revision."; | module ietf-yang-instance-data { | |||
reference "RFC XXXX: YANG Instance Data Format"; | yang-version 1.1; | |||
} | namespace | |||
"urn:ietf:params:xml:ns:yang:ietf-yang-instance-data"; | ||||
prefix yid ; | ||||
yd:yang-data instance-data-format { | import ietf-yang-structure-ext { prefix sx; } | |||
container instance-data-set { | import ietf-datastores { prefix ds; } | |||
description "Auxiliary container to carry meta-data for | import ietf-inet-types { prefix inet; } | |||
the complete instance data set."; | import ietf-yang-types { prefix yang; } | |||
import ietf-yang-metadata { prefix "md"; } | ||||
organization "IETF NETMOD Working Group"; | ||||
contact | ||||
"WG Web: <https://datatracker.ietf.org/wg/netmodf/> | ||||
WG List: <mailto:netmod@ietf.org> | ||||
Author: Balazs Lengyel | ||||
<mailto:balazs.lengyel@ericsson.com>"; | ||||
description "The module defines the structure and content of YANG | ||||
instance data sets. | ||||
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. | ||||
Copyright (c) 2019 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 Simplified BSD License | ||||
set forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
Relating to IETF Documents | ||||
(http://trustee.ietf.org/license-info). | ||||
This version of this YANG module is part of RFC XXXX; see | ||||
the RFC itself for full legal notices."; | ||||
revision 2019-07-04 { | ||||
description "Initial revision."; | ||||
reference "RFC XXXX: YANG Instance Data Format"; | ||||
} | ||||
md:annotation entity-tag { | ||||
type string; | ||||
description "Used to encode the entity-tag defined in | ||||
RFC8040 for the annotated instance."; | ||||
reference "RESTCONF Protocol RFC8040"; | ||||
} | ||||
md:annotation last-modified { | ||||
type yang:date-and-time; | ||||
description "Contains the date and time when the annotated | ||||
instance was last modified (or created)."; | ||||
reference "RESTCONF Protocol RFC8040"; | ||||
} | ||||
sx:structure instance-data-set { | ||||
description "A data structure to define a format for a | ||||
YANG instance data set.Consists of meta-data about | ||||
the instance data set and the real content-data."; | ||||
leaf name { | leaf name { | |||
type string; | type string; | |||
mandatory true; | ||||
description "Name of the YANG instance data set."; | description "Name of the YANG instance data set."; | |||
} | } | |||
choice target-ptr { | choice content-schema-spec { | |||
description "A pointer to the list of target YANG modules | description "Specification of the content-schema"; | |||
their revisions, supported features and deviations."; | ||||
case inline { | case inline { | |||
leaf-list inline-target-spec { | leaf-list inline-spec { | |||
type string { | type string { | |||
pattern '.+@\d{4}-\d{2}-\d{2}\.yang'; | pattern '.+@\d{4}-\d{2}-\d{2}\.yang'; | |||
} | } | |||
min-elements 1; | min-elements 1; | |||
ordered-by user; | ordered-by user; | |||
description | description | |||
"Indicates that target modules are specified inline. | "Indicates that content defining Yang modules | |||
are specified inline. | ||||
Each value MUST be a YANG Module name including the | Each value MUST be a YANG Module name including the | |||
revision-date as defined for YANG file names in RFC7950. | revision-date as defined for YANG file names in RFC7950. | |||
E.g. ietf-yang-library@2016-06-21.yang | E.g. ietf-yang-library@2016-06-21.yang | |||
The first item is either ietf-yang-library or some other | The first item is either ietf-yang-library or some other | |||
YANG module that contains a list of YANG modules with | YANG module that contains a list of YANG modules with | |||
their name, revision-date, supported-features and | their name, revision-date, supported-features and | |||
deviations. | deviations. | |||
As some versions of ietf-yang-library MAY contain | As some versions of ietf-yang-library MAY contain | |||
different module-sets for different datastores, if | different module-sets for different datastores, if | |||
multiple module-sets are defined, the instance data set's | multiple module-sets are included, the instance data set's | |||
meta-data MUST contain the datastore information and | meta-data MUST contain the datastore information and | |||
instance data for the ietf-yang-library MUST also contain | instance data for the ietf-yang-library MUST also contain | |||
information specifying the module-set for the relevant | information specifying the module-set for the relevant | |||
datastore. | datastore. | |||
Subsequent items MAY specify YANG modules augmenting the | Subsequent items MAY specify YANG modules augmenting the | |||
first module with useful data (e.g. a semantic version)."; | first module with useful data (e.g. a version label)."; | |||
} | } | |||
anydata target-modules { | anydata inline-content-schema { | |||
mandatory true; | mandatory true; | |||
description "Instance data corresponding to the YANG modules | description "Instance data corresponding to the YANG modules | |||
specified in the inline-target-spec nodes defining the set | specified in the inline-spec nodes defining the set | |||
of target YANG modules for this instance-data-set."; | of content defining Yang YANG modules for this | |||
instance-data-set."; | ||||
} | } | |||
} | } | |||
case uri { | case uri { | |||
leaf target-uri { | leaf schema-uri { | |||
type inet:uri; | type inet:uri; | |||
description | description | |||
"A reference to another YANG instance data file. | "A reference to another YANG instance data file. | |||
This instance data file will use the same set of target | This instance data file will use the same set of target | |||
YANG modules, revisions, supported features and deviations | YANG modules, revisions, supported features and deviations | |||
as the referenced YANG instance data file."; | as the referenced YANG instance data file."; | |||
} | } | |||
} | } | |||
} | } | |||
leaf description { type string; } | leaf-list description { | |||
type string; | ||||
description "Description of the instance data set."; | ||||
} | ||||
leaf contact { | leaf contact { | |||
type string; | type string; | |||
description "Contact information for the person or | description "Contact information for the person or | |||
organization to whom queries concerning this | organization to whom queries concerning this | |||
instance data set should be sent."; | instance data set should be sent."; | |||
} | } | |||
leaf organization { | leaf organization { | |||
type string; | type string; | |||
description "Organization responsible for the instance | description "Organization responsible for the instance | |||
data set."; | data set."; | |||
} | } | |||
leaf datastore { | leaf datastore { | |||
type ds:datastore-ref; | type ds:datastore-ref; | |||
description "The identity of the datastore with which the | description "The identity of the datastore with which the | |||
instance data set is associated. If a single specific | instance data set is associated e.g. the datastore from | |||
datastore can not be specified, the leaf MUST be absent. | where the data was read or the datastore where the data | |||
could be loaded or the datastore which is being documented. | ||||
If a single specific datastore can not be specified, the | ||||
leaf MUST be absent. | ||||
If this leaf is absent, then the datastore to which the | If this leaf is absent, then the datastore to which the | |||
instance data belongs is undefined."; | instance data belongs is undefined."; | |||
} | } | |||
list revision { | list revision { | |||
key date; | key date; | |||
description "Instance data sets that are produced as | description "Instance data sets that are produced as | |||
a result of some sort of specification or design effort | a result of some sort of specification or design effort | |||
SHOULD have at least one revision entry. For every | SHOULD have at least one revision entry. For every | |||
published editorial change, a new one SHOULD be added | published editorial change, a new one SHOULD be added | |||
in front of the revisions sequence so that all | in front of the revisions sequence so that all | |||
revisions are in reverse chronological order. | revisions are in reverse chronological order. | |||
For instance data sets that are read from | For instance data sets that are read from | |||
or produced by the YANG server or otherwise | or produced by a server or otherwise | |||
subject to frequent updates or changes, revision | subject to frequent updates or changes, revision | |||
SHOULD NOT be present"; | SHOULD NOT be present"; | |||
leaf date { | leaf date { | |||
type string { | type string { | |||
pattern '\d{4}-\d{2}-\d{2}'; | pattern '\d{4}-\d{2}-\d{2}'; | |||
} | } | |||
description "Specifies the date the instance data set | description "Specifies the date the instance data set | |||
was last modified. Formatted as YYYY-MM-DD"; | was last modified. Formatted as YYYY-MM-DD"; | |||
} | } | |||
leaf description { type string; } | leaf description { | |||
type string; | ||||
description | ||||
"Description of this revision of the instance data set."; | ||||
} | ||||
} | } | |||
leaf timestamp { | leaf timestamp { | |||
type yang:date-and-time; | type yang:date-and-time; | |||
description "The date and time when the instance data set | description "The date and time when the instance data set | |||
was last modified. | was last modified. | |||
For instance data sets that are read from or produced | For instance data sets that are read from or produced | |||
by the YANG server or otherwise subject to frequent | by a server or otherwise subject to frequent | |||
updates or changes, timestamp SHOULD be present"; | updates or changes, timestamp SHOULD be present"; | |||
} | } | |||
anydata content-data { | anydata content-data { | |||
mandatory true; | ||||
description "Contains the real instance data. | description "Contains the real instance data. | |||
The data MUST conform to the relevant YANG Modules."; | The data MUST conform to the relevant YANG Modules specified | |||
either in the content-schema-spec or in some other | ||||
implementation specific manner."; | ||||
} | } | |||
} | } | |||
} | } | |||
} | <CODE ENDS> | |||
<CODE ENDS> | ||||
8. Security Considerations | 8. Security Considerations | |||
Depending on the nature of the instance data, instance data files MAY | Depending on the nature of the instance data, instance data files MAY | |||
need to be handled in a secure way. The same type of handling should | need to be handled in a secure way. The same type of handling should | |||
be applied, that would be needed for the result of a <get> operation | be applied, that would be needed for the result of a <get> operation | |||
returning the same data. | returning the same data. | |||
9. IANA Considerations | 9. IANA Considerations | |||
skipping to change at page 17, line 46 ¶ | skipping to change at page 18, line 35 ¶ | |||
name: ietf-yang-instance-data | name: ietf-yang-instance-data | |||
namespace: urn:ietf:params:xml:ns:yang:ietf-yang-instance-data | namespace: urn:ietf:params:xml:ns:yang:ietf-yang-instance-data | |||
prefix: yid | prefix: yid | |||
reference: RFC XXXX | reference: RFC XXXX | |||
10. Acknowledgments | 10. Acknowledgments | |||
For their valuable comments, discussions, and feedback, we wish to | For their valuable comments, discussions, and feedback, we wish to | |||
acknowledge Andy Bierman, Juergen Schoenwaelder, Rob Wilton, Joe | acknowledge Andy Bierman, Juergen Schoenwaelder, Rob Wilton, Joe | |||
Clark, Martin Bjorklund, Ladislav Lhotka, Qin Wu and other members of | Clarke, Kent Watsen Martin Bjorklund, Ladislav Lhotka, Qin Wu and | |||
the Netmod WG. | other members of the Netmod WG. | |||
11. References | 11. References | |||
11.1. Normative References | 11.1. Normative References | |||
[I-D.ietf-netconf-nmda-netconf] | ||||
Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | ||||
and R. Wilton, "NETCONF Extensions to Support the Network | ||||
Management Datastore Architecture", draft-ietf-netconf- | ||||
nmda-netconf-08 (work in progress), October 2018. | ||||
[I-D.ietf-netconf-nmda-restconf] | ||||
Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | ||||
and R. Wilton, "RESTCONF Extensions to Support the Network | ||||
Management Datastore Architecture", draft-ietf-netconf- | ||||
nmda-restconf-05 (work in progress), October 2018. | ||||
[I-D.ietf-netmod-yang-data-ext] | [I-D.ietf-netmod-yang-data-ext] | |||
Bierman, A., Bjorklund, M., and K. Watsen, "YANG Data | Bierman, A., Bjorklund, M., and K. Watsen, "YANG Data | |||
Extensions", draft-ietf-netmod-yang-data-ext-01 (work in | Structure Extensions", draft-ietf-netmod-yang-data-ext-03 | |||
progress), March 2018. | (work in progress), April 2019. | |||
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
<https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
the Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
DOI 10.17487/RFC6020, October 2010, | DOI 10.17487/RFC6020, October 2010, | |||
<https://www.rfc-editor.org/info/rfc6020>. | <https://www.rfc-editor.org/info/rfc6020>. | |||
skipping to change at page 19, line 9 ¶ | skipping to change at page 19, line 30 ¶ | |||
<https://www.rfc-editor.org/info/rfc7951>. | <https://www.rfc-editor.org/info/rfc7951>. | |||
[RFC7952] Lhotka, L., "Defining and Using Metadata with YANG", | [RFC7952] Lhotka, L., "Defining and Using Metadata with YANG", | |||
RFC 7952, DOI 10.17487/RFC7952, August 2016, | RFC 7952, DOI 10.17487/RFC7952, August 2016, | |||
<https://www.rfc-editor.org/info/rfc7952>. | <https://www.rfc-editor.org/info/rfc7952>. | |||
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | |||
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | |||
<https://www.rfc-editor.org/info/rfc8040>. | <https://www.rfc-editor.org/info/rfc8040>. | |||
[RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | ||||
BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | ||||
<https://www.rfc-editor.org/info/rfc8340>. | ||||
[RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | ||||
and R. Wilton, "Network Management Datastore Architecture | ||||
(NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018, | ||||
<https://www.rfc-editor.org/info/rfc8342>. | ||||
[RFC8526] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | ||||
and R. Wilton, "NETCONF Extensions to Support the Network | ||||
Management Datastore Architecture", RFC 8526, | ||||
DOI 10.17487/RFC8526, March 2019, | ||||
<https://www.rfc-editor.org/info/rfc8526>. | ||||
[RFC8527] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K., | ||||
and R. Wilton, "RESTCONF Extensions to Support the Network | ||||
Management Datastore Architecture", RFC 8527, | ||||
DOI 10.17487/RFC8527, March 2019, | ||||
<https://www.rfc-editor.org/info/rfc8527>. | ||||
11.2. Informative References | 11.2. Informative References | |||
[I-D.ietf-ccamp-alarm-module] | [I-D.ietf-ccamp-alarm-module] | |||
Vallin, S. and M. Bjorklund, "YANG Alarm Module", draft- | Vallin, S. and M. Bjorklund, "YANG Alarm Module", draft- | |||
ietf-ccamp-alarm-module-07 (work in progress), January | ietf-ccamp-alarm-module-09 (work in progress), April 2019. | |||
2019. | ||||
[I-D.ietf-netconf-rfc7895bis] | [I-D.ietf-netconf-rfc7895bis] | |||
Bierman, A., Bjorklund, M., Schoenwaelder, J., Watsen, K., | Bierman, A., Bjorklund, M., Schoenwaelder, J., Watsen, K., | |||
and R. Wilton, "YANG Library", draft-ietf-netconf- | and R. Wilton, "YANG Library", draft-ietf-netconf- | |||
rfc7895bis-07 (work in progress), October 2018. | rfc7895bis-07 (work in progress), October 2018. | |||
[I-D.ietf-netconf-yang-push] | [I-D.ietf-netconf-yang-push] | |||
Clemm, A., Voit, E., Prieto, A., Tripathy, A., Nilsen- | Clemm, A. and E. Voit, "Subscription to YANG Datastores", | |||
Nygaard, E., Bierman, A., and B. Lengyel, "Subscription to | draft-ietf-netconf-yang-push-25 (work in progress), May | |||
YANG Datastores", draft-ietf-netconf-yang-push-22 (work in | 2019. | |||
progress), February 2019. | ||||
[I-D.wu-netconf-restconf-factory-restore] | [I-D.wu-netconf-restconf-factory-restore] | |||
Wu, Q., Lengyel, B., and Y. Niu, "Factory default | Wu, Q., Lengyel, B., and Y. Niu, "Factory default | |||
Setting", draft-wu-netconf-restconf-factory-restore-03 | Setting", draft-wu-netconf-restconf-factory-restore-03 | |||
(work in progress), October 2018. | (work in progress), October 2018. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
Appendix A. Open Issues | Appendix A. Open Issues | |||
o Augmenting metadata must be possible. As of now it looks like | o - | |||
yang-data-ext will solve that. If not, define instance data as | ||||
regular YANG instead of yd:yang-data. | ||||
Appendix B. Changes between revisions | Appendix B. Changes between revisions | |||
v02 - v03 | ||||
o target renamed to "content-schema" and "content defining Yang | ||||
module(s)" | ||||
o Made name of instance data set optional | ||||
o Updated according to draft-ietf-netmod-tang-data-ext-02 | ||||
o Clarified that entity-tag and last-modified timestamp are encoded | ||||
as metadata. While htey contain useful data, the HTTP-header | ||||
based encoding from Restconf is not suitable. | ||||
o | ||||
v01 - v02 | v01 - v02 | |||
o Removed design time from terminology | o Removed design time from terminology | |||
o Defined the format of the content-data part by referencing various | o Defined the format of the content-data part by referencing various | |||
RFCs and drafts instead of the result of the get-data and get | RFCs and drafts instead of the result of the get-data and get | |||
operations. | operations. | |||
o Changed target-ptr to a choice | o Changed target-ptr to a choice | |||
o Inline target-ptr may include augmenting modules and alternatives | o Inline target-ptr may include augmenting modules and alternatives | |||
to ietf-yang-library | to ietf-yang-library | |||
o Moved list of target modules into a separate <target-modules> | o Moved list of target modules into a separate <target-modules> | |||
skipping to change at page 22, line 7 ¶ | skipping to change at page 23, line 13 ¶ | |||
o Moved metadata into ordinary leafs/leaf-lists | o Moved metadata into ordinary leafs/leaf-lists | |||
Appendix C. Detailed Use Cases - Non-Normative | Appendix C. Detailed Use Cases - Non-Normative | |||
C.1. Use Cases | C.1. Use Cases | |||
We present a number of use cases were YANG instance data is needed. | We present a number of use cases were YANG instance data is needed. | |||
C.1.1. Use Case 1: Early Documentation of Server Capabilities | C.1.1. Use Case 1: Early Documentation of Server Capabilities | |||
A YANG server has a number of server-capabilities that are defined in | A server has a number of server-capabilities that are defined in YANG | |||
YANG modules and can be retrieved from the server using protocols | modules and can be retrieved from the server using protocols like | |||
like NETCONF or RESTCONF. YANG server capabilities include | NETCONF or RESTCONF. server capabilities include | |||
o data defined in ietf-yang-library: YANG modules, submodules, | o data defined in ietf-yang-library: YANG modules, submodules, | |||
features, deviations, schema-mounts, datastores supported | features, deviations, schema-mounts, datastores supported | |||
([I-D.ietf-netconf-rfc7895bis]) | ([I-D.ietf-netconf-rfc7895bis]) | |||
o alarms supported ([I-D.ietf-ccamp-alarm-module]) | o alarms supported ([I-D.ietf-ccamp-alarm-module]) | |||
o data nodes, subtrees that support or do not support on-change | o data nodes, subtrees that support or do not support on-change | |||
notifications ([I-D.ietf-netconf-yang-push]) | notifications ([I-D.ietf-netconf-yang-push]) | |||
o netconf-capabilities in ietf-netconf-monitoring | o netconf-capabilities in ietf-netconf-monitoring | |||
While it is good practice to allow a client to query these | While it is good practice to allow a client to query these | |||
capabilities from the live YANG server, that is often not possible. | capabilities from the live server, that is often not possible. | |||
Often when a network node is released an associated NMS (network | Often when a network node is released an associated NMS (network | |||
management system) is also released with it. The NMS depends on the | management system) is also released with it. The NMS depends on the | |||
capabilities of the YANG server. During NMS implementation | capabilities of the server. During NMS implementation information | |||
information about server capabilities is needed. If the information | about server capabilities is needed. If the information is not | |||
is not available early in some off-line document, but only as | available early in some off-line document, but only as instance data | |||
instance data from the live network node, the NMS implementation will | from the live network node, the NMS implementation will be delayed, | |||
be delayed, because it has to wait for the network node to be ready. | because it has to wait for the network node to be ready. Also | |||
Also assuming that all NMS implementors will have a correctly | assuming that all NMS implementors will have a correctly configured | |||
configured network node available to retrieve data from, is a very | network node available to retrieve data from, is a very expensive | |||
expensive proposition. (An NMS may handle dozens of node types.) | proposition. (An NMS may handle dozens of node types.) | |||
Network operators often build their own home-grown NMS systems that | Network operators often build their own home-grown NMS systems that | |||
needs to be integrated with a vendor's network node. The operator | needs to be integrated with a vendor's network node. The operator | |||
needs to know the network node's server capabilities in order to do | needs to know the network node's server capabilities in order to do | |||
this. Moreover the network operator's decision to buy a vendor's | this. Moreover the network operator's decision to buy a vendor's | |||
product may even be influenced by the network node's OAM feature set | product may even be influenced by the network node's OAM feature set | |||
documented as the Yang server's capabilities. | documented as the Server's capabilities. | |||
Beside NMS implementors, system integrators and many others also need | Beside NMS implementors, system integrators and many others also need | |||
the same information early. Examples could be model driven testing, | the same information early. Examples could be model driven testing, | |||
generating documentation, etc. | generating documentation, etc. | |||
Most server-capabilities are relatively stable and change only during | Most server-capabilities are relatively stable and change only during | |||
upgrade or due to licensing or addition or removal of HW. They are | upgrade or due to licensing or addition or removal of HW. They are | |||
usually defined by a vendor at design time, before the product is | usually defined by a vendor at design time, before the product is | |||
released. It feasible and advantageous to define/document them early | released. It feasible and advantageous to define/document them early | |||
e.g. in a YANG instance data File. | e.g. in a YANG instance data File. | |||
skipping to change at page 23, line 31 ¶ | skipping to change at page 24, line 37 ¶ | |||
Defining Access control data is a complex task. To help the device | Defining Access control data is a complex task. To help the device | |||
vendor pre-defines a set of default groups (/nacm:nacm/groups) and | vendor pre-defines a set of default groups (/nacm:nacm/groups) and | |||
rules for these groups to access specific parts of common models | rules for these groups to access specific parts of common models | |||
(/nacm:nacm/rule-list/rule). | (/nacm:nacm/rule-list/rule). | |||
YANG instance data files are used to document and/or preload the | YANG instance data files are used to document and/or preload the | |||
default configuration. | default configuration. | |||
C.1.3. Use Case 3: Documenting Factory Default Settings | C.1.3. Use Case 3: Documenting Factory Default Settings | |||
Nearly every YANG server has a factory default configuration. If the | Nearly every server has a factory default configuration. If the | |||
system is really badly misconfigured or if the current configuration | system is really badly misconfigured or if the current configuration | |||
is to be abandoned the system can be reset to this default. | is to be abandoned the system can be reset to this default. | |||
In Netconf the <delete-config> operation can already be used to reset | In Netconf the <delete-config> operation can already be used to reset | |||
the startup datastore. There are ongoing efforts to introduce a new, | the startup datastore. There are ongoing efforts to introduce a new, | |||
more generic reset-datastore operation for the same purpose | more generic reset-datastore operation for the same purpose | |||
[I-D.wu-netconf-restconf-factory-restore] | [I-D.wu-netconf-restconf-factory-restore] | |||
The operator currently has no way to know what the default | The operator currently has no way to know what the default | |||
configuration actually contains. YANG instance data can be used to | configuration actually contains. YANG instance data can be used to | |||
End of changes. 120 change blocks. | ||||
331 lines changed or deleted | 391 lines changed or added | |||
This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |