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

Juergen Schoenwaelder <j.schoenwaelder@jacobs-university.de> Wed, 20 January 2021 09:47 UTC

Return-Path: <j.schoenwaelder@jacobs-university.de>
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 0BAE23A0E1C for <netmod@ietfa.amsl.com>; Wed, 20 Jan 2021 01:47:44 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.899
X-Spam-Level:
X-Spam-Status: No, score=-1.899 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
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 0j3567lPXgRi for <netmod@ietfa.amsl.com>; Wed, 20 Jan 2021 01:47:41 -0800 (PST)
Received: from atlas5.jacobs-university.de (atlas5.jacobs-university.de [212.201.44.20]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7C9093A0E1D for <netmod@ietf.org>; Wed, 20 Jan 2021 01:47:40 -0800 (PST)
Received: from localhost (demetrius5.irc-it.jacobs-university.de [10.70.0.222]) by atlas5.jacobs-university.de (Postfix) with ESMTP id E7E7FD70; Wed, 20 Jan 2021 10:47:38 +0100 (CET)
X-Virus-Scanned: amavisd-new at jacobs-university.de
Received: from atlas5.jacobs-university.de ([10.70.0.198]) by localhost (demetrius5.jacobs-university.de [10.70.0.222]) (amavisd-new, port 10032) with ESMTP id hNSapHXb9xvY; Wed, 20 Jan 2021 10:47:38 +0100 (CET)
Received: from hermes.jacobs-university.de (hermes.jacobs-university.de [212.201.44.23]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "hermes.jacobs-university.de", Issuer "DFN-Verein Global Issuing CA" (verified OK)) by atlas5.jacobs-university.de (Postfix) with ESMTPS; Wed, 20 Jan 2021 10:47:38 +0100 (CET)
Received: from localhost (demetrius5.irc-it.jacobs-university.de [10.70.0.222]) by hermes.jacobs-university.de (Postfix) with ESMTP id 8E7B220156; Wed, 20 Jan 2021 10:47:38 +0100 (CET)
X-Virus-Scanned: amavisd-new at jacobs-university.de
Received: from hermes.jacobs-university.de ([212.201.44.23]) by localhost (demetrius5.jacobs-university.de [10.70.0.222]) (amavisd-new, port 10028) with ESMTP id tu3mPc_ZpJBn; Wed, 20 Jan 2021 10:47:38 +0100 (CET)
Received: from localhost (anna.jacobs.jacobs-university.de [10.50.218.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by hermes.jacobs-university.de (Postfix) with ESMTPS id EECE120154; Wed, 20 Jan 2021 10:47:37 +0100 (CET)
Date: Wed, 20 Jan 2021 10:47:37 +0100
From: Juergen Schoenwaelder <j.schoenwaelder@jacobs-university.de>
To: Italo Busi <Italo.Busi@huawei.com>
Cc: "'netmod@ietf.org'" <netmod@ietf.org>
Message-ID: <20210120094737.g5l5pvfzligahrj6@anna.jacobs.jacobs-university.de>
Reply-To: Juergen Schoenwaelder <j.schoenwaelder@jacobs-university.de>
Mail-Followup-To: Italo Busi <Italo.Busi@huawei.com>, "'netmod@ietf.org'" <netmod@ietf.org>
References: <a0c43ab5c3c1463a97a1aa594a80ceee@huawei.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <a0c43ab5c3c1463a97a1aa594a80ceee@huawei.com>
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/pmiwvNsTXP22yy38jpYtqk3GVBs>
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, 20 Jan 2021 09:47:44 -0000

On Wed, Jan 20, 2021 at 08:57:48AM +0000, Italo Busi wrote:
> Hi all,
> 
> I have read RFC7950 and RFC8342 but I have still some questions for clarification about how to deal with default values in YANG.
> 
> Let's consider a config true leaf for which a YANG default statement has been defined in the YANG module.
> 
> If the client does not configure that leaf in the running datastore, the leaf is not present (cannot be read) in the running datastore.
> 
> The default value for that leaf is assigned by server in the operational datastore as part of the applied configuration (assuming that other configurations do not override it).
> 
> If that leaf exists in the operational datastore, the server shall return the default value if that leaf is read.
> 
> Is our understanding correct?

Yes. And you would tag the value with or:origin="or:default", appendix C.1
in RFC 8342 is a good example.
 
> Is it possible for a server not to use that leaf and not to return any value if that leaf is read?
> 
> According to this text from RFC8342, it seems that this is possible:
> 
>    Requests to retrieve nodes from <operational> always return the value
>    in use if the node exists, regardless of any default value specified
>    in the YANG module.  If no value is returned for a given node, then
>    this implies that the node is not used by the device.
> 
> However, according to this text from RFC7950, it seems that this is not possible:
> 
>    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.

I do not see the conflict. Note that RFC 7950 predates the notion of
an operational datastore.

> There are case where the default value to assign to a leaf depends on the configuration of other leaves. In this case, the default value cannot be defined using a YANG default statement.
> 
> In this case, is it possible in this case to define the default value in the description (maybe referencing some other standard specification)?
> 
> Would the behavior of the system be exactly the same as in the cases where the default value is assigned using a YANG default statement?

RFC 8342 says:

   o  default: represents configuration using a default value specified
      in the data model, using either values in the "default" statement
      or any values described in the "description" statement.  The
      default origin is only used when the configuration has not been
      provided by any other source.

and

     identity default {
       base origin;
       description
         "Denotes configuration that does not have a configured or
          learned value but has a default value in use.  Covers both
          values defined in a 'default' statement and values defined
          via an explanation in a 'description' statement.";
     }

So it is possible to define the default in a description clause.

> Would it be possible in this case to define a default value for a leaf defined in a base model which depends on an attribute defined in another model which augments the base model?
> In this case, the description of the leaf in the base model cannot be changed in the augmented model. Should the default value for the leaf defined in the base model be described in the description for the leaf defined in the augmenting module?
> For example, would this YANG be valid/correct to define a default value 10 for the leaf foo when the leaf bar exist?
> 
> module example-base {
>   container example {
>     leaf foo {
>       type uint8;
>     }
>   }
> }
> 
> module example-augment {
>   import example {
>     prefix ex;
>   }
> 
>   augment "ex:example" {
>     leaf bar {
>       type empty;
>       description
>         "When present, the default value for foo is 10.";
>     }
>   }
> }
> 

Well, this may be meaningful in some cases but it is also risky, if
multiple augementations start to disagree on what should be the
default of some other leaf. Alternatively, you could report the value
foo=10 with the origin "system". For most clients, it likely does not
matter much whether foo=10 is reported with origin=default or
origin=system if the default derivation logic becomes more complex.

For me personally, if there is more complex logic involved in deriving
a value for a leaf (i.e., the existence of other leafs or values of
other leafs matter), then I would rather call it a system provided
value and not a default value.

/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/>