From: Robert Varga Date: Fri, 24 May 2019 14:30:12 +0000 (+0200) Subject: Add ietf-netconf-nmda data model X-Git-Tag: release/sodium~54 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=efff2208ab828b971eb6d497b0850304608c36e1;p=netconf.git Add ietf-netconf-nmda data model This adds NMDA and with-defaults models, so that we can build up the implementation. Change-Id: I33104b40863983df23b0f1984922daf294c2fa4f Signed-off-by: Robert Varga --- diff --git a/features/netconf/odl-netconf-api/pom.xml b/features/netconf/odl-netconf-api/pom.xml index 4928cd8d21..5d830e19fd 100644 --- a/features/netconf/odl-netconf-api/pom.xml +++ b/features/netconf/odl-netconf-api/pom.xml @@ -68,6 +68,12 @@ xml features + + org.opendaylight.mdsal.model + odl-mdsal-model-rfc8342 + xml + features + org.opendaylight.netconf @@ -87,7 +93,7 @@ org.opendaylight.netconf - ietf-netconf-with-defaults + ietf-netconf-nmda diff --git a/features/netconf/odl-netconf-api/src/main/feature/feature.xml b/features/netconf/odl-netconf-api/src/main/feature/feature.xml index 99e95f150c..19a6a46e07 100644 --- a/features/netconf/odl-netconf-api/src/main/feature/feature.xml +++ b/features/netconf/odl-netconf-api/src/main/feature/feature.xml @@ -11,5 +11,6 @@ odl-netty-4 odl-yangtools-parser-api odl-mdsal-model-rfc7895 + odl-mdsal-model-rfc8342 diff --git a/netconf/models/ietf-netconf-nmda/pom.xml b/netconf/models/ietf-netconf-nmda/pom.xml new file mode 100644 index 0000000000..e4ecf0210c --- /dev/null +++ b/netconf/models/ietf-netconf-nmda/pom.xml @@ -0,0 +1,39 @@ + + + + 4.0.0 + + + org.opendaylight.netconf + netconf-parent + 1.7.0-SNAPSHOT + ../../netconf-parent + + + org.opendaylight.netconf + ietf-netconf-nmda + 1.7.0-SNAPSHOT + bundle + ${project.artifactId} + + + + org.opendaylight.mdsal.binding.model.ietf + rfc6991 + + + org.opendaylight.mdsal.binding.model.ietf + rfc8342 + + + org.opendaylight.netconf + ietf-netconf-with-defaults + + + diff --git a/netconf/models/ietf-netconf-nmda/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/netconf/nmda/rev190107/GetDataInputMaxDepthBuilder.java b/netconf/models/ietf-netconf-nmda/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/netconf/nmda/rev190107/GetDataInputMaxDepthBuilder.java new file mode 100644 index 0000000000..8899520844 --- /dev/null +++ b/netconf/models/ietf-netconf-nmda/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/netconf/nmda/rev190107/GetDataInputMaxDepthBuilder.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */package org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.nmda.rev190107; + +import java.util.Optional; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.nmda.rev190107.GetDataInput.MaxDepth; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.nmda.rev190107.GetDataInput.MaxDepth.Enumeration; + +/** + * MaxDepth utilities. + */ +public final class GetDataInputMaxDepthBuilder { + private GetDataInputMaxDepthBuilder() { + // Exists only to defeat instantiation. + } + + public static MaxDepth getDefaultInstance(final String defaultValue) { + final Optional optEnum = Enumeration.forName(defaultValue); + if (optEnum.isPresent()) { + return new MaxDepth(optEnum.get()); + } + // FIXME: consider being stricter about number formats here + return new MaxDepth(Integer.valueOf(defaultValue)); + } +} diff --git a/netconf/models/ietf-netconf-nmda/src/main/yang/ietf-netconf-nmda@2019-01-07.yang b/netconf/models/ietf-netconf-nmda/src/main/yang/ietf-netconf-nmda@2019-01-07.yang new file mode 100644 index 0000000000..cf537dc609 --- /dev/null +++ b/netconf/models/ietf-netconf-nmda/src/main/yang/ietf-netconf-nmda@2019-01-07.yang @@ -0,0 +1,387 @@ +module ietf-netconf-nmda { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-nmda"; + prefix ncds; + + import ietf-yang-types { + prefix yang; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-datastores { + prefix ds; + reference + "RFC 8342: Network Management Datastore Architecture + (NMDA)"; + } + import ietf-origin { + prefix or; + reference + "RFC 8342: Network Management Datastore Architecture + (NMDA)"; + } + import ietf-netconf { + prefix nc; + reference + "RFC 6241: Network Configuration Protocol (NETCONF)"; + } + import ietf-netconf-with-defaults { + prefix ncwd; + reference + "RFC 6243: With-defaults Capability for NETCONF"; + } + + organization + "IETF NETCONF Working Group"; + + contact + "WG Web: + + WG List: + + Author: Martin Bjorklund + + + Author: Juergen Schoenwaelder + + + Author: Phil Shafer + + + Author: Kent Watsen + + + Author: Robert Wilton + "; + description + "This YANG module defines a set of NETCONF operations to support + the Network Management Datastore Architecture (NMDA). + + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', + 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, + they appear in all capitals, as shown here. + + Copyright (c) 2019 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 + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8526; see + the RFC itself for full legal notices."; + + revision 2019-01-07 { + description + "Initial revision."; + reference + "RFC 8526: NETCONF Extensions to Support the Network Management + Datastore Architecture"; + } + + feature origin { + description + "Indicates that the server supports the 'origin' annotation."; + reference + "RFC 8342: Network Management Datastore Architecture (NMDA)"; + } + + feature with-defaults { + description + "NETCONF :with-defaults capability. If the server advertises + the :with-defaults capability for a session, then this + feature must also be enabled for that session. Otherwise, + this feature must not be enabled."; + reference + "RFC 6243: With-defaults Capability for NETCONF, Section 4; and + RFC 8526: NETCONF Extensions to Support the Network Management + Datastore Architecture, Section 3.1.1.2"; + } + + rpc get-data { + description + "Retrieve data from an NMDA datastore. The content returned + by get-data must satisfy all filters, i.e., the filter + criteria are logically ANDed. + + Any ancestor nodes (including list keys) of nodes selected by + the filters are included in the response. + + The 'with-origin' parameter is only valid for an operational + datastore. If 'with-origin' is used with an invalid + datastore, then the server MUST return an element + with an value of 'invalid-value'. + + The 'with-defaults' parameter only applies to the operational + datastore if the NETCONF :with-defaults and + :with-operational-defaults capabilities are both advertised. + If the 'with-defaults' parameter is present in a request for + which it is not supported, then the server MUST return an + element with an value of + 'invalid-value'."; + input { + leaf datastore { + type ds:datastore-ref; + mandatory true; + + description + "Datastore from which to retrieve data. + + If the datastore is not supported by the server, then the + server MUST return an element with an + value of 'invalid-value'."; + } + choice filter-spec { + description + "The content filter specification for this request."; + anydata subtree-filter { + description + "This parameter identifies the portions of the + target datastore to retrieve."; + reference + "RFC 6241: Network Configuration Protocol (NETCONF), + Section 6"; + } + leaf xpath-filter { + if-feature "nc:xpath"; + type yang:xpath1.0; + description + "This parameter contains an XPath expression identifying + the portions of the target datastore to retrieve. + + If the expression returns a node-set, all nodes in the + node-set are selected by the filter. Otherwise, if the + expression does not return a node-set, then the + operation fails. + + The expression is evaluated in the following XPath + context: + + o The set of namespace declarations are those in + scope on the 'xpath-filter' leaf element. + + o The set of variable bindings is empty. + + o The function library is the core function library, + and the XPath functions are defined in Section 10 + of RFC 7950. + + o The context node is the root node of the target + datastore."; + } + } + leaf config-filter { + type boolean; + description + "Filter for nodes with the given value for their 'config' + property. When this leaf is set to 'true', only 'config + true' nodes are selected, and when set to 'false', only + 'config false' nodes are selected. If this leaf is not + present, no nodes are filtered."; + } + choice origin-filters { + when 'derived-from-or-self(datastore, "ds:operational")'; + if-feature "origin"; + description + "Filters configuration nodes based on the 'origin' + annotation. Configuration nodes that do not have an + 'origin' annotation are treated as if they have the + 'origin' annotation 'or:unknown'. + + System state nodes are not affected by origin-filters and + thus not filtered. Note that system state nodes can be + filtered with the 'config-filter' leaf."; + + leaf-list origin-filter { + type or:origin-ref; + description + "Filter based on the 'origin' annotation. A + configuration node matches the filter if its 'origin' + annotation is derived from or equal to any of the given + filter values."; + } + leaf-list negated-origin-filter { + type or:origin-ref; + description + "Filter based on the 'origin' annotation. A + configuration node matches the filter if its 'origin' + annotation is neither derived from nor equal to any of + the given filter values."; + } + } + leaf max-depth { + type union { + type uint16 { + range "1..65535"; + } + type enumeration { + enum unbounded { + description + "All descendant nodes are included."; + } + } + } + default "unbounded"; + description + "For each node selected by the filters, this parameter + selects how many conceptual subtree levels should be + returned in the reply. If the depth is 1, the reply + includes just the selected nodes but no children. If the + depth is 'unbounded', all descendant nodes are included."; + } + leaf with-origin { + when 'derived-from-or-self(../datastore, "ds:operational")'; + if-feature "origin"; + type empty; + description + "If this parameter is present, the server will return + the 'origin' annotation for the nodes that have one."; + } + uses ncwd:with-defaults-parameters { + if-feature "with-defaults"; + } + } + output { + anydata data { + description + "Copy of the source datastore subset that matched + the filter criteria (if any). An empty data + container indicates that the request did not + produce any results."; + } + } + } + + rpc edit-data { + description + "Edit data in an NMDA datastore. + + If an error condition occurs such that an error severity + element is generated, the server will stop + processing the operation and restore the + specified configuration to its complete state at + the start of this operation."; + input { + leaf datastore { + type ds:datastore-ref; + mandatory true; + + description + "Datastore that is the target of the operation. + + If the target datastore is not writable, or is not + supported by the server, then the server MUST return an + element with an value of + 'invalid-value'."; + } + leaf default-operation { + type enumeration { + enum merge { + description + "The default operation is merge."; + } + enum replace { + description + "The default operation is replace."; + } + enum none { + description + "There is no default operation."; + } + } + default "merge"; + description + "The default operation to use."; + } + choice edit-content { + mandatory true; + description + "The content for the edit operation."; + anydata config { + description + "Inline config content."; + } + leaf url { + if-feature "nc:url"; + type inet:uri; + description + "URL-based config content."; + } + } + } + } + + /* + * Augment the and operations with a + * "datastore" parameter. + */ + + augment "/nc:lock/nc:input/nc:target/nc:config-target" { + description + "Add NMDA datastore as target."; + leaf datastore { + type ds:datastore-ref; + description + "Datastore to lock. + + The operation is only supported on writable + datastores. + + If the operation is not supported by the server on + the specified target datastore, then the server MUST return + an element with an value of + 'invalid-value'."; + } + } + + augment "/nc:unlock/nc:input/nc:target/nc:config-target" { + description + "Add NMDA datastore as target."; + leaf datastore { + type ds:datastore-ref; + description + "Datastore to unlock. + + The operation is only supported on writable + datastores. + + If the operation is not supported by the server on + the specified target datastore, then the server MUST return + an element with an value of + 'invalid-value'."; + } + } + + /* + * Augment the operation with a + * "datastore" parameter. + */ + + augment "/nc:validate/nc:input/nc:source/nc:config-source" { + description + "Add NMDA datastore as source."; + leaf datastore { + type ds:datastore-ref; + description + "Datastore to validate. + + The operation is supported only on configuration + datastores. + + If the operation is not supported by the server + on the specified target datastore, then the server MUST + return an element with an value of + 'invalid-value'."; + } + } +} diff --git a/netconf/models/pom.xml b/netconf/models/pom.xml index ac5ab94058..10586fe7b0 100644 --- a/netconf/models/pom.xml +++ b/netconf/models/pom.xml @@ -31,6 +31,7 @@ ietf-netconf ietf-netconf-monitoring ietf-netconf-monitoring-extension + ietf-netconf-nmda ietf-netconf-notifications ietf-netconf-with-defaults diff --git a/netconf/netconf-artifacts/pom.xml b/netconf/netconf-artifacts/pom.xml index de64b8c3d6..5a44b4707f 100644 --- a/netconf/netconf-artifacts/pom.xml +++ b/netconf/netconf-artifacts/pom.xml @@ -139,6 +139,12 @@ ${project.version} + + ${project.groupId} + ietf-netconf-nmda + ${project.version} + + ${project.groupId} ietf-netconf-notifications