added ietf-yang-patch.yang and enabled clixon_util_validate
This commit is contained in:
parent
f7f24949d6
commit
b1e5e8548a
2 changed files with 391 additions and 1 deletions
|
|
@ -91,7 +91,7 @@ APPSRC += clixon_util_path.c
|
||||||
APPSRC += clixon_util_datastore.c
|
APPSRC += clixon_util_datastore.c
|
||||||
APPSRC += clixon_util_regexp.c
|
APPSRC += clixon_util_regexp.c
|
||||||
APPSRC += clixon_util_socket.c
|
APPSRC += clixon_util_socket.c
|
||||||
# APPSRC += clixon_util_validate.c
|
APPSRC += clixon_util_validate.c
|
||||||
APPSRC += clixon_netconf_ssh_callhome.c
|
APPSRC += clixon_netconf_ssh_callhome.c
|
||||||
APPSRC += clixon_netconf_ssh_callhome_client.c
|
APPSRC += clixon_netconf_ssh_callhome_client.c
|
||||||
ifdef with_restconf
|
ifdef with_restconf
|
||||||
|
|
|
||||||
390
yang/mandatory/ietf-yang-patch@2017-02-22.yang
Normal file
390
yang/mandatory/ietf-yang-patch@2017-02-22.yang
Normal file
|
|
@ -0,0 +1,390 @@
|
||||||
|
module ietf-yang-patch {
|
||||||
|
yang-version 1.1;
|
||||||
|
namespace "urn:ietf:params:xml:ns:yang:ietf-yang-patch";
|
||||||
|
prefix "ypatch";
|
||||||
|
|
||||||
|
import ietf-restconf { prefix rc; }
|
||||||
|
|
||||||
|
organization
|
||||||
|
"IETF NETCONF (Network Configuration) Working Group";
|
||||||
|
|
||||||
|
contact
|
||||||
|
"WG Web: <https://datatracker.ietf.org/wg/netconf/>
|
||||||
|
WG List: <mailto:netconf@ietf.org>
|
||||||
|
|
||||||
|
Author: Andy Bierman
|
||||||
|
<mailto:andy@yumaworks.com>
|
||||||
|
|
||||||
|
Author: Martin Bjorklund
|
||||||
|
<mailto:mbj@tail-f.com>
|
||||||
|
|
||||||
|
Author: Kent Watsen
|
||||||
|
<mailto:kwatsen@juniper.net>";
|
||||||
|
|
||||||
|
description
|
||||||
|
"This module contains conceptual YANG specifications
|
||||||
|
for the YANG Patch and YANG Patch Status data structures.
|
||||||
|
|
||||||
|
Note that the YANG definitions within this module do not
|
||||||
|
represent configuration data of any kind.
|
||||||
|
The YANG grouping statements provide a normative syntax
|
||||||
|
for XML and JSON message-encoding purposes.
|
||||||
|
|
||||||
|
Copyright (c) 2017 IETF Trust and the persons identified as
|
||||||
|
authors of the code. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or
|
||||||
|
without modification, is permitted pursuant to, and subject
|
||||||
|
to the license terms contained in, the Simplified BSD License
|
||||||
|
set forth in Section 4.c of the IETF Trust's Legal Provisions
|
||||||
|
Relating to IETF Documents
|
||||||
|
(http://trustee.ietf.org/license-info).
|
||||||
|
|
||||||
|
This version of this YANG module is part of RFC 8072; see
|
||||||
|
the RFC itself for full legal notices.";
|
||||||
|
|
||||||
|
revision 2017-02-22 {
|
||||||
|
description
|
||||||
|
"Initial revision.";
|
||||||
|
reference
|
||||||
|
"RFC 8072: YANG Patch Media Type.";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef target-resource-offset {
|
||||||
|
type string;
|
||||||
|
description
|
||||||
|
"Contains a data resource identifier string representing
|
||||||
|
a sub-resource within the target resource.
|
||||||
|
The document root for this expression is the
|
||||||
|
target resource that is specified in the
|
||||||
|
protocol operation (e.g., the URI for the PATCH request).
|
||||||
|
|
||||||
|
This string is encoded according to the same rules as those
|
||||||
|
for a data resource identifier in a RESTCONF request URI.";
|
||||||
|
reference
|
||||||
|
"RFC 8040, Section 3.5.3.";
|
||||||
|
}
|
||||||
|
|
||||||
|
rc:yang-data "yang-patch" {
|
||||||
|
uses yang-patch;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc:yang-data "yang-patch-status" {
|
||||||
|
uses yang-patch-status;
|
||||||
|
}
|
||||||
|
|
||||||
|
grouping yang-patch {
|
||||||
|
|
||||||
|
description
|
||||||
|
"A grouping that contains a YANG container representing the
|
||||||
|
syntax and semantics of a YANG Patch edit request message.";
|
||||||
|
|
||||||
|
container yang-patch {
|
||||||
|
description
|
||||||
|
"Represents a conceptual sequence of datastore edits,
|
||||||
|
called a patch. Each patch is given a client-assigned
|
||||||
|
patch identifier. Each edit MUST be applied
|
||||||
|
in ascending order, and all edits MUST be applied.
|
||||||
|
If any errors occur, then the target datastore MUST NOT
|
||||||
|
be changed by the YANG Patch operation.
|
||||||
|
|
||||||
|
It is possible for a datastore constraint violation to occur
|
||||||
|
due to any node in the datastore, including nodes not
|
||||||
|
included in the 'edit' list. Any validation errors MUST
|
||||||
|
be reported in the reply message.";
|
||||||
|
|
||||||
|
reference
|
||||||
|
"RFC 7950, Section 8.3.";
|
||||||
|
|
||||||
|
leaf patch-id {
|
||||||
|
type string;
|
||||||
|
mandatory true;
|
||||||
|
description
|
||||||
|
"An arbitrary string provided by the client to identify
|
||||||
|
the entire patch. Error messages returned by the server
|
||||||
|
that pertain to this patch will be identified by this
|
||||||
|
'patch-id' value. A client SHOULD attempt to generate
|
||||||
|
unique 'patch-id' values to distinguish between
|
||||||
|
transactions from multiple clients in any audit logs
|
||||||
|
maintained by the server.";
|
||||||
|
}
|
||||||
|
|
||||||
|
leaf comment {
|
||||||
|
type string;
|
||||||
|
description
|
||||||
|
"An arbitrary string provided by the client to describe
|
||||||
|
the entire patch. This value SHOULD be present in any
|
||||||
|
audit logging records generated by the server for the
|
||||||
|
patch.";
|
||||||
|
}
|
||||||
|
|
||||||
|
list edit {
|
||||||
|
key edit-id;
|
||||||
|
ordered-by user;
|
||||||
|
|
||||||
|
description
|
||||||
|
"Represents one edit within the YANG Patch request message.
|
||||||
|
The 'edit' list is applied in the following manner:
|
||||||
|
|
||||||
|
- The first edit is conceptually applied to a copy
|
||||||
|
of the existing target datastore, e.g., the
|
||||||
|
running configuration datastore.
|
||||||
|
- Each ascending edit is conceptually applied to
|
||||||
|
the result of the previous edit(s).
|
||||||
|
- After all edits have been successfully processed,
|
||||||
|
the result is validated according to YANG constraints.
|
||||||
|
- If successful, the server will attempt to apply
|
||||||
|
the result to the target datastore.";
|
||||||
|
|
||||||
|
leaf edit-id {
|
||||||
|
type string;
|
||||||
|
description
|
||||||
|
"Arbitrary string index for the edit.
|
||||||
|
Error messages returned by the server that pertain
|
||||||
|
to a specific edit will be identified by this value.";
|
||||||
|
}
|
||||||
|
|
||||||
|
leaf operation {
|
||||||
|
type enumeration {
|
||||||
|
enum create {
|
||||||
|
description
|
||||||
|
"The target data node is created using the supplied
|
||||||
|
value, only if it does not already exist. The
|
||||||
|
'target' leaf identifies the data node to be
|
||||||
|
created, not the parent data node.";
|
||||||
|
}
|
||||||
|
enum delete {
|
||||||
|
description
|
||||||
|
"Delete the target node, only if the data resource
|
||||||
|
currently exists; otherwise, return an error.";
|
||||||
|
}
|
||||||
|
|
||||||
|
enum insert {
|
||||||
|
description
|
||||||
|
"Insert the supplied value into a user-ordered
|
||||||
|
list or leaf-list entry. The target node must
|
||||||
|
represent a new data resource. If the 'where'
|
||||||
|
parameter is set to 'before' or 'after', then
|
||||||
|
the 'point' parameter identifies the insertion
|
||||||
|
point for the target node.";
|
||||||
|
}
|
||||||
|
enum merge {
|
||||||
|
description
|
||||||
|
"The supplied value is merged with the target data
|
||||||
|
node.";
|
||||||
|
}
|
||||||
|
enum move {
|
||||||
|
description
|
||||||
|
"Move the target node. Reorder a user-ordered
|
||||||
|
list or leaf-list. The target node must represent
|
||||||
|
an existing data resource. If the 'where' parameter
|
||||||
|
is set to 'before' or 'after', then the 'point'
|
||||||
|
parameter identifies the insertion point to move
|
||||||
|
the target node.";
|
||||||
|
}
|
||||||
|
enum replace {
|
||||||
|
description
|
||||||
|
"The supplied value is used to replace the target
|
||||||
|
data node.";
|
||||||
|
}
|
||||||
|
enum remove {
|
||||||
|
description
|
||||||
|
"Delete the target node if it currently exists.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mandatory true;
|
||||||
|
description
|
||||||
|
"The datastore operation requested for the associated
|
||||||
|
'edit' entry.";
|
||||||
|
}
|
||||||
|
|
||||||
|
leaf target {
|
||||||
|
type target-resource-offset;
|
||||||
|
mandatory true;
|
||||||
|
description
|
||||||
|
"Identifies the target data node for the edit
|
||||||
|
operation. If the target has the value '/', then
|
||||||
|
the target data node is the target resource.
|
||||||
|
The target node MUST identify a data resource,
|
||||||
|
not the datastore resource.";
|
||||||
|
}
|
||||||
|
|
||||||
|
leaf point {
|
||||||
|
when "(../operation = 'insert' or ../operation = 'move')"
|
||||||
|
+ "and (../where = 'before' or ../where = 'after')" {
|
||||||
|
description
|
||||||
|
"This leaf only applies for 'insert' or 'move'
|
||||||
|
operations, before or after an existing entry.";
|
||||||
|
}
|
||||||
|
type target-resource-offset;
|
||||||
|
description
|
||||||
|
"The absolute URL path for the data node that is being
|
||||||
|
used as the insertion point or move point for the
|
||||||
|
target of this 'edit' entry.";
|
||||||
|
}
|
||||||
|
|
||||||
|
leaf where {
|
||||||
|
when "../operation = 'insert' or ../operation = 'move'" {
|
||||||
|
description
|
||||||
|
"This leaf only applies for 'insert' or 'move'
|
||||||
|
operations.";
|
||||||
|
}
|
||||||
|
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. YANG only allows these operations for
|
||||||
|
list and leaf-list data nodes that are
|
||||||
|
'ordered-by user'.";
|
||||||
|
}
|
||||||
|
|
||||||
|
anydata value {
|
||||||
|
when "../operation = 'create' "
|
||||||
|
+ "or ../operation = 'merge' "
|
||||||
|
+ "or ../operation = 'replace' "
|
||||||
|
+ "or ../operation = 'insert'" {
|
||||||
|
description
|
||||||
|
"The anydata 'value' is only used for 'create',
|
||||||
|
'merge', 'replace', and 'insert' operations.";
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"Value used for this edit operation. The anydata 'value'
|
||||||
|
contains the target resource associated with the
|
||||||
|
'target' leaf.
|
||||||
|
|
||||||
|
For example, suppose the target node is a YANG container
|
||||||
|
named foo:
|
||||||
|
|
||||||
|
container foo {
|
||||||
|
leaf a { type string; }
|
||||||
|
leaf b { type int32; }
|
||||||
|
}
|
||||||
|
|
||||||
|
The 'value' node contains one instance of foo:
|
||||||
|
|
||||||
|
<value>
|
||||||
|
<foo xmlns='example-foo-namespace'>
|
||||||
|
<a>some value</a>
|
||||||
|
<b>42</b>
|
||||||
|
</foo>
|
||||||
|
</value>
|
||||||
|
";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // grouping yang-patch
|
||||||
|
|
||||||
|
grouping yang-patch-status {
|
||||||
|
|
||||||
|
description
|
||||||
|
"A grouping that contains a YANG container representing the
|
||||||
|
syntax and semantics of a YANG Patch Status response
|
||||||
|
message.";
|
||||||
|
|
||||||
|
container yang-patch-status {
|
||||||
|
description
|
||||||
|
"A container representing the response message sent by the
|
||||||
|
server after a YANG Patch edit request message has been
|
||||||
|
processed.";
|
||||||
|
|
||||||
|
leaf patch-id {
|
||||||
|
type string;
|
||||||
|
mandatory true;
|
||||||
|
description
|
||||||
|
"The 'patch-id' value used in the request.";
|
||||||
|
}
|
||||||
|
|
||||||
|
choice global-status {
|
||||||
|
description
|
||||||
|
"Report global errors or complete success.
|
||||||
|
If there is no case selected, then errors
|
||||||
|
are reported in the 'edit-status' container.";
|
||||||
|
|
||||||
|
case global-errors {
|
||||||
|
uses rc:errors;
|
||||||
|
description
|
||||||
|
"This container will be present if global errors that
|
||||||
|
are unrelated to a specific edit occurred.";
|
||||||
|
}
|
||||||
|
leaf ok {
|
||||||
|
type empty;
|
||||||
|
description
|
||||||
|
"This leaf will be present if the request succeeded
|
||||||
|
and there are no errors reported in the 'edit-status'
|
||||||
|
container.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
container edit-status {
|
||||||
|
description
|
||||||
|
"This container will be present if there are
|
||||||
|
edit-specific status responses to report.
|
||||||
|
If all edits succeeded and the 'global-status'
|
||||||
|
returned is 'ok', then a server MAY omit this
|
||||||
|
container.";
|
||||||
|
|
||||||
|
list edit {
|
||||||
|
key edit-id;
|
||||||
|
|
||||||
|
description
|
||||||
|
"Represents a list of status responses,
|
||||||
|
corresponding to edits in the YANG Patch
|
||||||
|
request message. If an 'edit' entry was
|
||||||
|
skipped or not reached by the server,
|
||||||
|
then this list will not contain a corresponding
|
||||||
|
entry for that edit.";
|
||||||
|
|
||||||
|
leaf edit-id {
|
||||||
|
type string;
|
||||||
|
description
|
||||||
|
"Response status is for the 'edit' list entry
|
||||||
|
with this 'edit-id' value.";
|
||||||
|
}
|
||||||
|
|
||||||
|
choice edit-status-choice {
|
||||||
|
description
|
||||||
|
"A choice between different types of status
|
||||||
|
responses for each 'edit' entry.";
|
||||||
|
leaf ok {
|
||||||
|
type empty;
|
||||||
|
description
|
||||||
|
"This 'edit' entry was invoked without any
|
||||||
|
errors detected by the server associated
|
||||||
|
with this edit.";
|
||||||
|
}
|
||||||
|
case errors {
|
||||||
|
uses rc:errors;
|
||||||
|
description
|
||||||
|
"The server detected errors associated with the
|
||||||
|
edit identified by the same 'edit-id' value.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} // grouping yang-patch-status
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue