On Mon, Dec 13, 2021 at 6:55 PM Kent Watsen <kent+i...@watsen.net> wrote:

> 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?
>
>

No. Quite the opposite. The client only gets access to the config after the
device
has created an initial configuration, especially interface configuration.

The text in RFC 7950 is clear:

     The accessible tree depends on where the statement with the XPath

   expression is defined:

   o  If the XPath expression is defined in a substatement to a data
      node that represents configuration, the accessible tree is the
      data in the datastore where the context node exists.  The root
      node has all top-level configuration data nodes in all modules as
      children.



The RFC does not need to discuss offline validation because the constraints
apply to a single datastore.

The original intent (in YANG and NMDA) is that inactive nodes and active
nodes
can coexist in <running>. I see no reason to change NMDA or YANG and abandon
this approach.

IMO distinguishing so-called system config from client config
is not a very compelling operational problem to solve.
Not so sure it is easy to define a system edit vs. a non-system edit.


Andy




> 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
netmod@ietf.org
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to