On Mon, Dec 13, 2021 at 6:55 PM Kent Watsen <[email protected]> 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
[email protected]
https://www.ietf.org/mailman/listinfo/netmod