On Mon, Aug 28, 2017 at 3:11 AM, Juergen Schoenwaelder <
[email protected]> wrote:
> On Sun, Aug 27, 2017 at 06:08:28PM -0700, Andy Bierman wrote:
> > Hi,
> >
> > Here is the proposed rewrite of 4.23.
> > I changed a few details in the temporary non-NMDA procedure.
> > This module cannot duplicate the NMDA module as read-only.
> > Only the top-level config=false nodes that would have been exposed
> pre-NMDA
> > need to be present.
>
> Thanks for taking the time to produce detailed text. Some comments
> inline.
>
> > 4.23. Operational State
> >
> > The management of YANG operational state has been refined over time.
>
> I think you mean:
>
> The modeling of operational state with YANG has been refied over time.
>
>
fixed
> > At first, only data that has a "config" statement value of "false"
> > was considered to be operational state. This data was not considered
> > to be part of any datastore, which made YANG XPath definition much
> > more complicated.
> >
> > YANG operational state is now modeled according to new NMDA, and is
>
> I think we do not have the term 'YANG operational state'. Hence:
>
> Operational state is now modeled using YANG according to ...
>
>
fixed
> > now conceptually contained in the operational datastore, which also
> > includes the operational values of configuration data. There is no
> > longer any need to duplicate data structures to provide separate
> > configuration and operational data sections.
> >
> > This section describes some data modeling issues related to
> > operational state, and guidelines for transitioning YANG data model
> > design to be NMDA-compatible.
> >
> > 4.23.1. Combining Operational State and Configuration Data
> >
> > If possible, operational state SHOULD be combined with its associated
> > configuration data. This prevents duplication of key leafs and
> > ancestor nodes. It also prevents race conditions for retrieval of
> > dynamic entries, and allows configuration and operational state to be
> > retrieved together with minimal message overhead.
> >
> > Not NMDA-Compliant:
> >
> > container foo {
> > ...
> > }
> >
> > container foo-state {
> > config false;
> > ...
> > }
> >
> > NMDA-Compliant:
> >
> > container foo {
> > ...
> > // contains config=true and config=false nodes that have
> > // no corresponding config=true object (e.g., counters)
> > }
> >
> > 4.23.2. Representing Operational Values of Configuration Data
> >
> > If possible the same data type SHOULD be used to represent the
> > configured value and the operational value, for a given leaf or leaf-
> > list object.
> >
> > Sometimes the configured value set is different than the operational
> > value set for that object. For example, the "admin-state" and
> > "oper-state" leafs in [RFC7223]. In this case a separate object MAY
> > be used to represent the configured and operational values.
> >
> > Sometimes the list keys are not identical for configuration data and
> > the corresponding operational state. In this case separate lists MAY
> > be used to represent the configured and operational values.
> >
> > If it is not possible to combine configuration and operational state,
> > then the keys used to represent list entries SHOULD be the same type.
> > The "leafref" data type SHOULD be used in operational state for key
> > leafs that have corresponding configuration instances. The
> > "require-instance" statement MAY be set to "false" (in YANG 1.1
> > modules only) to indicate instances are allowed in the operational
> > state that do not exist in the associated configuration data.
> >
> > If all the data model properties are aligned between configuration
> > data and operational state, then it can be useful to define the
> > configuration parameters within a grouping, and then replicate that
> > grouping within the operational state portion of the data model.
> >
> > grouping parms {
> > // do not use config-stmt in any of the nodes
> > // placed in this grouping
> > }
> >
> > container bar { // bar config can exist without bar-state
> > config true;
> > uses parms;
> > }
> >
> > container bar-state { // bar-state can exist without bar
> > status deprecated;
> > config false;
> > uses parms;
> > }
> >
> > The need to replicate objects or define different operational state
> > objects depends on the data model. It is not possible to define one
> > approach that will be optimal for all data models.
>
> Well, having bar (config true) and bar-state (config false) is what
> NMDA tries to avoid. Even in NMDA, bar can exist in <operational>
> without having <bar> in say <running>. (Example, no IP addresses
> statically configured but IP addresses learned from DHCP or created by
> the system.) I am not sure the discussion starting with "If all the
> data model properties" is needed.
>
>
removed "If all the data" .. through groupings example
> > Designers SHOULD describe and justify any NMDA exceptions in detail,
> > such as the use of separate subtrees and/or separate leafs. The
> > "description" statements for both the configuration and the
> > operational state SHOULD be used for this purpose.
> >
> > 4.23.3. NMDA Transition Guidelines
> >
> > YANG modules SHOULD be designed assuming they will be used on servers
> > supporting the operational datastore. With this in mind, YANG
>
> It is actually called the 'operational state datastore'.
>
Except that we never use that term.
It is always called operational datastore when we talk about it in meetings.
Hence, the new NMDA terms section:
** NMDA Terms
The following terms are defined in the
Network Management Datastore Architecture
(NMDA) ^I-D.ietf-netmod-revised-datastores^.
and are not redefined here:
- configuration
- conventional configuration datastore (also called conventional datastore)
- datastore
- operational state
- operational state datastore (also called operational datastore)
IMO these alternates should be put in the RD draft since they reflect the
terms we actually use.
> > modules SHOULD define config "false" wherever they make sense to the
> > data model. Config "false" nodes SHOULD NOT be defined to provide
> > the operational value for configuration nodes, except when the value
> > space of a configured and operational values may differ, in which
> > case a distinct config "false" node SHOULD be defined to hold the
> > operational value for the configured node.
>
> Perhaps the text needs to say somewhere very clearly that the
> operationally used values of configuration objects are part of the
> operational state datastore and hence config false nodes SHOULD NOT be
> defined to provide the operational value for configuration nodes...
>
I think the text from Lou is OK.
>
> > The following guidelines are meant to help modelers develop YANG
> > models that will maximize the utility of the model with both current
> > and new implementations.
>
> Do we generally talk about YANG modules or YANG models in the guidelines
> document? Are these used as synonyms? Just wondering...
>
changed models to modules. -- here and several other places
>
> > New models and models that are not concerned with the operational
> > state of configuration information SHOULD immediately be structured
> > to be NMDA-compatible, as described in Section 4.23.1.
> >
> > The remaining are options that MAY be followed during the time that
> > NMDA mechanisms are being defined.
> >
> > (a) Models that require immediate support for the NMDA "origin" meta
> > data, such as "in use" and "system created" information, SHOULD be
> > structured for NMDA.
>
> Not sure I parsed this correctly. What does 'in use' and 'system
> created' information refer to? I think in general models should follow
> NMDA (once it went through the approval process), no?
>
This is from Lou. I just pasted in his text here, but added the origin
metadata part.
See new fix below.
>
> > A non-NMDA version of these models SHOULD
> > exist, either an existing model or a model created either by hand or
> > with suitable tools that mirror the current modeling strategies.
> > Both the NMDA and the non-NMDA modules SHOULD be published in the
> > same document, with NMDA modules in the document main body and the
> > non-NMDA modules in a non-normative appendix. The use of the non-
> > NMDA model will allow temporary bridging of the time period until
> > NMDA implementations are available.
>
> I do not think that it is always a SHOULD to have a non-NMDA model but
> then I did not understand the condition of (a). RFC 8194 for instance
> is NMDA compatible and this is good enough. If an implementation needs
> to expose applied configuration, it will have to implement NMDA.
>
Please do implement it -- especially the client-side, which got much more
complex
because of NMDA.
I think the first sentence refers to the temporary non-NMDA module.
NEW:
(a) Modules that require immediate support for the NMDA features
SHOULD be structured for NMDA. A temporary non-NMDA version of these
models SHOULD exist, either an
existing model or a model created either by hand or with
suitable tools that mirror the current modeling strategies.
> > (b) For published models, the model should be republished with an
> > NMDA-compatible structure, deprecating non-NMDA constructs. For
> > example, the "ietf-interfaces" model in [RFC7223] will be
> > restructured as an NMDA-compatible model. The "/interfaces-state"
> > hierarchy will be marked "status deprecated". Models that mark their
> > "/foo-state" hierarchy with "status deprecated" will allow NMDA-
> > capable implementations to avoid the cost of duplicating the state
> > nodes, while enabling non-NMDA-capable implementations to utilize
> > them for access to the operational values.
> >
> > (c) For models that augment models which have not been structured
> > with the NMDA, the modeler will have to consider the structure of the
> > base model and the guidelines listed above. Where possible, such
> > models should move to new revisions of the base model that are NMDA-
> > compatible. When that is not possible, augmenting "state" containers
> > SHOULD be avoided, with the expectation that the base model will be
> > re-released with the state containers marked as deprecated. It is
> > RECOMMENDED to augment only the "/foo" hierarchy of the base model.
> > Where this recommendation cannot be followed, then any new "state"
> > elements SHOULD be included in their own module.
> >
> > 4.23.3.1. Temporary non-NMDA Modules
> >
> > A temporary non-NMDA module allows a non-NMDA aware client to access
> > operational state from an NMDA-compliant server. It contains the
> > top-level config=false data nodes that would have been defined in a
> > legacy YANG module (before NMDA).
> >
> > A server that needs to support both NMDA and non-NMDA clients can
> > advertise both the new NMDA module and the temporary non-NMDA module.
> > A non-NMDA client can use separate "foo" and "foo-state" subtrees,
> > except the "foo-state" subtree is located in a different (temporary)
> > module. The NMDA module can be used by a non-NMDA client to access
> > the conventional datastores, and the deprecated <get> operation to
> > access nested config=false data nodes.
> >
> > To create the temporary non-NMDA model from an NMDA model, the
> > following steps can be taken:
> >
> > o Change the module name by appending "-state" to the original
> > module name
> >
> > o Change the namespace by appending "-state" to the original
> > namespace value
> >
> > o Change the prefix by appending "-s" to the original prefix value
> >
> > o Add an import to the original module (e.g., for typedef
> > definitions)
> >
> > o Retain or create only the top-level nodes that have a "config"
> > statement value "false". These subtrees represent config=false
> > data nodes that were combined into the configuration subtree, and
> > therefore not available to non-NMDA aware clients. Set the
> > "status" statement to "deprecated" for each new node.
> >
> > o The module description SHOULD clearly identify the module as a
> > temporary non-NMDA module
> >
> > 4.23.3.2. NMDA Module Examples
> >
> > Example: Create a New Module
> >
> > Create an NMDA-compliant module, using combined configuration and
> > state subtrees, whenever possible.
> >
> > module example-foo {
> > namespace "urn:example.com:params:xml:ns:yang:example-foo";
> > prefix "foo-";
> >
> > container foo {
> > // configuration data child nodes
> > // operational value in operational datastore only
> > // may contain config=false nodes as needed
> > }
> > }
>
> Why would the prefix be "foo-" and not just "foo"?
>
> > Example: Convert an old Non-NMDA Module
> >
> > Do not remove non-complaint objects from existing modules. Instead,
>
> compliant
>
>
fixed
> > change the status to "deprecated". At some point, usually after 1
> > year, the status MAY be changed to "obsolete".
> >
> > Old Module:
> >
> > module example-foo {
> > namespace "urn:example.com:params:xml:ns:yang:example-foo";
> > prefix "foo";
> >
> > container foo {
> > // configuration data child nodes
> > }
> >
> > container foo-state {
> > config false;
> > // operational state child nodes
> > }
> > }
> >
> > Converted NMDA Module:
> >
> > module example-foo {
> > namespace "urn:example.com:params:xml:ns:yang:example-foo";
> > prefix "foo-";
>
> "foo-" vs "foo"
>
fixed
>
> > container foo {
> > // configuration data child nodes
> > // operational value in operational datastore only
> > // may contain config=false nodes as needed
> > // will contain any data nodes from old foo-state
> > }
> >
> > // keep original foo-state but change status to deprecated
> > container foo-state {
> > config false;
> > status deprecated;
> > // operational state child nodes
> > }
> > }
> >
> > Example: Create a Temporary NMDA Module:
> >
> > Create a new module that contains the top-level operational state
> > data nodes that would have been available before they were combined
> > with configuration data nodes (to be NMDA compliant).
> >
> > module example-foo-state {
> > namespace "urn:example.com:params:xml:ns:yang:example-foo-state";
> > prefix "foo-s";
> >
> > // import new or converted module; not used in this example
> > import example-foo { prefix foo; }
> >
> > container foo-state {
> > config false;
> > status deprecated;
> > // operational state child nodes
> > }
> > }
>
> Perhaps put the examples in separate sections 4.23.3.2, 4.23.3.3,
> 4.23.3.4 so that they are more clearly separated?
>
>
OK
> >
> > Andy
> >
>
Andy
> >
> >
> > On Fri, Aug 25, 2017 at 12:31 PM, Andy Bierman <[email protected]>
> wrote:
> >
> > >
> > >
> > > On Fri, Aug 25, 2017 at 12:11 PM, Kent Watsen <[email protected]>
> wrote:
> > >
> > >>
> > >>
> > >>
> > >>
> > >> On 8/25/17, 2:21 PM, "Andy Bierman" <[email protected]> wrote:
> > >>
> > >>
> > >>
> > >> > Obviously NMDA cannot be used for objects where the configuration
> value
> > >> set
> > >>
> > >> > and the operstate value set differ, such as with the interface
> > >> admin-status/oper-status.
> > >>
> > >> > Do you want a sentence added that says to use config false leafs as
> > >> needed within the
> > >>
> > >> > configuration entry? A sentence that says operational data is
> embedded
> > >> in the
> > >>
> > >> > configuration entry?
> > >>
> > >>
> > >>
> > >> Yes, and any other general guidelines around using config false. The
> > >> text I posted
> > >>
> > >> when starting this thread had some of that. The original RFC6087 text
> > >> might have
> > >>
> > >> some more.
> > >>
> > >>
> > >>
> > >
> > > OK -- I will work on adding in text from -12, your text, and Lou's
> text.
> > >
> > >
> > >>
> > >> > 6087bis was supposed to be a minor update, not a living draft that
> > >> doubles
> > >>
> > >> > as a YANG tutorial and ongoing issues list.
> > >>
> > >>
> > >>
> > >> ;)
> > >>
> > >>
> > >>
> > >> As much as I like RFCs, I think this content would be better served
> by a
> > >> Wiki. If
> > >>
> > >> we were starting for scratch (no RFC6087), then that might make sense
> > >> but, given
> > >>
> > >> where we are, not so much. So, I guess we're committed to frequent
> > >> updates on this
> > >>
> > >> document until YANG settles down.
> > >>
> > >>
> > >>
> > >
> > > It is better to have as few moving targets (and normative references)
> as
> > > possible.
> > > YANG modules in an RFC have to conform to a specific version of the
> YANG
> > > guidelines.
> > >
> > >
> > >>
> > >>
> > >> Kent // contributor
> > >>
> > >>
> > >>
> > >>
> > >>
> > >
> > > Andy
> > >
> > >
>
> --
> Juergen Schoenwaelder Jacobs University Bremen gGmbH
> Phone: +49 421 200 3587 Campus Ring 1 | 28759 Bremen | Germany
> Fax: +49 421 200 3103 <http://www.jacobs-university.de/>
>
_______________________________________________
netmod mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/netmod