Re: [netmod] [Netconf] Alternative YANG library structure for 7895bis

Robert Wilton <rwilton@cisco.com> Thu, 16 November 2017 00:53 UTC

Return-Path: <rwilton@cisco.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 B66CD120227 for <netmod@ietfa.amsl.com>; Wed, 15 Nov 2017 16:53:25 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -14.52
X-Spam-Level:
X-Spam-Status: No, score=-14.52 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001, USER_IN_DEF_DKIM_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=cisco.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 2ArlnXVUyRqz for <netmod@ietfa.amsl.com>; Wed, 15 Nov 2017 16:53:22 -0800 (PST)
Received: from alln-iport-1.cisco.com (alln-iport-1.cisco.com [173.37.142.88]) (using TLSv1.2 with cipher DHE-RSA-SEED-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 619071293DF for <netmod@ietf.org>; Wed, 15 Nov 2017 16:53:22 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=39366; q=dns/txt; s=iport; t=1510793602; x=1512003202; h=subject:to:cc:references:from:message-id:date: mime-version:in-reply-to; bh=4OIEI8Yhcx7CXxUzHZWVEwDIzmVe0zFnutL2RZeyAY4=; b=Z/k/sY5AxVTGl2CAbjTopBZLocfY+v72PRSVIxGd4EuMXP8uaY37LPAm 0ku7uKdnClUVSQkQpPkBM9Le1KuMSF5FcE6kzD4IKtFr2Kt2l5YXOKSSn CvxloIGOQXuYpP/2thr6Znl8gkDhjweFBfhGivcEOWwoOu8QsLtiUe92g k=;
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: A0CdAAD44Axa/5RdJa1eGQEBAQEBAQEBAQEBAQcBAQEBAYJEcmRuJ4N/ih+PIIF9ll0QgX4DChgBCoRJTwKFDj8YAQEBAQEBAQEBayiFHgEBAQMBAQEYCQRHCwULCQIYIAEGAwICJx8RBg0GAgEBF4oBCBCLfJ1ogW06JoppAQEBAQEBAQEBAQEBAQEBAQEBAQEBGAWDNIIHgVWBaSmBdIENhGUBEgEJTIJfgmMFijQHhzaBE4YaiRmVBoIVgXuED4Ngh0WOOod0gTkfOEJBcTQhCB0VSYJkgiOCSTQ2iGWCNQEBAQ
X-IronPort-AV: E=Sophos; i="5.44,401,1505779200"; d="scan'208,217"; a="32045323"
Received: from rcdn-core-12.cisco.com ([173.37.93.148]) by alln-iport-1.cisco.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Nov 2017 00:53:21 +0000
Received: from [10.24.103.1] ([10.24.103.1]) by rcdn-core-12.cisco.com (8.14.5/8.14.5) with ESMTP id vAG0rJ4R015836; Thu, 16 Nov 2017 00:53:19 GMT
To: Andy Bierman <andy@yumaworks.com>
Cc: Vladimir Vassilev <vladimir@transpacket.com>, "netmod@ietf.org" <netmod@ietf.org>
References: <e35fe233-af5b-58f2-35e4-901eb7eea454@cisco.com> <75e91419-9436-d1b7-29f6-02e3ff4ff86d@transpacket.com> <668cc9e1-c006-ce25-1473-549bc0b71a7d@cisco.com> <CABCOCHS_uni9xJxS=+1-R7LcA35WiVxLPAeFO=NgL+RnFDVc8w@mail.gmail.com>
From: Robert Wilton <rwilton@cisco.com>
Message-ID: <a5e7e88a-bd15-f9e9-5a1c-58497b6c84cb@cisco.com>
Date: Thu, 16 Nov 2017 08:53:18 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0
MIME-Version: 1.0
In-Reply-To: <CABCOCHS_uni9xJxS=+1-R7LcA35WiVxLPAeFO=NgL+RnFDVc8w@mail.gmail.com>
Content-Type: multipart/alternative; boundary="------------96541FCDCA4FD5F9E0A030F6"
Content-Language: en-US
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/ltaHmIpVKQtyK43O0ZX_hgRdFQY>
Subject: Re: [netmod] [Netconf] Alternative YANG library structure for 7895bis
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: Thu, 16 Nov 2017 00:53:26 -0000

Hi Andy,


On 16/11/2017 02:29, Andy Bierman wrote:
> Hi,
>
> The per-datastore feature aspect of NMDA is a new and significant 
> change to YANG.
>
>>     |  |  +--ro feature* [name]
>>     |  |  |  +--ro name yang:yang-identifier
>>     |  |  |  +--ro not-implemented-in*
>>     |  |  |              -> /yang-library/datastore/name
>>
>
> YANG does not define feature conformance at this granularity.
> I strongly object to this change to YANG conformance.
> A server can only advertise a YANG feature if it implemented on the 
> entire server.
>
> This extra complexity is not present on the openconfig solution or 
> requirements.
In terms of comparison, it definitely is:
- you can have different features for the config and state trees (e.g. 
"router-id" feature in RFC 8022).
- sometimes the conventions are not followed completely consistently, 
e.g. different types, or semantics between config and state.
- sometimes the structures differ between config and state.

So, the problem comparing between config and state is not easier in 
either the IETF split tree or OpenConfig solutions.

> Comparing any datastore to <operational> is much more complex (any may 
> not be possible)
> if the features are different for a given module.
You can always compare (except deviations in operational).  If a feature 
is enabled on any configuration datastore then it must also be enabled 
on operational.

E.g.  take "router-id" feature from RFC8022bis (that was also defined in 
RFC8022).

This feature can be enabled:
(i) everywhere (i.e. <conventional> + <i2rs-ephemeral> + <operational>), or
(ii) <conventional> + <operational>, or
(iii) <i2rs-ephemral> + <operational>, or
(iv) <operational> only, or
(v) or in none of them.

Hence, <operational> always contains a superset of the nodes.

>
> I do not see how <operational> can be true superset of the 
> conventional datastores
> if the features are different.

Because of the statement above.

Thanks,
Rob

>
>
> Andy
>
>
> On Wed, Nov 15, 2017 at 9:29 AM, Robert Wilton <rwilton@cisco.com 
> <mailto:rwilton@cisco.com>> wrote:
>
>     I don't think that this is really a good idea.  You would end up
>     returning server metadata in addition to the configuration.
>
>     I still think that the YANG library proposal is the best solution.
>
>     Thanks,
>     Rob
>
>
>     On 16/11/2017 01:21, Vladimir Vassilev wrote:
>>     Hello,
>>
>>     I have a proposal based on <get-data> that provides an elegant
>>     solution to consider as a 3rd option.  It is based on keeping
>>     exactly the same model as in RFC 7895 and using <get-data> RPC to
>>     retrieve datastore specific yang-library instance data in a
>>     similar way one would use <get-data> to retrieve the datastore
>>     contents. In addition a top level config=false container e.g.
>>     /datastores with list of supported datastores that does not need
>>     to be part of the yang-library module:
>>
>>     module: ietf-datastores
>>     +--ro datastores
>>     |  +--ro datastore* [name]
>>     |     +--ro name          identityref
>>
>>     Vladimir
>>
>>     On 11/09/2017 05:51 PM, Robert Wilton wrote:
>>>
>>>     Hi,
>>>
>>>     Given some of the feedback related to the complexity of the YANG
>>>     library bis structure, we have come up with two other possible
>>>     structures for the YANG library data:
>>>
>>>     (1) A simplified structure to make YANG library meet the NMDA
>>>     requirements, but that is closer to the existing YANG library
>>>     structure, and arguably simpler.
>>>     (2) An enhanced version of the structure (1) above, that is also
>>>     extended to allow the structure to be reused for schema-mount
>>>     via an augmentation.
>>>
>>>     For reference, at the end of this email, I have also included
>>>     the tree diagram of the existing YANG library, and the current
>>>     YANG library bis draft (draft-ietf-netconf-rfc7895bis-02) version.
>>>
>>>     Considering the two new YANG library structures:
>>>
>>>     ------------------------
>>>
>>>     *(1) A simplified structure to make YANG library meet the NMDA
>>>     requirements, but that is closer to the existing YANG library
>>>     structure.*
>>>
>>>     The main changes are:
>>>     (i) Split "implemented modules" and "import-only-modules" into
>>>     two separate lists, making the most important list (i.e.
>>>     implemented modules) keyed by module name only and hence easier
>>>     to reference.
>>>     (ii) Assume modules are implemented in all datastores by default
>>>     (with a "not-implemented-in" leaflist of datastores that a
>>>     module is not implemented in).
>>>     (iii) Assume that features are implemented in all datastores by
>>>     default (with a "not-implemented-in" leaflist of datastores that
>>>     a feature is not implemented in).
>>>     (iv) Deleted module-sets.
>>>     (v) Datastores are now just a list of supported datastores (that
>>>     could potentially be extended with further per datastore
>>>     properties in future).
>>>
>>>     Manually generated tree output for proposed YANG library:
>>>
>>>     module: ietf-yang-library
>>>      +--ro yang-library
>>>         +--ro modules
>>>         |  +--ro module* [name]
>>>         |  |  +--ro name yang:yang-identifier
>>>         |  |  +--ro revision? revision-identifier
>>>         |  |  +--ro schema?        inet:uri
>>>         |  |  +--ro namespace      inet:uri
>>>         |  |  +--ro submodule* [name]
>>>         |  |  |  +--ro name yang:yang-identifier
>>>         |  |  |  +--ro revision? yang:yang-identifier
>>>         |  |  |  +--ro schema?     inet:uri
>>>         |  |  +--ro not-implemented-in*
>>>         |  |  |              -> /yang-library/datastore/name
>>>         |  |  +--ro feature* [name]
>>>         |  |  |  +--ro name yang:yang-identifier
>>>         |  |  |  +--ro not-implemented-in*
>>>         |  |  |              -> /yang-library/datastore/name
>>>         |  |  +--ro deviation*
>>>         |  |                 -> ../name
>>>         |  |
>>>         |  +--ro import-only-module* [name revision]
>>>         |     +--ro name yang:yang-identifier
>>>         |     +--ro revision            union
>>>         |     +--ro schema? inet:uri
>>>         |     +--ro namespace inet:uri
>>>         |     +--ro submodule* [name]
>>>         |        +--ro name yang:yang-identifier
>>>         |        +--ro revision yang:revision-identifier
>>>         |        +--ro schema?     inet:uri
>>>         +--ro datastore* [name] // Allows future per datastore
>>>     properties.
>>>         |  +--ro name          identityref
>>>         +--ro checksum       string
>>>
>>>     ------------------------------
>>>
>>>     *(2) An enhanced version of the structure (1) above, that is
>>>     extended to allow the structure to be reused for schema-mount
>>>     via an augmentation.*
>>>
>>>     This is similar to the structure above, except that the "the set
>>>     of modules" is contained in a list of named schema (e.g. similar
>>>     to the schema mount draft), allowing this structure to be
>>>     re-used for schema mount.
>>>
>>>     Schema mount would be expected to augment yang-library to add in
>>>     the additional schema mount information.  In the tree diagram, I
>>>     have shown the schema-mount mount-point augmentation, but not
>>>     including namespaces yet.
>>>
>>>     Every server would be required to provide at least one schema in
>>>     the schema list, and the primary schema for the device would
>>>     always be given the name "primary".
>>>
>>>     module: ietf-yang-library
>>>      +--ro yang-library
>>>         +--ro schema* [name]
>>>         |  +--ro name           string
>>>         |  +--ro checksum       string
>>>         |  +--ro module* [name]
>>>         |  |  +--ro name yang:yang-identifier
>>>         |  |  +--ro revision? yang:revision-identifier
>>>         |  |  +--ro schema?        inet:uri
>>>         |  |  +--ro namespace      inet:uri
>>>         |  |  +--ro submodule* [name]
>>>         |  |  |  +--ro name yang:yang-identifier
>>>         |  |  |  +--ro revision? yang:yang-identifier
>>>         |  |  |  +--ro schema?     inet:uri
>>>         |  |  +--ro not-implemented-in*
>>>         |  |  |              -> /yang-library/datastore/name
>>>         |  |  +--ro feature* [name]
>>>         |  |  |  +--ro name yang:yang-identifier
>>>         |  |  |  +--ro not-implemented-in*
>>>         |  |  |              -> /yang-library/datastore/name
>>>         |  |  +--ro deviation*
>>>         |  |  |              -> ../name
>>>         |  |  +- schema-mount:mount-point* [label]
>>>         |  |     +--ro label yang:yang-identifier
>>>         |  |     +--ro config?       boolean
>>>         |  |     +--ro (schema-ref)
>>>         |  |        +--:(inline)
>>>         |  |        |  +--ro inline? empty
>>>         |  |        +--:(use-schema)
>>>         |  |           +--ro use-schema* [name]
>>>         |  |              +--ro name
>>>         |  |              |       -> /yang-library/schema/name
>>>         |  |              +--ro parent-reference*   yang:xpath1.0
>>>         |  |
>>>         |  +--ro import-only-module* [name revision]
>>>         |     +--ro name yang:yang-identifier
>>>         |     +--ro revision            union
>>>         |     +--ro schema? inet:uri
>>>         |     +--ro namespace inet:uri
>>>         |     +--ro submodule* [name]
>>>         |        +--ro name yang:yang-identifier
>>>         |        +--ro revision yang:revision-identifier
>>>         |        +--ro schema?     inet:uri
>>>         +--ro datastore* [name] // Allows future per datastore
>>>     properties.
>>>         |  +--ro name          identityref
>>>         +--ro checksum       string
>>>
>>>     Please can you provide comments on these structures, in particular:
>>>
>>>     Is this version better (i.e. simpler) that the version currently
>>>     in draft-ietf-netconf-rfc7895bis-02 (below)?
>>>
>>>     Should we try and make the structure extensible for schema-mount
>>>     via augmentation (i.e. version (2)), or is it better that
>>>     schema-mount has its own separate subtree?
>>>
>>>     For reference only I have included the existing YANG library and
>>>     YANG library bis draft tree diagrams.
>>>
>>>     Thanks,
>>>     Rob
>>>
>>>
>>>     -----------------------------
>>>
>>>     *** FOR REFERENCE ONLY ***
>>>
>>>     (3)  The current YANG library structure in YANG library bis
>>>     (draft-ietf-netconf-rfc7895bis-02)
>>>
>>>         module: ietf-yang-library
>>>             +--ro yang-library
>>>                +--ro modules
>>>                |  +--ro module* [id]
>>>                |     +--ro id                  string
>>>                |     +--ro name                yang:yang-identifier
>>>                |     +--ro revision?           revision-identifier
>>>                |     +--ro schema?             inet:uri
>>>                |     +--ro namespace           inet:uri
>>>                |     +--ro feature*            yang:yang-identifier
>>>                |     +--ro deviation* [module]
>>>                |     |  +--ro module    -> ../../id
>>>                |     +--ro conformance-type    enumeration
>>>                |     +--ro submodule* [name]
>>>                |        +--ro name        yang:yang-identifier
>>>                |        +--ro revision?   revision-identifier
>>>                |        +--ro schema?     inet:uri
>>>                +--ro module-sets
>>>                |  +--ro module-set* [id]
>>>                |     +--ro id        string
>>>                |     +--ro module*   -> ../../../modules/module/id
>>>                +--ro datastores
>>>                |  +--ro datastore* [name]
>>>                |     +--ro name          identityref
>>>                |     +--ro module-set
>>>                |             -> ../../../module-sets/module-set/id
>>>                +--ro checksum       string
>>>
>>>     -----------------------------
>>>
>>>     *** FOR REFERENCE ONLY ***
>>>
>>>     (4)  The current YANG library structure (RFC 7895)
>>>
>>>            +--ro modules-state
>>>               +--ro module-set-id    string
>>>               +--ro module* [name revision]
>>>                  +--ro name                yang:yang-identifier
>>>                  +--ro revision            union
>>>                  +--ro schema?             inet:uri
>>>                  +--ro namespace           inet:uri
>>>                  +--ro feature*            yang:yang-identifier
>>>                  +--ro deviation* [name revision]
>>>                  |  +--ro name        yang:yang-identifier
>>>                  |  +--ro revision    union
>>>                  +--ro conformance-type    enumeration
>>>                  +--ro submodule* [name revision]
>>>                     +--ro name        yang:yang-identifier
>>>                     +--ro revision    union
>>>                     +--ro schema?     inet:uri
>>>
>>>
>>>
>>>     _______________________________________________
>>>     Netconf mailing list
>>>     Netconf@ietf.org <mailto:Netconf@ietf.org>
>>>     https://www.ietf.org/mailman/listinfo/netconf
>>>     <https://www.ietf.org/mailman/listinfo/netconf>
>>
>
>
>     _______________________________________________
>     netmod mailing list
>     netmod@ietf.org <mailto:netmod@ietf.org>
>     https://www.ietf.org/mailman/listinfo/netmod
>     <https://www.ietf.org/mailman/listinfo/netmod>
>
>