XML chanelog revision
This commit is contained in:
parent
3f68cca06c
commit
a0abf8436e
24 changed files with 948 additions and 848 deletions
|
|
@ -43,7 +43,7 @@ CLIXON_DATADIR = @CLIXON_DATADIR@
|
|||
YANGSPECS = clixon-config@2019-03-05.yang
|
||||
YANGSPECS += clixon-lib@2019-01-02.yang
|
||||
YANGSPECS += clixon-rfc5277@2008-07-01.yang
|
||||
YANGSPECS += clixon-yang-changelog@2019-03-21.yang
|
||||
YANGSPECS += clixon-xml-changelog@2019-03-21.yang
|
||||
|
||||
APPNAME = clixon # subdir ehere these files are installed
|
||||
|
||||
|
|
|
|||
|
|
@ -392,6 +392,18 @@ module clixon-config {
|
|||
info. When loaded at startup, a check is made if the system
|
||||
yang modules match";
|
||||
}
|
||||
leaf CLICON_XML_CHANGELOG {
|
||||
type boolean;
|
||||
default false;
|
||||
description "If true enable automatic upgrade using yang clixon
|
||||
changelog.";
|
||||
}
|
||||
leaf CLICON_XML_CHANGELOG_FILE {
|
||||
type string;
|
||||
description "Name of file with module revision changelog.
|
||||
If CLICON_XML_CHANGELOG is true, Clixon
|
||||
reads the module changelog from this file.";
|
||||
}
|
||||
leaf CLICON_USE_STARTUP_CONFIG {
|
||||
type int32;
|
||||
default 0;
|
||||
|
|
@ -428,18 +440,6 @@ module clixon-config {
|
|||
data. If enabled, module info will appear when doing
|
||||
netconf get or restconf GET";
|
||||
}
|
||||
leaf CLICON_YANG_CHANGELOG {
|
||||
type boolean;
|
||||
default false;
|
||||
description "If true enable automatic upgrade using yang clixon
|
||||
changelog.";
|
||||
}
|
||||
leaf CLICON_YANG_CHANGELOG_FILE {
|
||||
type string;
|
||||
description "Name of file with module revision changelog.
|
||||
If CLICON_YANG_CHANGELOG is true, Clixon
|
||||
reads the module changelog from this file.";
|
||||
}
|
||||
leaf CLICON_MODULE_SET_ID {
|
||||
type string;
|
||||
default "0";
|
||||
|
|
|
|||
134
yang/clixon/clixon-xml-changelog@2019-03-21.yang
Normal file
134
yang/clixon/clixon-xml-changelog@2019-03-21.yang
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
module clixon-xml-changelog {
|
||||
yang-version 1.1;
|
||||
namespace "http://clicon.org/xml-changelog";
|
||||
prefix ml;
|
||||
|
||||
import ietf-yang-library {
|
||||
prefix yanglib;
|
||||
}
|
||||
import ietf-yang-types {
|
||||
prefix yang;
|
||||
}
|
||||
|
||||
organization "Clixon";
|
||||
contact
|
||||
"Olof Hagsand <olof@hagsand.se>";
|
||||
description
|
||||
"This is experimental XML changelog module with several influences:
|
||||
1) draft-wang-netmod-module-revision-management-01, by:
|
||||
Qin Wu <mailto:bill.wu@huawei.com>
|
||||
Zitao Wang <mailto:wangzitao@huawei.com>
|
||||
2) XProc https://www.w3.org/TR/xproc/#xpath-context";
|
||||
|
||||
revision 2019-03-21 {
|
||||
description
|
||||
"Initial Clixon derived version";
|
||||
}
|
||||
|
||||
typedef operation_type {
|
||||
description
|
||||
"From: https://en.wikipedia.org/wiki/XML_pipeline:
|
||||
Rename - renames elements or attributes without modifying the content
|
||||
Replace - replaces elements or attributes
|
||||
Insert - adds a new data element to the output stream at a specified point
|
||||
Delete - removes an element or attribute (also known as pruning the input tree)
|
||||
Wrap - wraps elements with additional elements
|
||||
Reorder - changes the order of elements
|
||||
More inspiration in XProc: https://www.w3.org/TR/xproc/#ex2";
|
||||
type enumeration{
|
||||
enum rename {
|
||||
description "Rename the target node (NYI)";
|
||||
}
|
||||
enum replace {
|
||||
description "Replace the target data node
|
||||
modification is given by the leaf transform which
|
||||
is a string with %s where the original value
|
||||
is inserted";
|
||||
}
|
||||
enum insert {
|
||||
description "Create new data nodes and insert under an existing node";
|
||||
}
|
||||
enum delete {
|
||||
description "Delete the target node";
|
||||
}
|
||||
enum move {
|
||||
description "Move the target node(Added)";
|
||||
}
|
||||
enum wrap {
|
||||
description "Wraps elements with additional elements(NYI)";
|
||||
}
|
||||
enum reorder {
|
||||
description "Changes the order of elements (NYI)";
|
||||
}
|
||||
}
|
||||
}
|
||||
container yang-modules {
|
||||
config false;
|
||||
list module {
|
||||
key "namespace revision";
|
||||
leaf namespace {
|
||||
type string;
|
||||
description
|
||||
"The YANG namespace identifying a module or submodule.
|
||||
XML needs to be identified by namespace, translation to
|
||||
module name may not always be possible.";
|
||||
}
|
||||
leaf revision {
|
||||
type yanglib:revision-identifier;
|
||||
description
|
||||
"The YANG module or submodule revision date.
|
||||
This is the actual date of the changlelog items.
|
||||
Note however if the terminate flag is set, this is a virtual
|
||||
revision just in place to terminate the XML, such as removing or
|
||||
moving items,.";
|
||||
}
|
||||
leaf revfrom {
|
||||
type yanglib:revision-identifier;
|
||||
description
|
||||
"Optional revision from date. This changelog is effective in the
|
||||
range [from,to]. If from is not given the changelog is open-ended.
|
||||
Several changelogs may be applied if the upgrade spans multiple
|
||||
ranges: [from0,to0],..[fromN,toN]";
|
||||
}
|
||||
list change-log {
|
||||
description
|
||||
"List for module revision change log";
|
||||
key "index";
|
||||
leaf index {
|
||||
type uint32;
|
||||
description
|
||||
"Index for module change log";
|
||||
}
|
||||
leaf change-operation {
|
||||
type operation_type;
|
||||
mandatory true;
|
||||
description
|
||||
"This leaf indicate the change operation, such as create, move, delete, modify, etc.";
|
||||
}
|
||||
leaf target-node {
|
||||
type yang:xpath1.0;
|
||||
mandatory true;
|
||||
description
|
||||
"Identifies the target data node for update.
|
||||
for move, modify or delete the target-node points to
|
||||
the data node of the old version.
|
||||
For create, it is the parent where it should be
|
||||
inserted.";
|
||||
}
|
||||
leaf location-node {
|
||||
description
|
||||
"If op is move, this denotes the destination";
|
||||
type yang:xpath1.0;
|
||||
}
|
||||
leaf transform {
|
||||
description
|
||||
"If op is modify or create, this denotes how to
|
||||
transform the XML encoding.
|
||||
Special value %s for the original value.";
|
||||
type string;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,326 +0,0 @@
|
|||
module clixon-yang-changelog {
|
||||
yang-version 1.1;
|
||||
namespace "http://clicon.org/yang-changelog";
|
||||
prefix ml;
|
||||
|
||||
import ietf-yang-library {
|
||||
prefix yanglib;
|
||||
}
|
||||
import ietf-yang-types {
|
||||
prefix yang;
|
||||
}
|
||||
|
||||
organization "Clixon";
|
||||
contact
|
||||
"Olof Hagsand <olof@hagsand.se>";
|
||||
description
|
||||
"This is experimentalYANG changelog derived from:
|
||||
draft-wang-netmod-module-revision-management-01
|
||||
with the following contacts and references:
|
||||
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>";
|
||||
reference "draft-wang-netmod-module-revision-management-01";
|
||||
revision 2019-03-21 {
|
||||
description
|
||||
"Initial Clixon derived version";
|
||||
}
|
||||
|
||||
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.";
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue