Re: [netmod] yang-data-ext issues

Andy Bierman <andy@yumaworks.com> Wed, 18 April 2018 17:52 UTC

Return-Path: <andy@yumaworks.com>
X-Original-To: netmod@ietfa.amsl.com
Delivered-To: netmod@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0DD5E12778D for <netmod@ietfa.amsl.com>; Wed, 18 Apr 2018 10:52:07 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.61
X-Spam-Level:
X-Spam-Status: No, score=-2.61 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, T_DKIMWL_WL_MED=-0.01] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=yumaworks-com.20150623.gappssmtp.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id xdsSVMdDNpWL for <netmod@ietfa.amsl.com>; Wed, 18 Apr 2018 10:52:03 -0700 (PDT)
Received: from mail-lf0-x22c.google.com (mail-lf0-x22c.google.com [IPv6:2a00:1450:4010:c07::22c]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 3C453124207 for <netmod@ietf.org>; Wed, 18 Apr 2018 10:52:02 -0700 (PDT)
Received: by mail-lf0-x22c.google.com with SMTP id r7-v6so3934480lfr.1 for <netmod@ietf.org>; Wed, 18 Apr 2018 10:52:02 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yumaworks-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=HjO6jJ7pqsd+43iqPXUru5P0kEaXM5YKMdlG9Ye6Z/Q=; b=FDBErsuRwNO2J7EAAxbVDqm+Yi8NHweWUl2cXgkz6dv+AZ04Xs1YpbcpM2SjA69Csm YDyQShDm4opWLh5Gh23BOlPh8I+D+wGmWDd7YeCIj04KTSTdj2tHVeHLaT/31HzHmBjA xFunpTEFEpo3yph1YMFnpmWv8nLgUfRcANTFE9ZI8Ph29NokX53kJGoPMSr5BT4kp7qF j1AaUQ0yXan3BL3eGiuniD0DfJKgartEtm66/dngaLSq6XXko+12VYApSxN0XPHtq2ui 3Dae7iEMp1GSyB1fG8qfpNQLPAzCr5VQBKAKVIfSNsw9k1VWsXOKMy32aIa/SWRerWjU D/fA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=HjO6jJ7pqsd+43iqPXUru5P0kEaXM5YKMdlG9Ye6Z/Q=; b=Z08HWWTZhh4xcJaHJmnWSoucMdOdK0QVFoP8M6ktDTgFg1QJvxstqlEYbhc8tWzd+G 3+GIoZnX42v/JBfbd7/9yf4XS0YFgUXicsqtV6X9BzQEEH73Np5NG63lN0kRns4X+F6c 5+oWujbLH7etpMfyVak2ktR6cXwTpaD3+JsLlNbCpBPgWfXSr6r6h21/zazjd4pvftfj AcOwXV79pKTX4LTCHq7HyAN0WnxZphEwRSAaUoiXUlCmkY4sjg1/FV1B5TxOTijmjUeJ 4jMOBwmT4xZEtbIfx2E/qFY8vesRaj3ACQNBRoEHqdt0NE7IbiOHRLG5tU3qgSCIVMz8 yqZw==
X-Gm-Message-State: ALQs6tA62DOOdLlha/Z7p+z4lx9RP0U2bhXyWk5lWJOxE6vZY4LLCUOD DsEVk1cEa19uGDNf4ey4ZFfc+xZDE9IJcBGC4mSlAQ==
X-Google-Smtp-Source: AIpwx4+AGv/LZoSnQmxR3CB6taMHZYMp4MW6C/aKyav24EcNt3fsCS+eiYDJiXFAF/Sz4ZkNLHeNW0EQep6Evsu65GE=
X-Received: by 10.46.127.10 with SMTP id a10mr2043912ljd.78.1524073920435; Wed, 18 Apr 2018 10:52:00 -0700 (PDT)
MIME-Version: 1.0
Received: by 2002:a19:d8c6:0:0:0:0:0 with HTTP; Wed, 18 Apr 2018 10:51:59 -0700 (PDT)
In-Reply-To: <20180418.194744.1882806546121321450.mbj@tail-f.com>
References: <CABCOCHSMQbg6jbafgq90E26OxSGf=9ERDxamJ3s9cp_LN4QC_w@mail.gmail.com> <AD15A3E2-71BC-4134-AAFD-BA249ABDEEB1@juniper.net> <CABCOCHTkCJY0UDkOMNUs3DPppWgPMQ4zAW2PwE9EJLZ2+VncbA@mail.gmail.com> <20180418.194744.1882806546121321450.mbj@tail-f.com>
From: Andy Bierman <andy@yumaworks.com>
Date: Wed, 18 Apr 2018 10:51:59 -0700
Message-ID: <CABCOCHQRC3qp+qGwMVeJAmftgV67o6-kygjwYkeDa1jzWq78kw@mail.gmail.com>
To: Martin Bjorklund <mbj@tail-f.com>
Cc: Kent Watsen <kwatsen@juniper.net>, NetMod WG <netmod@ietf.org>
Content-Type: multipart/alternative; boundary="089e082b3ee8a3ab87056a231cb1"
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/YT-7nJHGNxz6GSp-2I9t2cHiPR4>
Subject: Re: [netmod] yang-data-ext issues
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: NETMOD WG list <netmod.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netmod>, <mailto:netmod-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netmod/>
List-Post: <mailto:netmod@ietf.org>
List-Help: <mailto:netmod-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netmod>, <mailto:netmod-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 18 Apr 2018 17:52:07 -0000

On Wed, Apr 18, 2018 at 10:47 AM, Martin Bjorklund <mbj@tail-f.com> wrote:

> Hi,
>
> Andy Bierman <andy@yumaworks.com> wrote:
> > On Wed, Apr 18, 2018 at 10:26 AM, Kent Watsen <kwatsen@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.

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?

Why is this any different than a YANG grouping?



> /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-bounces@ietf.org on behalf of andy@yumaworks.com> wrote:
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > On Mon, Apr 16, 2018 at 9:46 AM, Robert Wilton <rwilton@cisco.com>
> wrote:
> > >
> > >
> > >
> > >
> > >
> > > On 16/04/2018 17:07, Andy Bierman wrote:
> > >
> > >
> > >
> > >
> > >
> > > On Mon, Apr 16, 2018 at 8:44 AM, Robert Wilton <rwilton@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 <mbj@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=>
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
>