Re: [netmod] Questions about how to assign default values with YANG

Andy Bierman <andy@yumaworks.com> Wed, 10 March 2021 14:16 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 B51613A0B41 for <netmod@ietfa.amsl.com>; Wed, 10 Mar 2021 06:16:22 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.887
X-Spam-Level:
X-Spam-Status: No, score=-6.887 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_HI=-5, SPF_HELO_NONE=0.001, T_SPF_PERMERROR=0.01, URIBL_BLOCKED=0.001] 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 a24S8lGaJpld for <netmod@ietfa.amsl.com>; Wed, 10 Mar 2021 06:16:20 -0800 (PST)
Received: from mail-lf1-x131.google.com (mail-lf1-x131.google.com [IPv6:2a00:1450:4864:20::131]) (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 C82053A0B20 for <netmod@ietf.org>; Wed, 10 Mar 2021 06:16:19 -0800 (PST)
Received: by mail-lf1-x131.google.com with SMTP id r3so25529443lfc.13 for <netmod@ietf.org>; Wed, 10 Mar 2021 06:16:19 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yumaworks-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=C9bUIlmGchCpHAzkgtLItrOAMaHxSd26RI57TjonwDc=; b=eBdD69x1aXgwLIhNLlyFoFwqEqP5KXNJq2AwASPAgZN8Sk5Hbcu8hOTvLMdYJ8xCND Y8/XryhWEVivE3gJUtCorkIqBLMJg2SvG8wapmI18Rk2dirqLNSk0qLd7m0LrVp68IZz A43uiFYhT9V085eZnRFoadQEPvj3i9KdJPRiAeaWRl27kZHbkJPue9vKD8+SMu7n4xQd Pn9kkn9OhsqatTtsDrLPGLM53n/Ri6sz7CuxEhvCYn7hTvRSz4WUqCCjkEmtlk7axj/N wZ4OJ3H4OkEFj7uvncuB1zzfxPPloKTp4YGeGp3EUU23ng2RwF631/YZGp5PtvW6eD9x qtMQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=C9bUIlmGchCpHAzkgtLItrOAMaHxSd26RI57TjonwDc=; b=F+nWHkkYlF97cC4VBvPIuzVpl8fuGOn86M57Jn5Pz9aHvnLiWL2jKbMqgifFB1kO0b p7JSATgEWHcL7nUVshxnFJ/OpYHbRJ5+AoBpLAxNhJJVBbDS+04sWdLeKMisTol4pAwk fdDbrJ/dWLVro/+nBQ/nKvyc07bpgAshiKRIu+FYhMEZKLMIR0gpLNG0HPYBcMNN8FU9 TbKjBwpLiDqmWG2n1fA3HrT/amE50cySiWLJRWBS46Fn04U4dJkV6YfgFirEVELUoLCK FlMJwCjJVcMOf+JmA/kGcilkS58l3UTzuIw88kR1Kf/EdX97KTibRhKF4/zjRZjGumna QPhg==
X-Gm-Message-State: AOAM531mbWp56ozjrvwoY1KZ6GyXv9qU8LqNrY74ke3RqaZq8/SKoJAM TdjfMtpodYGmrn5jjj78bDMnQl/FEG9hvhVNFU3y/w==
X-Google-Smtp-Source: ABdhPJyVQ6NeuqBHsnviGtvbzzq29klhUWMn3W/+lqV0sq3BhAV1vxRGlt5NRifPRH8C9Uc/vsHfL/Cgz7y2yIg4QRE=
X-Received: by 2002:a05:6512:a90:: with SMTP id m16mr2053442lfu.577.1615385777286; Wed, 10 Mar 2021 06:16:17 -0800 (PST)
MIME-Version: 1.0
References: <a0c43ab5c3c1463a97a1aa594a80ceee@huawei.com> <20210120094737.g5l5pvfzligahrj6@anna.jacobs.jacobs-university.de> <2384a8f549c94ea0ac46d6c772fbca43@huawei.com> <20210120114446.ovih63db7vmv7c7s@anna.jacobs.jacobs-university.de> <0ed5638881af42148720dd7f4843c3e6@huawei.com> <20210120160517.hsg5dnpidvrprtso@anna.jacobs.jacobs-university.de> <521a9ccd02e14d178a6e62971b4809ea@huawei.com> <20210309195241.k5lfmdnw2zqq6b4o@anna.jacobs.jacobs-university.de> <CABCOCHQkTsToyZ3qW3am41s3m7VLYt=pAdjBMuR0cMCwahbekg@mail.gmail.com> <bbbd4244a0474c48b3fdecb791cb936a@huawei.com>
In-Reply-To: <bbbd4244a0474c48b3fdecb791cb936a@huawei.com>
From: Andy Bierman <andy@yumaworks.com>
Date: Wed, 10 Mar 2021 06:16:06 -0800
Message-ID: <CABCOCHTpfX6DDZM3Lhd+wx6ZFCgpsWp+Yb2jDTUYa9Zd8tvWqA@mail.gmail.com>
To: Italo Busi <Italo.Busi@huawei.com>
Cc: Juergen Schoenwaelder <j.schoenwaelder@jacobs-university.de>, "netmod@ietf.org" <netmod@ietf.org>
Content-Type: multipart/alternative; boundary="0000000000006e42ee05bd2f4f6d"
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/n-4STKKvep5TWlCwufADNmvQ6lU>
Subject: Re: [netmod] Questions about how to assign default values with YANG
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.29
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, 10 Mar 2021 14:16:23 -0000

On Wed, Mar 10, 2021 at 12:54 AM Italo Busi <Italo.Busi@huawei.com> wrote:

> Andy, Juergen,
>
>
>
> I am not sure I understand the issue with a client that does not
> understand the augment.
>
>
>
> When this client writes in the running DS, it will not set the bar
> attribute (which is also defined in the augment module) and therefore the
> default value 0 will be applied by the system, as expected by the client.
>
>
>
> When this client reads from the operational DS the applied configuration,
> provided by another client which understands the augment, it will see that
> the applied configuration for the leaf foo is 10.
>
>
>
> This is a valid applied configuration if the other client had explicitly
> configured the value 10 in the running DS.
>
>
>
> The only difference would be that when the value 10 is explicitly
> configured by the other client the origin is set to intended while when
> “implicitly” configured using the attribute bar, the origin can be set to
> system (I think it would not be correct to set the origin to default in
> this case).
>
>
>
> BTW, I agree that this is not the most elegant/clean design and that the
> best approach would be not to define any default value in the base model. I
> am just willing to understand if a work-around is possible, without
> breaking any client, to allow re-using an existing module which has already
> defined a default value.
>


Read sec. 7.6.1 again, especially this part:

   When the default value is in use, the server MUST operationally
   behave as if the leaf was present in the data tree with the default
   value as its value.



Your proposal violates this MUST because the default is in use
according to the rules




>
>
> Italo
>


Andy


>
>
> *From:* Andy Bierman [mailto:andy@yumaworks.com]
> *Sent:* martedì 9 marzo 2021 21:12
> *To:* Juergen Schoenwaelder <j.schoenwaelder@jacobs-university.de>; Italo
> Busi <Italo.Busi@huawei.com>; netmod@ietf.org
> *Subject:* Re: [netmod] Questions about how to assign default values with
> YANG
>
>
>
>
>
>
>
> On Tue, Mar 9, 2021 at 11:52 AM Juergen Schoenwaelder <
> j.schoenwaelder@jacobs-university.de> wrote:
>
> Changing the semantics of a definition via augments is bad design.
>
> A system that does not understand the augment will believe the default
> is 0. Since there is no way to force an existing implementation to
> understand a certain augmentation, different implementation will
> rightfully disagree on the default value in effect.
>
>
>
>
>
> deviation /ex:example/ex:foo {
>
>     delete {
>
>        default 0;
>
>      }
>
> }
>
>
>
> IMO it was a bad idea to say deviations MUST NOT appear in standard
> modules.
>
> Here is a use-case for it.
>
>
>
> The old-client does not know about the new dynamic default but it could
> know
>
> that the old YANG default is not being used.
>
>
>
>
>
> /js
>
>
>
> Andy
>
>
>
>
> On Mon, Mar 08, 2021 at 08:19:39PM +0000, Italo Busi wrote:
> > Hi Juergen,
> >
> > Thanks again for your clear explanation on this topic
> >
> > I have found a similar but slightly different issue. In this case, a
> YANG default statement exists in the base module but the intention with the
> augmentation is to "overwrite" the default value on the basis of another
> attribute, defined in the module which augments the base module.
> >
> > For example, I am wondering whether such a code is valid:
> >
> > module example-base {
> >   container example {
> >     leaf foo {
> >       type uint8;
> >       default 0;
> >     }
> >   }
> > }
> >
> > module example-augment {
> >   import example {
> >     prefix ex;
> >   }
> >
> >   augment "ex:example" {
> >     leaf bar {
> >       type empty;
> >       description
> >         "When present, the default value for foo is 10.";
> >     }
> >   }
> > }
> >
> >
> > In this case, when the leaf foo is not configured but the leaf bar is
> present, the value of foo in the operational datastore should be 10 (rather
> than 0).
> >
> > In this case, I think that it would be better/cleaner if the origin is
> marked as system.
> >
> > Maybe a better YANG description for bar could be: "When present, the
> system overrides the default value of foo to 10."
> >
> > What is your and/or WG opinion?
> >
> > Thanks again
> >
> > Italo
> >
> > > -----Original Message-----
> > > From: Juergen Schoenwaelder [mailto:
> j.schoenwaelder@jacobs-university.de]
> > > Sent: mercoledì 20 gennaio 2021 17:05
> > > To: Italo Busi <Italo.Busi@huawei.com>
> > > Cc: 'netmod@ietf.org' <netmod@ietf.org>
> > > Subject: Re: [netmod] Questions about how to assign default values with
> > > YANG
> > >
> > > On Wed, Jan 20, 2021 at 02:41:39PM +0000, Italo Busi wrote:
> > > >
> > > > What about the case the leaf is not conditional (but still mandatory
> false
> > > since a YANG default statement is defined)?
> > > >
> > > > May the server still decide not to use/implement this leaf in the
> operational
> > > datastore?
> > > >
> > > > For example, in appendix C.1 of RFC8342, auto-negotiation is enabled
> by
> > > default.
> > > > What should be the behavior of a system which does not implement
> auto-
> > > negotiation?
> > > > Return the value false or no value (in the operational datastore)?
> > > >
> > >
> > > Here are some of the rules I personally like:
> > >
> > >  - <operational> is the ground truth about what a system has and does
> > >  - do not implement leafs that do not apply
> > >
> > > Hence, interfaces supporting auto-negotiation have either auto-
> > > negotiation/enabled = true or auto-negotiation/enabled = false in
> > > <operational>. And interfaces not supporting auto-negotiation have
> nothing
> > > to report about auto-negotiation. Yes, I do not want to see auto-
> > > negotiation/enabled = false on a loopback interface.
> > >
> > > My historic Ethernet interface from the last century would also not
> report
> > > auto-negotiation/enabled in <operational>. You may hit applications
> that love
> > > to have auto-negotiation/enabled available on all Ethernet interfaces
> and then
> > > you end in a debate where the application developers tell you that no
> > > information in <operational> may have many reasons (instrumentation not
> > > implemented, access control rules, whatever and by reporting
> enabled=false
> > > you do them a favor) but the true answer in such a debate is often that
> > > modeling things as a boolean is simplistic since there are often more
> than
> > > exactly two states (in this case, enabled, disabled, failed,
> not-available, ...).
> > > So you settle on blaming the model writer. ;-)
> > >
> > > /js
> > >
> > > --
> > > Juergen Schoenwaelder           Jacobs University Bremen gGmbH
> > > Phone: +49 421 200 3587         Campus Ring 1 | 28759 Bremen | Germany
> > > Fax:   +49 421 200 3103         <https://www.jacobs-university.de/>
> >
>
> --
> Juergen Schoenwaelder           Jacobs University Bremen gGmbH
> Phone: +49 421 200 3587         Campus Ring 1 | 28759 Bremen | Germany
> Fax:   +49 421 200 3103         <https://www.jacobs-university.de/>
>
> _______________________________________________
> netmod mailing list
> netmod@ietf.org
> https://www.ietf.org/mailman/listinfo/netmod
>
>