Hi Andy,
The main problem that I'm currently trying to solve, and get agreement
on, is "where does the operator's automated code look to find the state
nodes associated with a particular config node".
E.g. for feature /foo, do they look for the config false nodes under
/foo, or do the look somewhere in /foo-state. The current answer
appears to be, that the config false nodes could appear in either place
in the IETF modules without any requirement for a consistent approach.
Is that right?
Separately, the OpenConfig folks have said that it would be better if
they could get (or register for notification of) all of the data
associated with "foo" with a single request rather than having to make
multiple requests in different trees. Personally, I prefer their model
where they have merged interface-state into interfaces. Mainly because
I think that it should make the YANG modules easier to read with less
duplication of structure, and I think that it is a better long term
direction to go in. However, I appreciate Acee's comments that we may
just be too late to change this now, and we must just accept the status
quo (whatever that is).
I would like to know what should the common approach for IETF standard
models be? E.g. is it one of the following:
1) All config false leaves for foo must go under /foo-state.
2) All config false leaves for foo must go under /foo
3) All config false leaves go under /foo where possible, or /foo-state
otherwise (e.g. for restconf-monitoring).
4) Config false leaves go wherever the model writer decides is appropriate.
I've put further comments inline below ...
On 29/07/2016 15:39, Andy Bierman wrote:
Hi,
I am somewhat confused about this discussion.
Apparently it is a hyge problem to put foo-counters under
foo-state?
RW:
This isn't just about counters, it is all config false nodes that are
not present solely to represent "applied configuration".
Configuration must be used (and setup by the operator?)
in order for foo-counters to exist?
RW:
No, this is not being proposed.
draft-schoenw and draft-wilton propose that the config true nodes are
allowed to exist in an "operational state datastore" to parent child
config false nodes, even though they haven't been configured. I also
proposed that metadata annotations could be used to indicate that the
containing config=true nodes in the operational state datastore exist
only in the system (and not in the configuration).
Further I would propose that NETCONF/RESTCONF servers could support an
"operational state datastore" without any requirement to distinguish
applied configuration separately from intended configuration.
So what problem does this solve?
RW:
I see that it potentially allows modules to avoid an arbitrary foo vs
foo-state split.
The opstate solution proposal requires a config path-expr to be altered
to generate the corresponding path-expr under the 'state' container.
RW:
Are you referring to the OpenConfig model solution here or
draft-schoenw, or draft-wilton?
It does not seem to be a problem that a new path-expr needs to be
constructed.
Is that what you are trying to solve? Even though counters never have
a corresponding configuration node with the same name?
So what happens to modules like ietf-restconf-monitoring?
RW:
Either it stays exactly as it is now, or alternatively it could just be
named "restconf" rather than "restconf-state", even if it just contains
config false nodes.
It is no longer allowed to write monitoring modules?
RW:
It is still allowed to write monitoring modules, no change here.
They all have to contained within some configuration nodes?
RW:
No, not necessarily:
- it they are just state then either call them "foo" or "foo-state" as
per above.
- if they are mix of config and state then they would go under "foo",
which would be a config true node (but not necessarily configured, as
per my comments on the operational state datastore above).
Again, what problem is this trying to solve?
RW:
Hopefully this one has already been answered above.
Thanks,
Rob
Andy
On Fri, Jul 29, 2016 at 7:15 AM, Ladislav Lhotka <[email protected]
<mailto:[email protected]>> wrote:
Robert Wilton <[email protected] <mailto:[email protected]>> writes:
> On 28/07/2016 15:20, Ladislav Lhotka wrote:
>>> On 28 Jul 2016, at 15:57, Acee Lindem (acee) <[email protected]
<mailto:[email protected]>> wrote:
>>>
>>> Hi Lada,
>>>
>>> On 7/28/16, 9:52 AM, "netmod on behalf of Ladislav Lhotka"
>>> <[email protected] <mailto:[email protected]> on
behalf of [email protected] <mailto:[email protected]>> wrote:
>>>
>>>> Robert Wilton <[email protected] <mailto:[email protected]>>
writes:
>>>>
>>>>> On 26/07/2016 21:36, Kent Watsen wrote:
>>>>>> <Rob Wilton writes>
>>>>>>
>>>>>>
>>>>>> So my thinking is that if we can't merge "foo-state" into
"foo" then
>>>>>> instead we should have consistent rules that explicitly
state that for
>>>>>> all IETF models "foo" and "foo-state" are separate trees with a
>>>>>> consistent naming convention and structure. That should
hopefully
>>>>>> allow tooling to programmatically relate the two separate trees
>>>>>> together. It may give a path to allow "foo-state" to be
merged into
>>>>>> "foo" in future, but once IETF has standardized 600+ models
with
>>>>>> separate sub-trees, I cannot see that they would get merged
back
>>>>>> together again.
>>>>>>
>>>>>> What other alternatives are available? As a WG we need to
tell the
>>>>>> other WGs how the IETF YANG models should be structured.
>>>>>>
>>>>>> In short, unfortunately I think that we have probably
already missed
>>>>>> the opportunity to merge "foo" and "foo-state" subtrees
together ...
>>>>>>
>>>>>> </Rob Wilton>
>>>>>>
>>>>>> Firstly, I’m trying to get a sense of how big a problem this
>>>>>> foo/foo-state thing is. [Note: by foo-state, I’m only
referring to
>>>>>> counters, not opstate].
>>>>>>
>>>>> RW:
>>>>> By counters, I think that we also mean any config false
nodes that
>>>>> don't
>>>>> directly represent "applied configuration", right? E.g. is an
>>>>> interface
>>>>> operationally up or down.
>>>>>
>>>>>> I know about RFC 7223, which was done out of
consideration for
>>>>>> system-generated interfaces, but how many other such models
are there
>>>>>> envisioned to be?
>>>>>>
>>>>> RW:
>>>>> - Any models that augment RFC 7223 and have config false
nodes will be
>>>>> impacted.
>>>>> - I thought that quite a lot of other IETF models that are
in the
>>>>> process of being standardized have a top level split between
"foo" and
>>>>> "foo-state". E.g the ISIS model
(draft-ietf-isis-yang-isis-cfg-08) has
>>>>> this split. I suspect that all the routing models will be
structured
>>>>> similarly.
>>>> Correct. One reason is that the core routing model envisions
>>>> system-controlled RIBs.
>>>>
>>>>> - Although it is perhaps worth pointing out that I think
that the
>>>>> OpenConfig modules effectively have exactly this same issue
(e.g. they
>>>>> have a combined interfaces tree keyed by config true
leaves), and they
>>>>> pragmatically just ignore the issue of system created interface
>>>>> entries.
>>>> The NETMOD WG considered this issue quite important in the past.
>>>>
>>>> My impression from the OpState discussion is that we are on
the quest of
>>>> the philosopher's stone, trying to find a shortcut where none is
>>>> possible in general. The long session in Berlin concentrated
on the
>>>> life-cycle of a single parameter that's somehow configured, then
>>>> manipulated, and eventually ends up as operational state. IMO
this
>>>> is too simplistic, the relationship between configuration and
state can
>>>> be much more complex. RIB is one example - it combines
contributions
>>>> from configuration (static routes) and derived state (routing
>>>> protocols).
>>> If one were to support the Applied-Config data store, it be
comprised of
>>> only the current state of the configured static routes. The
complete RIB
>>> would still need to be accessible in separate data nodes.
>> Yes, but I didn't talk about intended-applied. I understand
that another goal of OpState is to unify config and (true) state
and get rid of the foo and foo-state dichotomy in the data model.
I am sceptical about it.
> The goal is/was to unify where the only reason that they were
split was
> because the lifetime of the configured containing datanode may
differ
> from the operational containing datanode. E.g. interfaces vs
> interfaces-state was split to allow for system created
interfaces that
> were not configured, but other than this reason the split seems
quite
> artificial and not particularly helpful.
>
> OpenConfig is modelling interfaces and interfaces-state as a single
> list. It would be kind of helpful if IETF models and OpenConfig
models
> could be consistent in this regard, and I prefer the combined list
> approach used by OpenConfig interfaces (on the assumption that
we can
> solve the technical problems associated with this approach - which I
> think that we can).
If we agree that there may be state data that have no direct
counterpart in configuration, and these will be in foo-state, then the
likely outcome is that in order to collect all state data, one
will have
to query both foo and foo-state, which doesn't seem ideal.
Lada
>
> I've no particular issue with a RIB existing under
routing-state. But
> personally, if it was the ISIS specific routing table, I would
prefer it
> to be under a single top level ISIS container on the assumption
that you
> cannot really have an ISIS routing table if ISIS isn't actually
running
> on the device.
>
> Cheers,
> Rob
>
>>
>> Lada
>>
>>> Thanks,
>>> Acee
>>>
>>>
>>>
>>>> After all, most real devices have some configuration mode and
"show"
>>>> commands. They are separate even though there is certainly some
>>>> relationship between their data.
>>>>
>>>> Lada
>>>>
>>>>>> Is this issue currently blocking models from progressing,
or are we
>>>>>> getting ourselves wrapped around a hypothetical?
>>>>>>
>>>>> RW:
>>>>> I think that it is blocking models from progressing.
>>>>>
>>>>> The current guidance for "intended vs applied" is clear.
I.e. there
>>>>> must not be "config false" leaves in the IETF YANG data
models to
>>>>> represent "applied config".
>>>>>
>>>>> But there is no clear guidance for the rest of operational
state that
>>>>> isn't applied config. The other WGs need clear guidance
(effectively
>>>>> now) to ensure that they can start publishing models as RFCs.
>>>>>
>>>>>
>>>>>> If RFC 7223 is an outlier, then we can address it as a
special case
>>>>>> (perhaps via the related-state/related-config YANG
annotations). What
>>>>>> do you think?
>>>>>>
>>>>> RW:
>>>>> Personally, I would like one common convention that applies
to all IETF
>>>>> YANG models.
>>>>>
>>>>> Idealistically I would like foo and foo-state to be merged
because I
>>>>> think that will make the models easier to use and maintain
in the long
>>>>> term, but I don't know if we are just too late to go in that
direction.
>>>>>
>>>>> It seems to me that the NETMOD WG really should try to come to a
>>>>> decision quite quickly on this, but I don't know how to
encourage that.
>>>>>
>>>>> A virtual interim on just this topic perhaps?
>>>>>
>>>>>> Next, regarding paths forward (assuming 7223 is not an
outlier), I’m
>>>>>> thinking the opposite. I’m quite sure that we would never
merge the
>>>>>> 600+ models with separate subtrees back together again. So I’m
>>>>>> thinking we immediately merge foo and foo-state in all
active YANG
>>>>>> models (so that the YANG “conceptual” models are stable and
good)
>>>>>> *and* then we use your idea to programmatically generate the
>>>>>> “foo-state” tree, presumably only when needed. This
foo-state tree
>>>>>> could be generated offline by tools and provided as a
second YANG
>>>>>> module in drafts. In this way, servers (opstate aware or
not) can
>>>>>> advertise if clients can access the foo-state tree (an
opstate-aware
>>>>>> server may still advertise it for business reasons, and it can
>>>>>> ‘deprecate’ the tree when no longer needed). We could do
the same
>>>>>> without tools today by just using a feature statement on, for
>>>>>> instance, the interfaces-state container, but I like
pushing for
>>>>>> tooling upfront so that we’re guaranteed mergeability
later. Thoughts?
>>>>>>
>>>>> RW:
>>>>> So the generated "foo-state" tree would contain a copy of
all config
>>>>> false nodes in the YANG schema and a "config false copy" of
any config
>>>>> true nodes in the YANG schema that are required to provide
parental
>>>>> structure for the descendant config false nodes.
>>>>> - The Xpath expressions would also need to be adjusted, and
possibly
>>>>> some of those might break (or need to be fixed by hand).
>>>>> - Groupings might be a problem, but potentially they could
be expanded.
>>>>>
>>>>> Technically this solution might work, but is it possible to get
>>>>> everyone
>>>>> to agree that this is the right direction to go in before we
spend time
>>>>> on this?
>>>>>
>>>>> Thanks,
>>>>> Rob
>>>>>
>>>>>
>>>>>> Kent // as a contributor
>>>>>>
>>>>> _______________________________________________
>>>>> netmod mailing list
>>>>> [email protected] <mailto:[email protected]>
>>>>> https://www.ietf.org/mailman/listinfo/netmod
>>>> --
>>>> Ladislav Lhotka, CZ.NIC Labs
>>>> PGP Key ID: E74E8C0C
>>>>
>>>> _______________________________________________
>>>> netmod mailing list
>>>> [email protected] <mailto:[email protected]>
>>>> https://www.ietf.org/mailman/listinfo/netmod
>> --
>> Ladislav Lhotka, CZ.NIC Labs
>> PGP Key ID: E74E8C0C
>>
>>
>>
>>
>> .
>>
>
--
Ladislav Lhotka, CZ.NIC Labs
PGP Key ID: E74E8C0C
_______________________________________________
netmod mailing list
[email protected] <mailto:[email protected]>
https://www.ietf.org/mailman/listinfo/netmod
_______________________________________________
netmod mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/netmod