Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

YANG Language

  • The YANG language provides us the ability to define and model configurations and state data by defining YANG modules
    • Modules contain a sequence of statements
      • Statement syntax is either of the following :
        • statement = keyword [argument] ;
        • statement = keyword [argument] { <substatement(s)..> } ;

...

Sample YANG

(stores.yang with extension)

Statements and Description


Code Block
languageyml
titlestores model with extension
linenumberstrue
module sync-enxtensionextension {
…
prefix sync-exext;
…
   extension sync-flag{
     description
           “This is a sample extension statement description“
      argument "value";
   }
….
}



Code Block
languageyml
titleextended-stores model
linenumberstrue
module extended-stores {
    yang-version 1.1;
	...
    import sync-extension{
	    prefix sync-exext;
	}

    typedef year {
        type uint16 {
            range "1000..9999";
        }
    }

    container bookstore {
       sync-exext:sync-flag "on";
    ...
	}
}
  




extension Statement

see example from Lines 5-9 on stores model with extension

  • Syntax
Code Block
languagetext
extension <keyword/identifier>{
     <extension substatements...>
}


  • Usage

see example from Line 15 on extended-stores model

Code Block
languagetext
<module prefix>:<extension keyword> "argument";


  • to be used to define new statements
  • available to be imported and used by other modules just like a normal YANG statement
      • by use of 'import statement' to import the module where the extension is defined
  • statements that do not have any substatements can have extensions defined if wanted
  • its only one argument is the identifier and keyword for the extension
  • Optional substatements:
      • argument Statement
      • description Statement
      • reference Statement
      • defined extension Statements








argument Statement

see examples from Line 6 on stores model

  • takes a string argument which is the name of the argument to the keyword
  • Optional substatement
      • yin-element Statement




Code Block
languagexml
themeMidnight
titleYIN-extended-stores model
linenumberstrue
<?xml version="1.0" encoding="UTF-8"?>
<module name="extended-stores"
        xmlns="urn:ietf:params:xml:ns:yang:yin:1"
        xmlns:ext-book-store="org:onap:ccsdk:sampleExtended"
        xmlns:book-store="org:onap:ccsdk:sample">
  <namespace uri="org:onap:ccsdk:sampleExtended"/>
  <prefix value="ext-book-store"/>
  <revision date="2020-09-15">
    <description>
      <text>Sample Extended Model</text>
    </description>
  </revision>
  <import module="storessync-extension">
    <prefix value="booksync-storeext"/>
  </import>
  <typedef name="year">
    <type name="uint16">
      <range value="1000..9999"/>
    </type>
  </typedef>
  <container name="bookstore">
    <book<sync-storeext:sync-flag value="on"/>
    <leaf name="bookstore-name">
      <type name="string"/>
    </leaf>
	...
  </container>
</module>


yin-element Statement

  • takes a string argument which is true or false
  • yin-element is 'false' by default
  • if the argument is 'true' it indicates that the argument is mapped to an XML element in YIN or to an XML attribute


Notes

  1. Line 22 on YIN-extended-stores model
    1. result of using the argument without specifying the yin-element value
      1. yin-element is 'false'
      2. the argument 'value' is only an XML attribute
  2. if argument statement (Line 6 on stores model) contains yin-element substatement YIN-extend-stores model would result to the following:
    1. extension statement will produce a child node

      Code Block
      themeMidnight
      titleYIN-extended-stores model where yin-element is 'true'
      ...
        <container name="bookstore">
          <book<sync-storeext:sync-flag>
            <book<sync-storeext:value>on</booksync-storeext:value>
          </booksync-storeext:sync-flag>
      ...
        </container>
      ...

      ** this does not extend the data


** the YIN the YIN version and Schema trees above are generated by YANG validator 'pyang'

...

**Red cell for case number indicates that tests have failed

  • the extension is defined as substatement in the module with argument statement as its substatement

...

Case #DescriptionResult
1
  • Created schema set
    • the model contained only an extension definition
  • successfully stored yang resource
  • successfully created a node using the model
    • fragment table did not add the extension argument in attributes
2
  • Created schema set
    • the model contained an extension definition and the model was used inside a container node
  • successfully stored yang resource
  • successfully created a node using the model
    • fragment table did not add the extension argument in attributes


*the same result acquired for all passed cases on the groovy tests table above

3
  • Created schema set
    • the model contained only an extension definition
      • extension contains argument
          • yin-element set to true
  • creating the schema set failed
    • received 500 server error parsing schema set
4
  • Created schema set
    • the model contained an extension definition and was used inside the container node
      • extension contains argument
          • yin-element set to true
  • creating the schema set failed
    • received 500 server error parsing schema set


Conclusions

  • The YANG language extension analysis above is only applicable for type information.
    • Extension does not extend the actual data of the model instance
  • Based on the test scenarios above, extensions can only be seen on the schema sets and not on the data
  • Further investigation is required to cover interpretation as the analysis above only covers parsing
    •  see
      Jira
      serverONAP Jira
      serverId425b2b0a-557c-3c0c-b515-579789cceedb
      keyCPS-866