added module-revision Yang
This commit is contained in:
parent
e8983a4be5
commit
0bf838eb8c
4 changed files with 401 additions and 10 deletions
|
|
@ -196,7 +196,7 @@ syntax errors or invalidated XML.
|
||||||
|
|
||||||
## Repair
|
## Repair
|
||||||
|
|
||||||
If the system is in the failsafe mode (or fails to start), a user can
|
If the system is in failsafe mode (or fails to start), a user can
|
||||||
repair a broken configuration and then restart the backend. This can
|
repair a broken configuration and then restart the backend. This can
|
||||||
be done out-of-band by editing the startup db and then restarting
|
be done out-of-band by editing the startup db and then restarting
|
||||||
clixon.
|
clixon.
|
||||||
|
|
@ -207,7 +207,7 @@ shows how to repair a startup datastore on-line.
|
||||||
|
|
||||||
However, on-line repair _cannot_ be made in the following circumstances:
|
However, on-line repair _cannot_ be made in the following circumstances:
|
||||||
* The broken configuration contains syntactic errors - the system cannot parse the XML.
|
* The broken configuration contains syntactic errors - the system cannot parse the XML.
|
||||||
* The startup mode is `running`. In this case, the broken config is in the `tmp` datastore that is not a recognized Netconf datastore, it has to be accessed out-of-band.
|
* The startup mode is `running`. In this case, the broken config is in the `tmp` datastore that is not a recognized Netconf datastore, and has to be accessed out-of-band.
|
||||||
* Netconf must be used. Restconf cannot separately access the different datastores.
|
* Netconf must be used. Restconf cannot separately access the different datastores.
|
||||||
|
|
||||||
First, copy the (broken) startup config to candidate. This is necessary since you cannot make `edit-config` calls to the startup db:
|
First, copy the (broken) startup config to candidate. This is necessary since you cannot make `edit-config` calls to the startup db:
|
||||||
|
|
@ -233,7 +233,7 @@ For example, assume `x` is obsolete syntax, then this is _not_ accepted:
|
||||||
</rpc>
|
</rpc>
|
||||||
```
|
```
|
||||||
|
|
||||||
Instead, assuming `y` is a valid syntax, this is allowed (`x` is not explicitly accessed):
|
Instead, assuming `y` is a valid syntax, the following operation is allowed since `x` is not explicitly accessed:
|
||||||
```
|
```
|
||||||
<rpc>
|
<rpc>
|
||||||
<edit-config>
|
<edit-config>
|
||||||
|
|
@ -252,7 +252,7 @@ Finally, the candidate is validate and committed:
|
||||||
</rpc>
|
</rpc>
|
||||||
```
|
```
|
||||||
|
|
||||||
This example is also used as a [test script](../test/test_upgrade_repair.sh).
|
The example shown in this Section is also available as a regression [test script](../test/test_upgrade_repair.sh).
|
||||||
|
|
||||||
## Flowcharts
|
## Flowcharts
|
||||||
|
|
||||||
|
|
@ -261,14 +261,14 @@ the configuration databases in the startup phase.
|
||||||
|
|
||||||
The flowchart starts in one of the modes (none, init, startup, running):
|
The flowchart starts in one of the modes (none, init, startup, running):
|
||||||
|
|
||||||
### init mode
|
### Init mode
|
||||||
|
|
||||||
```
|
```
|
||||||
reset
|
reset
|
||||||
running |--------+------------> GOTO EXTRA XML
|
running |--------+------------> GOTO EXTRA XML
|
||||||
```
|
```
|
||||||
|
|
||||||
### running mode
|
### Running mode
|
||||||
|
|
||||||
```
|
```
|
||||||
running ----+ |----------+--------> GOTO EXTRA XML
|
running ----+ |----------+--------> GOTO EXTRA XML
|
||||||
|
|
@ -277,7 +277,7 @@ tmp ------+-------+------+-----------+
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### startup mode
|
### Startup mode
|
||||||
```
|
```
|
||||||
reset
|
reset
|
||||||
running |--------+------------> GOTO EXTRA XML
|
running |--------+------------> GOTO EXTRA XML
|
||||||
|
|
@ -313,8 +313,6 @@ candidate +---------------------> CANDIDATE
|
||||||
repair restart
|
repair restart
|
||||||
tmp/startup --------+---------+----------------------->
|
tmp/startup --------+---------+----------------------->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Thanks
|
## Thanks
|
||||||
Thanks matt smith and dave cornejo for input
|
Thanks matt smith and dave cornejo for input
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -716,7 +716,7 @@ yang_order(yang_stmt *y)
|
||||||
ypp = yp->yn_parent; /* yang spec */
|
ypp = yp->yn_parent; /* yang spec */
|
||||||
for (i=0; i<ypp->yn_len; i++){ /* iterate through other modules */
|
for (i=0; i<ypp->yn_len; i++){ /* iterate through other modules */
|
||||||
ym = ypp->yn_stmt[i];
|
ym = ypp->yn_stmt[i];
|
||||||
if (yp == ym)
|
if (yp == (yang_node*)ym)
|
||||||
break;
|
break;
|
||||||
tot += ym->ys_len;
|
tot += ym->ys_len;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ YANGSPECS += ietf-netconf@2011-06-01.yang
|
||||||
YANGSPECS += ietf-netconf-acm@2018-02-14.yang
|
YANGSPECS += ietf-netconf-acm@2018-02-14.yang
|
||||||
YANGSPECS += ietf-restconf-monitoring@2017-01-26.yang
|
YANGSPECS += ietf-restconf-monitoring@2017-01-26.yang
|
||||||
YANGSPECS += ietf-netconf-monitoring@2010-10-04.yang
|
YANGSPECS += ietf-netconf-monitoring@2010-10-04.yang
|
||||||
|
YANGSPECS += ietf-module-revision@2018-08-08.yang
|
||||||
|
|
||||||
all:
|
all:
|
||||||
|
|
||||||
|
|
|
||||||
392
yang/standard/ietf-module-revision@2018-08-08.yang
Normal file
392
yang/standard/ietf-module-revision@2018-08-08.yang
Normal file
|
|
@ -0,0 +1,392 @@
|
||||||
|
module ietf-module-revision {
|
||||||
|
yang-version 1.1;
|
||||||
|
namespace "urn:ietf:params:xml:ns:yang:ietf-module-revision";
|
||||||
|
prefix ml;
|
||||||
|
|
||||||
|
import ietf-yang-library {
|
||||||
|
prefix yanglib;
|
||||||
|
}
|
||||||
|
import ietf-yang-types {
|
||||||
|
prefix yang;
|
||||||
|
}
|
||||||
|
|
||||||
|
organization
|
||||||
|
"IETF Network Modeling (NETMOD) Working Group";
|
||||||
|
contact
|
||||||
|
"WG Web: <https://datatracker.ietf.org/wg/netmod/>
|
||||||
|
|
||||||
|
WG List: <mailto:netmod@ietf.org>
|
||||||
|
|
||||||
|
Author: Qin Wu
|
||||||
|
<mailto:bill.wu@huawei.com>
|
||||||
|
Zitao Wang
|
||||||
|
<mailto:wangzitao@huawei.com>";
|
||||||
|
description
|
||||||
|
"This YANG module defines an module log.";
|
||||||
|
|
||||||
|
revision 2018-08-08 {
|
||||||
|
description
|
||||||
|
"Initial revision.";
|
||||||
|
reference "RFC XXXX: Using Metadata with YANG for Module revisions";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity operation-type {
|
||||||
|
description
|
||||||
|
"Abstract base identity for the operation type ";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity create {
|
||||||
|
base operation-type;
|
||||||
|
description
|
||||||
|
"Denotes create new data nodes";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity delete {
|
||||||
|
base operation-type;
|
||||||
|
description
|
||||||
|
"Denotes delete the target node";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity move {
|
||||||
|
base operation-type;
|
||||||
|
description
|
||||||
|
"Denote move the target node.";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity modify {
|
||||||
|
base operation-type;
|
||||||
|
description
|
||||||
|
"Denote modify the target data node.";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity statement-type {
|
||||||
|
description
|
||||||
|
"Base identity for statement type";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity feature-statement {
|
||||||
|
base statement-type;
|
||||||
|
description
|
||||||
|
"feature statement, if this type be chose, it means that the
|
||||||
|
feature or if-feature statement been modified";
|
||||||
|
}
|
||||||
|
identity identity-statement {
|
||||||
|
base statement-type;
|
||||||
|
description
|
||||||
|
"identity statement, if this type be chose, it means that the
|
||||||
|
identity statement been modified, for example, add new identity, etc.";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity grouping-statement {
|
||||||
|
base statement-type;
|
||||||
|
description
|
||||||
|
"grouping statement, if this type be chose, it means that the grouping
|
||||||
|
statement been modified.";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity typedef-statement {
|
||||||
|
base statement-type;
|
||||||
|
description
|
||||||
|
"typedef statement, if this type be chose, it means that the typedef
|
||||||
|
statement been modified.";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity augment-statement {
|
||||||
|
base statement-type;
|
||||||
|
description
|
||||||
|
"augment statement, if this type be chose, it means that the augment
|
||||||
|
statement been modified.";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity rpc-statement {
|
||||||
|
base statement-type;
|
||||||
|
description
|
||||||
|
"rpc statement, if this type be chose, it means that the rpc
|
||||||
|
statement been modified.";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity notification-statement {
|
||||||
|
base statement-type;
|
||||||
|
description
|
||||||
|
"notification statement, if this type be chose, it means that the notification
|
||||||
|
statement been modified.";
|
||||||
|
}
|
||||||
|
|
||||||
|
extension purpose {
|
||||||
|
argument name;
|
||||||
|
description
|
||||||
|
"The purpose can be used to mark the data nodes change purpose.
|
||||||
|
The name argument can be specified in the following recommended mode
|
||||||
|
- bug-fix, which can help user to understand the data nodes' changes present bug fix,
|
||||||
|
- new-function, which can help user to understand the data nodes' changes present new function,
|
||||||
|
- nmda-conform, which can help user to understand the data nodes' changes conform to NMDA,
|
||||||
|
|
||||||
|
and note that the user can argument the purpose name according to their sepcific requirements.";
|
||||||
|
}
|
||||||
|
|
||||||
|
grouping data-definition {
|
||||||
|
container data-definition {
|
||||||
|
leaf target-node {
|
||||||
|
type yang:xpath1.0;
|
||||||
|
mandatory true;
|
||||||
|
description
|
||||||
|
"Identifies the target data node for update.
|
||||||
|
Notice that, if the update-type equal to move or delete,
|
||||||
|
this target-node must point to the data node of old version.
|
||||||
|
\t
|
||||||
|
For example, suppose the target node is a YANG leaf named a,
|
||||||
|
and the previous version is:
|
||||||
|
\t
|
||||||
|
container foo {
|
||||||
|
leaf a { type string; }
|
||||||
|
leaf b { type int32; }
|
||||||
|
}
|
||||||
|
\t
|
||||||
|
the new version is:
|
||||||
|
container foo {
|
||||||
|
leaf b {type int32;}
|
||||||
|
}
|
||||||
|
\t
|
||||||
|
Therefore, the targe-node should be /foo/a.";
|
||||||
|
}
|
||||||
|
leaf location-point {
|
||||||
|
type yang:xpath1.0;
|
||||||
|
description
|
||||||
|
"Identifies the location point where the updates happened.";
|
||||||
|
}
|
||||||
|
leaf where {
|
||||||
|
when "derived-from-or-self(../../change-operation, 'move')" {
|
||||||
|
description
|
||||||
|
"This leaf only applies for 'move'
|
||||||
|
updates.";
|
||||||
|
}
|
||||||
|
type enumeration {
|
||||||
|
enum "before" {
|
||||||
|
description
|
||||||
|
"Insert or move a data node before the data resource
|
||||||
|
identified by the 'point' parameter.";
|
||||||
|
}
|
||||||
|
enum "after" {
|
||||||
|
description
|
||||||
|
"Insert or move a data node after the data resource
|
||||||
|
identified by the 'point' parameter.";
|
||||||
|
}
|
||||||
|
enum "first" {
|
||||||
|
description
|
||||||
|
"Insert or move a data node so it becomes ordered
|
||||||
|
as the first entry.";
|
||||||
|
}
|
||||||
|
enum "last" {
|
||||||
|
description
|
||||||
|
"Insert or move a data node so it becomes ordered
|
||||||
|
as the last entry.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default "last";
|
||||||
|
description
|
||||||
|
"Identifies where a data resource will be inserted
|
||||||
|
or moved.";
|
||||||
|
}
|
||||||
|
anydata data-definition {
|
||||||
|
when "derived-from-or-self(../../change-operation, 'modify')" {
|
||||||
|
description
|
||||||
|
"This nodes only be present when
|
||||||
|
the 'change-operation' equal to 'modify'.";
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"This nodes used for present the definitions before updated.
|
||||||
|
And this nodes only be present when
|
||||||
|
the 'change-operation' equal to 'modify'.";
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"Container for data statement";
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"Grouping for data definition";
|
||||||
|
}
|
||||||
|
|
||||||
|
grouping other-statement {
|
||||||
|
container other-statement {
|
||||||
|
leaf statement-name {
|
||||||
|
type identityref {
|
||||||
|
base statement-type;
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"Statement name, for example, identity, feature, typedef, etc.";
|
||||||
|
}
|
||||||
|
anydata statement-definition {
|
||||||
|
description
|
||||||
|
"This nodes used for present new the definitions.";
|
||||||
|
}
|
||||||
|
list substatements {
|
||||||
|
key "statement-name";
|
||||||
|
leaf statement-name {
|
||||||
|
type identityref {
|
||||||
|
base statement-type;
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"Statement name, for example, identity, feature, typedef, etc.";
|
||||||
|
}
|
||||||
|
anydata substatement-definition {
|
||||||
|
description
|
||||||
|
"This nodes used for present new the definitions.";
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"List for substatements updates";
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"Container for header statement updates";
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"Grouping for header statement";
|
||||||
|
}
|
||||||
|
|
||||||
|
grouping change-log {
|
||||||
|
list revision-change-log {
|
||||||
|
key "index";
|
||||||
|
leaf index {
|
||||||
|
type uint32;
|
||||||
|
description
|
||||||
|
"Index for module change log";
|
||||||
|
}
|
||||||
|
leaf change-operation {
|
||||||
|
type identityref {
|
||||||
|
base operation-type;
|
||||||
|
}
|
||||||
|
mandatory true;
|
||||||
|
description
|
||||||
|
"This leaf indicate the change operation, such as create, move, delete, modify, etc.";
|
||||||
|
}
|
||||||
|
choice yang-statements {
|
||||||
|
description
|
||||||
|
"Choice for various YANG statements that have been impacted.";
|
||||||
|
case data-definition-statement {
|
||||||
|
uses data-definition;
|
||||||
|
}
|
||||||
|
case other-statement {
|
||||||
|
uses other-statement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"List for module revision change log";
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"Grouping for module revision change log";
|
||||||
|
}
|
||||||
|
|
||||||
|
container yang-modules {
|
||||||
|
config false;
|
||||||
|
list module {
|
||||||
|
key "name revision";
|
||||||
|
leaf name {
|
||||||
|
type yang:yang-identifier;
|
||||||
|
description
|
||||||
|
"The YANG module or submodule name.";
|
||||||
|
}
|
||||||
|
leaf revision {
|
||||||
|
type yanglib:revision-identifier;
|
||||||
|
description
|
||||||
|
"The YANG module or submodule revision date. If no revision
|
||||||
|
statement is present in the YANG module or submodule, this
|
||||||
|
leaf is not instantiated.";
|
||||||
|
}
|
||||||
|
leaf backward-compatible {
|
||||||
|
type boolean;
|
||||||
|
description
|
||||||
|
"Indicates whether it is a backward compatible version.
|
||||||
|
If this parameter is set to true, it means that this version is
|
||||||
|
a backwards compatible version";
|
||||||
|
}
|
||||||
|
uses change-log;
|
||||||
|
description
|
||||||
|
"List for module updated log";
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"This container present the modules updated log.";
|
||||||
|
}
|
||||||
|
augment "/yanglib:yang-library/yanglib:module-set/yanglib:module" {
|
||||||
|
description
|
||||||
|
"Augment the yang library with backward compatibility indication.";
|
||||||
|
leaf backward-compatible {
|
||||||
|
type boolean;
|
||||||
|
description
|
||||||
|
"backward compatibility indication.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
augment "/yanglib:yang-library/yanglib:module-set/yanglib:module/yanglib:submodule" {
|
||||||
|
description
|
||||||
|
"Augment the yang library with backward compatibility indication.";
|
||||||
|
leaf backward-compatible {
|
||||||
|
type boolean;
|
||||||
|
description
|
||||||
|
"backward compatibility indication.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rpc module-revision-change {
|
||||||
|
description
|
||||||
|
"Module Node change query operation.";
|
||||||
|
input {
|
||||||
|
leaf source-module-name {
|
||||||
|
type yang:yang-identifier;
|
||||||
|
mandatory true;
|
||||||
|
description
|
||||||
|
"The Source YANG module or submodule name.";
|
||||||
|
}
|
||||||
|
leaf source-revision {
|
||||||
|
type yanglib:revision-identifier;
|
||||||
|
description
|
||||||
|
"The Source YANG module revision date. If no revision
|
||||||
|
statement is present in the YANG module or submodule, this
|
||||||
|
leaf is not instantiated.";
|
||||||
|
}
|
||||||
|
leaf target-module-name {
|
||||||
|
type yang:yang-identifier;
|
||||||
|
mandatory true;
|
||||||
|
description
|
||||||
|
"The Target YANG module or submodule name.";
|
||||||
|
}
|
||||||
|
leaf target-revision {
|
||||||
|
type yanglib:revision-identifier;
|
||||||
|
description
|
||||||
|
"The target YANG module revision date. If no revision
|
||||||
|
statement is present in the YANG module or submodule, this
|
||||||
|
leaf is not instantiated.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
output {
|
||||||
|
choice status-response{
|
||||||
|
leaf wrong-match{
|
||||||
|
type empty;
|
||||||
|
description
|
||||||
|
"This leaf indicates that two modules have nothing in common.";
|
||||||
|
}
|
||||||
|
list data-nodes {
|
||||||
|
key "data-node-name";
|
||||||
|
description
|
||||||
|
"Each entry represents a data node of a given module that
|
||||||
|
have been changed from source revision of
|
||||||
|
a module to target revision of the module.";
|
||||||
|
leaf data-node-name {
|
||||||
|
type string;
|
||||||
|
description
|
||||||
|
"a data node name of a given module that
|
||||||
|
has been changed.";
|
||||||
|
}
|
||||||
|
leaf is-new-node {
|
||||||
|
type boolean;
|
||||||
|
description
|
||||||
|
"indicate the data node is newly introduced node in the target revision.";
|
||||||
|
}
|
||||||
|
leaf change-operation {
|
||||||
|
type identityref {
|
||||||
|
base operation-type;
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"This leaf indicate the change operation,
|
||||||
|
such as create, move, delete, modify, etc.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue