On Mon, Apr 23, 2018 at 4:28 AM, Martin Bjorklund <m...@tail-f.com> wrote:
> Andy Bierman <a...@yumaworks.com> wrote: > > On Sun, Apr 22, 2018 at 11:52 PM, Martin Bjorklund <m...@tail-f.com> > wrote: > > > > > Andy Bierman <a...@yumaworks.com> wrote: > > > > On Wed, Apr 18, 2018 at 10:47 AM, Martin Bjorklund <m...@tail-f.com> > > > wrote: > > > > > > > > > Hi, > > > > > > > > > > Andy Bierman <a...@yumaworks.com> wrote: > > > > > > On Wed, Apr 18, 2018 at 10:26 AM, Kent Watsen < > kwat...@juniper.net> > > > > > wrote: > > > > > > > > > > > > > I like Andy's proposal below, for the argument of the > 'yang-data' > > > > > > > statement to encode some meta-information regarding the > > > > > context/namespace > > > > > > > in which it's used, but I wonder how it really works. For > > > instance, > > > > > would > > > > > > > "top" and "error-info" be the only allowed base-path values > for the > > > > > > > argument? and what is the value of the remainder of the path? > are > > > we > > > > > > > expecting for there to be some kind us 'uses' statement that > can > > > refer > > > > > to > > > > > > > just the base-path component to implement substitution-group > like > > > > > behavior? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > If we want to avoid defining these contexts, then we could just > > > define > > > > > root > > > > > > vs. nonroot. > > > > > > > > > > > > e,g: > > > > > > > > > > > > x:yang-data /mydef1 { > > > > > > container foo; > > > > > > } > > > > > > > > > > > > x:yang-data mydef2 { > > > > > > leaf x; > > > > > > leaf y; > > > > > > container z; > > > > > > } > > > > > > > > > > > > > > > > > > Only an argument starting with '/' would be treated as a > top-level > > > data > > > > > > node. > > > > > > > > > > > > All other yang-data definitions are not allowed to appear as a > root > > > node. > > > > > > The context where this yang-data is used is completely > proprietary. > > > > > > The mechanism used to expand this yang-data as if it was a > grouping > > > > > > is completely proprietary. > > > > > > > > > > > > The augment-yang-data extension only applies to top-level > yang-data > > > > > > definitions. > > > > > > > > > > > > However, my preference is to only standardize top-level > yang-data. > > > > > > > > > > What is "top-level" yang-data? > > > > > > > > > > > > > > > > > > > It is a data structure that represents an instance document. > > > > > > So then I assume that you also want to change the current draft -01 > > > behavior so that a yang-data structure MUST have a single container as > > > the child? Just like in rc:yang-data. > > > > > > > > > > A yang-data structure representing an instance document needs to result > in > > a container. > > Right, and since you wrote: > > my preference is to only standardize top-level yang-data. > > I assume that you want to re-add the CLR about a single container in > yang-ext? > > > > > Since this is the ONLY definition of yang-data we have in the > standard, > > > > what is a yang-data definition that represents some unspecified > usage, > > > > other than an instance document? > > > > > > We want to create a flexible solution for creating structures that can > > > be used in other places than just self-contained instance document. > > > One example is the error-info data (see subscribed-notifications). > > > > > > > Why is this any different than a YANG grouping? > > > > > > ? We don't have these CLRs for groupings; the following is legal: > > > > > > grouping foo { > > > leaf a { ... } > > > leaf b { ... } > > > } > > > > > > grouping bar { > > > leaf b { ... } > > > } > > > > > > > > > It is up to the user of the grouping to ensure it is used in a way so > > > that the result is legal. I think yang-data should work the same > > > way. > > > > > > > > > > > > > We don't need yang-data to be another way to define a grouping, because > > we already have grouping-stmt. > > I agree. At some point someone suggested "uses-yang-data", I think we > both agreed that this was a bad idea. > > > We don't need to re-invent another collection of data-def-stmts that are > not > > instantiated as data nodes automatically. Any place you could use > yang-data > > for this purpose, you could use a grouping instead. > > I'm not sure what you are trying to say. Are you suggesting that we > don't need yang-data at all? > > I do not understand the need for a yang-data structure that represents data that can be instantiated anywhere and everywhere. I do not want to break existing tools that expect sibling data nodes in the same module namespace to be unique local-names. I would rather stick with the yang-data in RFC 8040 than introduce a new extension with no restrictions. Standard YANG extensions should be interoperable and have a clear purpose. If we do not need to define what a YANG extension does in a way that can be observed somehow, then it does not need to be a standard. > /martin > Andy > > > > > > > > > > > /martin > > > > > > > > > > > > > Andy > > > > > > > > > > > > > > > > > > > > > > > > > > /martin > > > > > > > > > > > > > > > > > > > Andy > > > > > > > > > > > > > > > > > > I do not see any need for the other form since all functionality > can > > > be > > > > > > achieved with a grouping and a proprietary YANG extension. > > > > > > > > > > > > Kent // contributor > > > > > > > > > > > > > > > > > > > Andy > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On 4/16/18, 1:05 PM, "netmod on behalf of Andy Bierman" < > > > > > > > netmod-boun...@ietf.org on behalf of a...@yumaworks.com> > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Apr 16, 2018 at 9:46 AM, Robert Wilton < > rwil...@cisco.com> > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On 16/04/2018 17:07, Andy Bierman wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Apr 16, 2018 at 8:44 AM, Robert Wilton < > rwil...@cisco.com> > > > > > wrote: > > > > > > > > > > > > > > Don't groupings have a somewhat similar concern? > > > > > > > > > > > > > > E.g. if two groupings define the same data node name and are > used > > > at > > > > > the > > > > > > > same point then you would get a namespace clash, but YANG does > not > > > > > disallow > > > > > > > the groupings: > > > > > > > > > > > > > > > > > > > > > grouping foo_widget { > > > > > > > > > > > > > > leaf name { > > > > > > > > > > > > > > type string; > > > > > > > > > > > > > > description "Name of my foo widget"; > > > > > > > > > > > > > > } > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > > > grouping bar_widget { > > > > > > > > > > > > > > leaf name { > > > > > > > > > > > > > > type string; > > > > > > > > > > > > > > description "Name of my bar widget"; > > > > > > > > > > > > > > } > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > > > container all_widgets { > > > > > > > > > > > > > > uses foo_widget; > > > > > > > > > > > > > > uses bar_widget; > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > The principal difference here, is that the compiler can easily > > > check > > > > > and > > > > > > > reject the conflict at the uses statements. > > > > > > > > > > > > > > Hence I think that it would be good if we could find a > solution for > > > > > > > yang-data-ext that doesn't not require all root yang-data > nodes to > > > be > > > > > > > unique, since that feels somewhat clunky. I.e. my preference > is to > > > > > keep > > > > > > > them less restrictive, as Martin has proposed, if this is > feasible. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > It is not clunky that 2 top-level YANG data nodes in the same > > > module > > > > > > > > > > > > > > have unique names. This is simple and deterministic. > > > > > > > > > > > > > > This restriction has not been a problem so far. > > > > > > > > > > > > > > I agree with the statements above. > > > > > > > > > > > > > > But it is not clear to me that yang-data-ext is really defining > > > new top > > > > > > > level data nodes that are part of the same tree/namespace as > the > > > > > > > configuration/state nodes. In Martin's examples they were used > > > within > > > > > > > RPCs, and it the forcing the names to be unique in that context > > > that I > > > > > > > think would be clunky. E.g. in Martin's example forcing > different > > > > > names > > > > > > > for "reason" and "user-info" doesn't seem to be helpful. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > The yang-data statement has to define the context or new > abstract > > > > > > > namespace, > > > > > > > > > > > > > > or whatever this hack is called. > > > > > > > > > > > > > > Perhaps. I think that this depends on how they are used. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > The yang-data statement has to specify the expansion point, or > > > > > > > > > > > > > > at least specify that it is or is not the top-level. > > > > > > > > > > > > > > > > > > > > > > > > > > > > yang-data top/name1 { > > > > > > > > > > > > > > container mydata; > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > > > where context is something like "top" or "error-info", etc. > > > > > > > > > > > > > > > > > > > > > > > > > > > > It is trivial to use groupings if the same set of nodes needs > to be > > > > > used > > > > > > > in different contexts: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > yang-data error-info/name1 { > > > > > > > > > > > > > > container mydata; > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > > > Only the context named "top" is restricted to a resulting > > > > > single-container > > > > > > > > > > > > > > and cannot have duplicate names. > > > > > > > > > > > > > > > > > > > > > > > > > > > > This is OK: > > > > > > > > > > > > > > > > > > > > > > > > > > > > x:yang-data error-info/my-error1 { > > > > > > > > > > > > > > leaf reason {} > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > x:yang-data error-info/my-error2 { > > > > > > > > > > > > > > leaf reason {} > > > > > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Could a fix for this be something along the lines of: > > > > > > > - yang-data names must be unique amongst other top level data > > > nodes > > > > > > > within the module. > > > > > > > - if yang-data extensions are used at the top level then their > > > name > > > > > must > > > > > > > be used as a single top level container. > > > > > > > - if a yang-data extension is used within another structure > then > > > the > > > > > > > yang-data name is excluded, and the top level nodes defined in > the > > > > > > > yang-data definition are used .... > > > > > > > > > > > > > > > > > > > > > Every tool that implements yang-data has to be able > > > > > > > > > > > > > > to interpret a yang-data statement exactly the same way. > > > > > > > > > > > > > > > > > > > > > > > > > > > > If you want to reinvent XSD substitutionGroup, then do it > right. > > > > > > > > > > > > > > I'm not familiar with them. From a quick read, I don't see how > > > they > > > > > are > > > > > > > related to the problem that we are trying to solve here. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > A substitutionGroup allows a point int the schema to be > identified > > > by > > > > > name. > > > > > > > > > > > > > > Different elements can be defined that match this name, which > then > > > can > > > > > be > > > > > > > > > > > > > > used (like a YANG choice) at the specified schema point. > > > > > > > > > > > > > > (e.g. error-info above is like a substitutionGroup) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > Rob > > > > > > > > > > > > > > > > > > > > > > > > > > > > Andy > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > Rob > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Andy > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On 16/04/2018 15:36, Andy Bierman wrote: > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > > > > > > > > > > > I am strongly opposed to this change because it breaks the > rule in > > > > > YANG 1..1 > > > > > > > > > > > > > > that there cannot be 2 sibling nodes defined in the same module > > > > > namespace.. > > > > > > > > > > > > > > > > > > > > > > > > > > > > IMO since any yang-data nodes are ALLOWED to be used at the > > > top-level, > > > > > > > > > > > > > > then these top-level nodes cannot have conflicting names. > > > > > > > > > > > > > > > > > > > > > > > > > > > > It is very important when parsing an instance document that the > > > > > instance > > > > > > > data > > > > > > > > > > > > > > can be associated with the correct schema. This is not > possible > > > if the > > > > > > > > > > > > > > same top-level node has multiple yang-data nodes defined. > > > > > > > > > > > > > > > > > > > > > > > > > > > > If one needs to define data that is not top-level, (1) use > > > > > > > augment-yang-data > > > > > > > > > > > > > > or (2) use a different module. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Andy > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Apr 16, 2018 at 5:56 AM, Martin Bjorklund < > m...@tail-f.com> > > > > > wrote: > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > While preparing draft-ietf-netmod-yang-data-ext-02, it turned > out > > > that > > > > > > > it is not clear what, if any, restrictions should be enforced > for > > > > > > > yang-data structures. Even among the authors we have different > > > ideas > > > > > > > for how this should work. > > > > > > > > > > > > > > Background: > > > > > > > > > > > > > > In 8040, the original yang-data extension had a restriction > that > > > said > > > > > > > that a yang-data structure MUST have exactly one container, > since > > > it > > > > > > > wouldn't be possible to have a yang-data structure in an XML > > > instance > > > > > > > document otherwise. > > > > > > > > > > > > > > Since people want to use yang-data structures in other places, > this > > > > > > > restriction was lifted in the new draft: > > > > > > > > > > > > > > There is no longer an assumption that a yang data structure > can > > > > > > > only be used as a top-level abstraction, instead of nested > > > within > > > > > > > some other data structure. > > > > > > > > > > > > > > > > > > > > > With this in mind, here's a use case that I think we ought to > > > support: > > > > > > > > > > > > > > rpc my-first-rpc { > > > > > > > description > > > > > > > "Bla bla... > > > > > > > If an error occurs, <error-info> will contain an > instance of > > > > > > > the yang-data structure 'my-first-rpc-error-info'."; > > > > > > > ... > > > > > > > } > > > > > > > > > > > > > > yang-data my-first-rpc-error-info { > > > > > > > leaf reason { ... } > > > > > > > container user-info { ... } > > > > > > > } > > > > > > > > > > > > > > rpc my-second-rpc { > > > > > > > description > > > > > > > "Bla bla... > > > > > > > If an error occurs, <error-info> will contain an > instance of > > > > > > > the yang-data structure 'my-second-rpc-error-info'."; > > > > > > > ... > > > > > > > } > > > > > > > > > > > > > > yang-data my-second-rpc-error-info { > > > > > > > leaf reason { ... } > > > > > > > leaf important-url { ... } > > > > > > > } > > > > > > > > > > > > > > (maybe in the future we could even have a YANG extension > statement > > > to > > > > > > > formalize the description: > > > > > > > > > > > > > > rpc my-first-rpc { > > > > > > > ... > > > > > > > opx:error-info-structure my-first-rpc-error-info; > > > > > > > } > > > > > > > > > > > > > > but this is not point now.) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > I see no reason to reinvent the grouping-stmt. > > > > > > > > > > > > > > You could easily say opx:error-info-structure argument is a > > > grouping > > > > > name > > > > > > > > > > > > > > as it is a yang-data name. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > In the example above, note that the leaf "reason" is present in > > > both > > > > > > > structures. IMO this is not a problem, since these structures > are > > > > > > > used in different contexts. > > > > > > > > > > > > > > My point is that I think we should impose as few restrictions > as > > > > > > > possible to the yang-data extension. It should be up to the > user > > > of > > > > > > > yang-data to ensure that the structure is defined in such a > way so > > > > > > > that it can be used properly. For example, a structure that is > > > > > > > supposed to describe an XML instance document cannot define two > > > leafs > > > > > > > at the top level. > > > > > > > > > > > > > > If the WG agrees with what I wrote above, we need to change the > > > > > > > augment-yang-data extension so that you would write for > example: > > > > > > > > > > > > > > yx:augment-yang-data /ex:my-first-rpc-error-info/ex:user-info > { > > > > > > > ... > > > > > > > } > > > > > > > > > > > > > > Comments? > > > > > > > > > > > > > > > > > > > > > > > > > > > > /martin > > > > > > > > > > > > > > _______________________________________________ > > > > > > > netmod mailing list > > > > > > > netmod@ietf.org > > > > > > > https://www.ietf.org/mailman/listinfo/netmod > > > > > > > <https://urldefense.proofpoint.com/v2/url?u=https- > > > > > 3A__www.ietf.org_mailman_listinfo_netmod&d=DwMFaQ&c= > > > > > HAkYuh63rsuhr6Scbfh0UjBXeMK-ndb3voDTXcWzoCI&r= > > > > > 9zkP0xnJUvZGJ9EPoOH7Yhqn2gsBYaGTvjISlaJdcZo&m=q6I_ > > > > > yKbXVoahv9h5I1wZiQMUeHLZ5XWuMohEYtypmzs&s=jECZMhypw9LtuxzuntkFNM- > > > > > 8lm7xpztYwDDLOxCM_8k&e=> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > > > > > > > > > > netmod mailing list > > > > > > > > > > > > > > netmod@ietf.org > > > > > > > > > > > > > > https://www.ietf.org/mailman/listinfo/netmod < > https://urldefense. > > > > > proofpoint.com/v2/url?u=https-3A__www.ietf.org_mailman_ > > > > > listinfo_netmod&d=DwMFaQ&c=HAkYuh63rsuhr6Scbfh0UjBXeMK- > > > ndb3voDTXcWzoCI&r= > > > > > 9zkP0xnJUvZGJ9EPoOH7Yhqn2gsBYaGTvjISlaJdcZo&m=q6I_ > > > > > yKbXVoahv9h5I1wZiQMUeHLZ5XWuMohEYtypmzs&s=jECZMhypw9LtuxzuntkFNM- > > > > > 8lm7xpztYwDDLOxCM_8k&e=> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
_______________________________________________ netmod mailing list netmod@ietf.org https://www.ietf.org/mailman/listinfo/netmod