Hi Andy,

> I do not have any problem with <running> containing active and inactive nodes.
> That's what has been in place for over 10 years. That's what is written in 
> NMDA.

For posterity, it’s been “in place” only in proprietary implementations.  It 
would be nice to resurrect the “conditional-enablement” draft to have an RFC 
for it.


> I cannot find any RFC text that says <running> has only nodes created by a 
> client.

Really?  Interesting.   Still, I know it’s a mantra we’ve held closely for many 
year, right?


> I cannot find any RFC text that says system-injected config is special, 
> especially since
> server implementations exist that treat these edits as just another client
> (although probably a 'root' user client).

Very true (and Juergen’s point as well).  I’ve seen this done before.  Unhappy 
results.


> Rewriting NMDA and YANG validation to add a new <system> datastore is
> a major change that will impede deployment. The IETF already had 1 "do-over"
> because of NMDA.  Not so sure a 2nd do-over is going to go over well.

I don’t think a “major” change is being discussed: I think it is, effectively: 
validate <intended> (not <running>).

And note that Section 5.1.4 says:

   For simple implementations, <running> and <intended> are identical.

I’d guess that *all* implementations are “simple” currently.  When a server 
introduces a feature (inactive, template, etc.) that demands <intended>, at 
that time internal logic is switched to "validating <running>" vis-a-vis 
validating <intended>.  Clients would also have to make that same switch, to 
the extent they care about offline validation at all.



<putting on flame suit>

As a co-author, I know this was the intention of RFC 8342, which is supported 
by, for instance:


Section 4.1:

   o  Several implementations have proprietary mechanisms that allow
      clients to store inactive data in <running>.  Inactive data is
      conceptually removed before validation.

   o  Some implementations have proprietary mechanisms that allow
      clients to define configuration templates in <running>.  These
      templates are expanded automatically by the system, and the
      resulting configuration is applied internally.

Section 5:

        <intended>   // subject to validation

Section 5.1.4:

   <intended> is tightly coupled to <running>.  Whenever data is written
   to <running>, the server MUST also immediately update and validate
   <intended>.


<taking off flame suit>


Of course, some will point to Section 5.1.3:

   However, <running> MUST always be a valid configuration data tree,
   as defined in Section 8.1 of [RFC7950] 
<https://datatracker.ietf.org/doc/html/rfc7950#section-8.1>.

But it has to be obvious that this is a bug.  For instance,

  - YANG defines a leaf is of type union { uint8 | variable }
  - <running> defines the leaf having value “MAX_FOOBAR” 
    with a template that defines MAX_FOOBAR=1000.
  - so, <running> would be syntactically valid but
    semantically invalid.

Or a more egregious example:

  - YANG defines a "max-elements" value “MAX_FOOBAR”
       - how is this possible when RFC 7950 says max-elements
          Is a positive integer or the string “unbounded”?
       - so now we’re into YANG-next territory as far as
         templates are concerned, but hang with me a little
         while longer…
  - <running> has a template that defines MAX_FOOBAR=3
  - how coulda server validate if <running>’s list contained less
    than max-elements?  Worse, what if the result of another 
    template added more elements to the list?


I may have taken off the flame suit too early  ;)

K.



_______________________________________________
netmod mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to