Table of Contents |
---|
Status | ||||||
---|---|---|---|---|---|---|
|
...
- https://docs.opendaylight.org/en/latest/developer-guide/yang-tools.html*
- https://git.opendaylight.org/gerrit/admin/repos/yangtools
- https://gerrit.onap.org/r/admin/repos/ccsdk/sli/pluginsplugins
- https://javadoc.io/doc/org.opendaylight.yangtools
Additional Resources (still to be examined)
- https://javadocgithub.iocom/doc/org.opendaylight.yangtoolsPANTHEONtech/lighty-core
*Although this documentation link is to the latest ODL doc revision, it is very outdated and the code examples need significant updates, see findings in Mini-PoC below (bug reported: https://jira.opendaylight.org/browse/DOCS-126)
...
Description | Yang | Java Object View | Notes | XML Validation | JSON | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Datatypes and basic constraints | |||||||||||||
Basic String |
| TypeStatement TypeAwareDeclaredStatement.getType() | Yes | Yes | |||||||||
Mandatory Basic String |
|
| No | No | |||||||||
Limited String | leaf pnf-name { type string { length "0..256"; } |
| Yes | Yes | |||||||||
typedef (String) with pattern |
| List<PatternConstraint> RestrictedStringType.getPatternConstraints() | List<PatternConstraint> RestrictedStringType.getPatternConstraints() | Yes | Yes | ||||||||
Limited uint64 | leaf cid { type uint64 { range "0..503"; } } | org.opendaylight.yangtools.yang.model.util.type.RestrictedUint64Type | Yes | Yes | |||||||||
Limited uint64boolean with default value |
} | org.opendaylight.yangtools.yang.model.util.type.RestrictedUint64Type | Yes | Yes | boolean with default value |
| DerivedBooleanType | N/A | N/A | ||||
Unique | |||||||||||||
Unique | list server { key "name"; unique "ip port"; leaf name { type string; } leaf ip { type dotted-quad; } leaf port { type uint32; } } | org.opendaylight.yangtools.yang.model.utilapi.typestmt.DerivedBooleanTypeUniqueStatement | N/A | N/A | |||||||||
Unique | |||||||||||||
Unique | No | No | |||||||||||
Choice | |||||||||||||
Choice | choice transfer-method { leaf transfer-interval { type string; uint64 { range "15..2880"; } leaf ip { type dotted-quad; units minutes; } leaf port transfer-on-commit { type uint32empty; } } | org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement | No | No | |||||||||
Choice | |||||||||||||
Choice | choice transfer-method { leaf transfer-interval { type uint64 { range "15..2880"; } units minutes; } leaf transfer-on-commit { type empty; } } | ChoiceStatement | N/A | N/A | |||||||||
Must | |||||||||||||
Must | leaf ifType { type enumeration { enum ethernet; enum atm; } } leaf ifMTU { type uint32; } must "ifType != 'ethernet' or " + "(ifType = 'ethernet' and ifMTU = 1500)" error-message 466px"An ethernet MTU must be 1500"; } | org.opendaylight.yangtools.yang.model.api.stmt. | ChoiceStatementErrorMessageStatement | N/A | N/A | ||||||||
Must | |||||||||||||
Must | leaf ifType { type enumeration { enum ethernet; enum atm; } } leaf ifMTU { type uint32; } must "ifType != 'ethernet' or " + "(ifType = 'ethernet' and ifMTU = 1500)" error-message 466px"An ethernet MTU must be 1500"; } | No | No | ||||||||||
When | |||||||||||||
When | leaf a {
type boolean;
}
leaf b {
type string;
when "../a = 'true'";
} | org.opendaylight.yangtools.yang.model.api.stmt. | ErrorMessageStatementWhenStatement | No | No | ||||||||
WhenExtension | When | leaf a {
type boolean;
}
leaf b {
type string;
when "../a = 'true'";
} | |||||||||||
Extension declaration |
| N/A | |||||||||||
Extension usage | leaf attribute-with-temporal-storage { type string; cm-notify-api:store-state-ext "3d"; } | Extension declaration |
| N/A | Extension usage | leaf attribute-with-temporal-storage { type string; cm-notify-api:store-state-ext "3d"; } | org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement |
| No | No | |||
Extension | |||||||||||||
which extends public interface UnknownStatement<A> extends DeclaredStatement<A> { | N/A | ||||||||||||
Augmentation | |||||||||||||
augment "server" { when "port = '8787'"; leaf enable-debug { type boolean; } } | The additional leaf just appears in the SchemaTree (without any reference that it is an augmentation) | N/A | |||||||||||
RPC | |||||||||||||
rpc | rpc nbrlist-change-notification { | N/A | |||||||||||
rpc input | input { in a neighbor list for this fap service"; } | N/A | |||||||||||
rpc output | output { | N/A |
Yang Data Parsing and Validation
...
- The YangTools model parser is comprehensive and covers all possible Yang Language elements we might require
- Extensively used throughout ONAP and ODL projects
- Mature code, dates back to 2013 with contributions from many companies including Cisco and Redhat and Pantheon Tech.
- Parsing of JSON and XML data with validated for a a (parsed) model included
...