Search code examples
model-drivenietf-netmod-yang

How to refine the mandatory property of nodes from a grouping in YANG language?


I defined a grouping which has a leaf with mandatory property set to false. But in some cases, I would like to use this grouping and specify that the leaf should be mandatory. How do I achieve this in YANG?


Solution

  • You would use the refine statement when specifying a use of your grouping.

    module mandatory-and-grouping {
      namespace "org:example:mandatory-and-grouping";
      prefix "mag";
    
      grouping my-grouping {
        leaf my-leaf {
          type string;
        }
      }
    
      container top {
        uses my-grouping {
          refine my-leaf {
            mandatory true;
          }
        }
      }
    }
    

    7.13.2. The "refine" Statement

    Some of the properties of each node in the grouping can be refined with the "refine" statement. The argument is a string that identifies a node in the grouping. This node is called the refine's target node. If a node in the grouping is not present as a target node of a "refine" statement, it is not refined and thus is used exactly as it was defined in the grouping.

    The argument string is a descendant schema node identifier (see Section 6.5).

    The following refinements can be done:

    • A leaf or choice node may get a default value, or a new default value if it already had one.
    • A leaf-list node may get a set of default values, or a new set of default values if it already had defaults; i.e., the set of refined default values replaces the defaults already given.
    • Any node may get a specialized "description" string.
    • Any node may get a specialized "reference" string.
    • Any node may get a different "config" statement.
    • A leaf, anydata, anyxml, or choice node may get a different "mandatory" statement.
    • A container node may get a "presence" statement.
    • A leaf, leaf-list, list, container, anydata, or anyxml node may get additional "must" expressions.
    • A leaf-list or list node may get a different "min-elements" or "max-elements" statement.
    • A leaf, leaf-list, list, container, choice, case, anydata, or anyxml node may get additional "if-feature" expressions.
    • Any node can get refined extensions, if the extension allows refinement. See Section 7.19 for details.

    RFC7950, Section 7.13.2