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 <[email protected]
<mailto:[email protected]>> 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
[email protected] <mailto:[email protected]>
https://www.ietf.org/mailman/listinfo/netconf
<https://www.ietf.org/mailman/listinfo/netconf>
_______________________________________________
netmod mailing list
[email protected] <mailto:[email protected]>
https://www.ietf.org/mailman/listinfo/netmod
<https://www.ietf.org/mailman/listinfo/netmod>
_______________________________________________
netmod mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/netmod