Netmod B. Lengyel Internet-Draft Ericsson Intended status: Standards Track January 24, 2017 Expires: July 28, 2017 Schema Annotation for YANG Models draft-lengyel-netmod-schema-annotation-00 Abstract In some cases there is a need to qualify other YANG models or some schema nodes in other models with additional properties (a.k.a. annotations). This document defines a method to add annotations in the form of YANG extension statements to YANG modules. The annotations are defined in separate files without modifying the text of the original YANG module. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on July 28, 2017. Copyright Notice Copyright (c) 2017 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of Lengyel Expires July 28, 2017 [Page 1] Internet-Draft Yang Schema Annotation January 2017 the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1. Use Case - Yangpush . . . . . . . . . . . . . . . . . . . 3 1.2. Use Case - Vendor Annotation of a Standard Model . . . . 3 2. Possible solutions . . . . . . . . . . . . . . . . . . . . . 3 2.1. Instance Data based Solution . . . . . . . . . . . . . . 4 2.2. Extension based Solution . . . . . . . . . . . . . . . . 5 2.3. Deviation based Solution . . . . . . . . . . . . . . . . 6 2.4. Pros and Cons . . . . . . . . . . . . . . . . . . . . . . 6 3. How is this different from RFC7952 "Defining and Using Metadata with YANG?" . . . . . . . . . . . . . . . . . . . . 7 4. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 7 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 8 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 7. Security Considerations . . . . . . . . . . . . . . . . . . . 8 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 8 8.1. Normative References . . . . . . . . . . . . . . . . . . 8 8.2. Informative References . . . . . . . . . . . . . . . . . 8 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 9 1. Introduction The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. In some cases there is a need to qualify other YANG models or some schema nodes in other models with additional properties (a.k.a. annotations). This document defines a method to add annotations in the form of YANG [RFC7950] extension statements to YANG modules. The annotations are defined in separate files without modifying the text of the original YANG module. Annotations are often specific to the model and/or implementation so they are possible to define in design time. System integrators, people defining configuration ahead of time and others need this information (without reading any data from a live node). Often the basic YANG model and the extra properties are defined separately, possibly by different organizations. Vendors may qualify standard models with extra properties, or even a vendor defined base model, may need different annotations depending on the specific implementation. Vendors are reluctant to modify the standard models (messing up the original file, too many variants of the base model), Lengyel Expires July 28, 2017 [Page 2] Internet-Draft Yang Schema Annotation January 2017 so it must be possible to define such annotations in a separate file/ module. 1.1. Use Case - Yangpush In YangPush [I-D.ietf-netconf-yang-push] we need to specify for data nodes whether the Yang server supports sending on-change data change notifications for the specific data node or not. Some servers may not support such notifications for specific data nodes because they are meaningless or would result in too many notifications or the server might simply not have implemented them. The support for on- change notifications will be defined using a YANG extension statement. In some cases there is a need to specify the minimum acceptable interval for a periodic subscription for a specific data node or schema branch. 1.2. Use Case - Vendor Annotation of a Standard Model Vendors sometimes want to add extra information to the standard YANG models. Examples include instructions for automatic code generation or formal description of side-effects of manipulating a data node. It would be good for standard SW tools to be at least aware of the vendor extensions, allowing vendor specific plugins to handle these extensions. By providing a standard mechanism to annotate modules generic SW tools might provide somevisibility to vendor specific extensions e.g. providing APIs to fetch the extension, displaying the extension as is. 2. Possible solutions All solution alternatives use an Absolute schema node identifier to identify which part of the YANG schema is annotated. Absolute schema node identifier is defined in [RFC7950]. All alternatives will have the same effect as if the YANG extension statement in the annotation was placed in the base model itself. The process of annotation will consist of the following steps. A base model will be defined. E.g. IETF defined a standard base model like ietf-system. A vendor will define extra data like instance data or annotation/deviation YANG modules (e.g. ericsson-system-ann- router1230-release3.yang). Annotation information MAY be defined once per vendor or for every product/product release separately. Annotation information will be available both in design-time as a document and in run-time. Lengyel Expires July 28, 2017 [Page 3] Internet-Draft Yang Schema Annotation January 2017 2.1. Instance Data based Solution A new YANG module containing information about schema-annotations is defined and a standard way of loading initial instance data in to that module is specified. (Note the module is only an example to demonstrate the concept. If the solution is selected, further work on the module is needed.) module ietf-schema-annotations { list schema-annotations { key target; config false; leaf target { type schema-node-id; description "identifies the node in the schema tree that is annotated."; } list annotation { key statement; min-elements 1; leaf statement { type yang:yang-identifier; description "The statement to be conceptually added to the target schema node."; } leaf argument { type string; description "Argument to the annotation statement if any."; } } } } A standard format to specify initial instance data for a YANG module in a file is defined. The format SHALL be the same as the XML content of the operation inside the element. The format was chosen as that will allow specifying the operation attribute. Both the merge and the replace values might be needed and/or useful. If the instance data represents configuration data it SHALL be loaded by the YANG server at startup into the running datastore of the server before any management interface like CLI, Netconf, Restconf is started. Note this MAY result in overwriting data previously stored in the datastore. If the instance data represents state data it SHALL be loaded by the YANG server at startup into the operation- Lengyel Expires July 28, 2017 [Page 4] Internet-Draft Yang Schema Annotation January 2017 state datastore before any management interface like CLI, Netconf, Restconf is started. Example: /sys:system/sys:system-time yp:notifiable-on-change false Instance data for the module ietf-schema-annotations SHOULD become a design time artifact provided by the model designer just as the YANG modules themselves. The XML instance data defining the annotations would be available in design-time as an XML document and in run-time using the operation. 2.2. Extension based Solution A new YANG extension "schema-annotation" is defined, that allows adding statement to another module. Lengyel Expires July 28, 2017 [Page 5] Internet-Draft Yang Schema Annotation January 2017 extension schema-annotation { description "Annotates an existing statement with a YANG extension statement defined in some module. Useful for adding extension statements to a module without touching the module source. Substatements to this statements are conceptually added to the target statement. The argument is a 'absolute schema node identifier'. It identifies a target node in the schema tree to annotate with new statements."; argument target; } Example: sann:schema-annotation /sys:system/sys:system-time { yp:notifiable-on-change false; } The annotating module would be available in design-time as a document and in run-time using the operation. 2.3. Deviation based Solution Deviations already allow adding/modifying model information for another module. If IETF would allow the "deviate" statement to handle YANG extension statements this would allow us to add/remove/ modify annotations. 2.4. Pros and Cons The Instance Data based Solution is the proposed solution. o It could be usable for other purposes as well including but not restricted to defining default security rules for access control [RFC6536] or defining yang-schema-mounts [I-D.ietf-netmod-schema-mount] in design time. o It is more simple to read in runtime for management systems (MS). o If annotation data was ever changed the MS could get notifications about that. Lengyel Expires July 28, 2017 [Page 6] Internet-Draft Yang Schema Annotation January 2017 o It could easily be linked with references to the ietf-yang-library o It introduces a bigger new concept (instance data) although a number of vendors are already using it. The Extension Based Solution works. We do not recommend using the Deviation based Solution as deviations are for documenting unwelcome implementation limitations and are highly discouraged. Adding our extra information is not just acceptable, it is the recommended thing to do. Extending the allowed substatements for the deviate statement can also be considered changing [RFC7950]. 3. How is this different from RFC7952 "Defining and Using Metadata with YANG?" [RFC7952] defines metadata on the instance data level, here we need metadata on the model/schema level. [RFC7952] metadata is transferred in Netconf/Restconf RPCs, here we usually do not need that. [RFC7952] metadata is only available in runtime, here we need it to be available in design time. 4. Open Issues o Set of statements that can be the target. The initial proposal is to allow the same set of schema nodes as "deviation" statement. Is that OK? o Set of statements that can be added. The initial proposal allows only YANG extension statements. Do we want to allow anything else like additional "must" statements or restrictions? Probably not as that would allow redefining the base model, which we don't want. We only want to add information to it. o Exact data model for module ietf-schema-annotations. o Do we need replace and delete operations beside the add? The initial proposal only allows adding annotations. Do we need to be able to replace and remove them as well? Lengyel Expires July 28, 2017 [Page 7] Internet-Draft Yang Schema Annotation January 2017 5. Acknowledgements The author wishes to thank Eric Voit, Einar Nilsen-Nygaard and Alexander Clemm for their helpful comments contributing to this draft. 6. IANA Considerations No IANA considerations 7. Security Considerations This document introduces a mechanism for attaching metadata defined in the form of YANG extensions to the YANG schema of another YANG module. By itself, this mechanism represents no security threat. Security implications of a particular extension and attaching it to a particular YANG module shall be considered in the document defining/ attaching the extension. 8. References 8.1. Normative References [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, . [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration Protocol (NETCONF) Access Control Model", RFC 6536, DOI 10.17487/RFC6536, March 2012, . [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", RFC 7950, DOI 10.17487/RFC7950, August 2016, . [RFC7952] Lhotka, L., "Defining and Using Metadata with YANG", RFC 7952, DOI 10.17487/RFC7952, August 2016, . 8.2. Informative References [I-D.ietf-netconf-yang-push] Clemm, A., Voit, E., Prieto, A., Tripathy, A., Nilsen- Nygaard, E., Bierman, A., and B. Lengyel, "Subscribing to YANG datastore push updates", draft-ietf-netconf-yang- push-04 (work in progress), October 2016. Lengyel Expires July 28, 2017 [Page 8] Internet-Draft Yang Schema Annotation January 2017 [I-D.ietf-netmod-schema-mount] Bjorklund, M. and L. Lhotka, "YANG Schema Mount", draft- ietf-netmod-schema-mount-03 (work in progress), October 2016. Author's Address Balazs Lengyel Ericsson Email: balazs.lengyel@ericsson.com Lengyel Expires July 28, 2017 [Page 9]