Re: [netmod] rfc6087bis S4.23 replacement text

Andy Bierman <andy@yumaworks.com> Mon, 28 August 2017 16:24 UTC

Return-Path: <andy@yumaworks.com>
X-Original-To: netmod@ietfa.amsl.com
Delivered-To: netmod@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 5A91F1321B8 for <netmod@ietfa.amsl.com>; Mon, 28 Aug 2017 09:24:25 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=yumaworks-com.20150623.gappssmtp.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id My6YES9IpBfc for <netmod@ietfa.amsl.com>; Mon, 28 Aug 2017 09:24:21 -0700 (PDT)
Received: from mail-wr0-x22a.google.com (mail-wr0-x22a.google.com [IPv6:2a00:1450:400c:c0c::22a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 4EB001321B6 for <netmod@ietf.org>; Mon, 28 Aug 2017 09:24:20 -0700 (PDT)
Received: by mail-wr0-x22a.google.com with SMTP id j29so2231420wre.2 for <netmod@ietf.org>; Mon, 28 Aug 2017 09:24:20 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yumaworks-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=jLXU+pYAp568/5HI9/DA1ncRhXSHU/huVZubjvURskk=; b=itKXdEjGPR1YsGZFMTESAHCnVjlGnO3eVOi0bIvI8ysyMIwj4ctdUrXFcwBL4dL7qT JuOzl7k4QXA24GEnWmNEjj5G4Fug9Nv+mG9U4hi91w4VW73kiL4UoFab/BnRFnmhM16F 31Kufjzyjq+uGIgE7OuIkP5aLQyatXmBB+Yl33WjFT7l6+El8fmYQX0lNajF4zZZGV1P O9Tnvio8L7NtHMO+zPke1dilL7bn50iv79+ZMLxAlURneYXQwmxpcd/aGRKjhnUbrF54 9S6ACCT3hvxRSAkoofhObELxyixY+ezdyhV53yRl4WmV0vMGGVXJJA/0inbbu5qVT2Ck SYFA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=jLXU+pYAp568/5HI9/DA1ncRhXSHU/huVZubjvURskk=; b=FIcYEOduN+0latJg96Zb1Pk1dXjThx9U/TMzL8k1QNb5PRkXHcCFmkolBBkF1jHzN3 092w8HayH35Rv5yPPkMD5X6gZ/9/JqdxnWeT0OR8zNGSqBRZgVAODLu48NwJnOIEc3rA n/QeRVF9UFKdCywx532R8V4hwtyelPl4PBBgA1ookthV2mmwBTtFFFrmBWYbm1seI0sB AvqPc2iFdeeAETdme/uWrLozpCnhbMfirC1aq4mT5ig2Tbs+YZddCh4lStdd+Hz6nSg7 eHdKh4lFAWe47z0jBNNocUkxfWkNu1GDQnGWnzestzpE+gHW4YEgDC3edb1xVunRHG6N 9deA==
X-Gm-Message-State: AHYfb5geyROn4Gc7uJMs7xdJU9QrhaANnu9nBs2d1FL7j+6uJIhqWm3V GZukBJmUbS7WdqaRzSwSQpQaoHRR9vfrN2U=
X-Received: by 10.223.142.237 with SMTP id q100mr862878wrb.228.1503937458544; Mon, 28 Aug 2017 09:24:18 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.223.164.221 with HTTP; Mon, 28 Aug 2017 09:24:17 -0700 (PDT)
In-Reply-To: <20170828101111.bedfkeoxw3xcj4ex@elstar.local>
References: <4425D564-7AD1-40B7-853F-FA9328E10F2D@juniper.net> <9596582d-17cf-e851-f88f-fd7a79d88e4f@labn.net> <20170823061709.prezywubi7b32w7i@elstar.local> <FF29E43D-CC6F-4B8F-BE2D-5A87E5967714@juniper.net> <CABCOCHRQ+B6h1sZmOff9+fWSaoPgJ7ZBF1wPcG_C7zrH7=zZ0g@mail.gmail.com> <AD1D598E-92EF-49F2-AE2A-048EE9746E12@juniper.net> <CABCOCHSBvr9rtFDRFZjZdVFbQbB7nB3dz5Xu7C4ctwA=hR+auA@mail.gmail.com> <CABCOCHTw-6YFy5jQ3dT5bymTeeR69vFz-jtVdrGW=HBr=tJyiQ@mail.gmail.com> <20170828101111.bedfkeoxw3xcj4ex@elstar.local>
From: Andy Bierman <andy@yumaworks.com>
Date: Mon, 28 Aug 2017 09:24:17 -0700
Message-ID: <CABCOCHSypnnHUqcjGPa5v3Q=yQhnV2Ks9urutBEjnaaL8KYodg@mail.gmail.com>
To: Juergen Schoenwaelder <j.schoenwaelder@jacobs-university.de>, Andy Bierman <andy@yumaworks.com>, Kent Watsen <kwatsen@juniper.net>, Lou Berger <lberger@labn.net>, "netmod@ietf.org" <netmod@ietf.org>
Content-Type: multipart/alternative; boundary="f403045f51a2fb333c0557d2b943"
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/Sb-LPDHt66vjPSYQqvqvwQIeCvE>
Subject: Re: [netmod] rfc6087bis S4.23 replacement text
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: NETMOD WG list <netmod.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netmod>, <mailto:netmod-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netmod/>
List-Post: <mailto:netmod@ietf.org>
List-Help: <mailto:netmod-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netmod>, <mailto:netmod-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Aug 2017 16:24:25 -0000

On Mon, Aug 28, 2017 at 3:11 AM, Juergen Schoenwaelder <
j.schoenwaelder@jacobs-university.de> 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 <andy@yumaworks.com>
> wrote:
> >
> > >
> > >
> > > On Fri, Aug 25, 2017 at 12:11 PM, Kent Watsen <kwatsen@juniper.net>
> wrote:
> > >
> > >>
> > >>
> > >>
> > >>
> > >> On 8/25/17, 2:21 PM, "Andy Bierman" <andy@yumaworks.com> 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/>
>