diff options
author | Dan Timoney <dtimoney@att.com> | 2017-09-05 20:33:51 -0400 |
---|---|---|
committer | Dan Timoney <dtimoney@att.com> | 2017-09-05 20:48:29 -0400 |
commit | c3342a09a1bec20195a9617ad5b31f5bd9ac7e00 (patch) | |
tree | 875d8294438f4887ef3e45f992eefc93976d6c14 /generic-resource-api/model | |
parent | eb2d40205c8fa043166027a10d9cdb10415e6cbf (diff) |
Seed code submit of generic-resource-api
Final seed code submit of generic-resource-api. This version is ready
to submit if it verifies clean.
Change-Id: Id5d5cec97a5deccfbda478c0dd7e1967900d76a1
Issue-ID: SDNC-45
Signed-off-by: Dan Timoney <dtimoney@att.com>
Diffstat (limited to 'generic-resource-api/model')
-rw-r--r-- | generic-resource-api/model/pom.xml | 161 | ||||
-rwxr-xr-x | generic-resource-api/model/scripts/python/yang2props.py | 57 | ||||
-rw-r--r-- | generic-resource-api/model/src/main/yang/GENERIC-RESOURCE-API.yang | 1670 |
3 files changed, 1888 insertions, 0 deletions
diff --git a/generic-resource-api/model/pom.xml b/generic-resource-api/model/pom.xml new file mode 100644 index 00000000..9b8b3fe1 --- /dev/null +++ b/generic-resource-api/model/pom.xml @@ -0,0 +1,161 @@ +<?xml version='1.0' encoding='UTF-8'?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.onap.sdnc.northbound</groupId> + <artifactId>generic-resource-api</artifactId> + <version>1.2.0-SNAPSHOT</version> + </parent> + + <artifactId>generic-resource-api.model</artifactId> + <packaging>bundle</packaging> + + <dependencies> + <dependency> + <groupId>org.opendaylight.mdsal</groupId> + <artifactId>yang-binding</artifactId> + <version>${odl.mdsal.yang.binding.version}</version> + </dependency> + <dependency> + <groupId>org.opendaylight.yangtools</groupId> + <artifactId>yang-common</artifactId> + <version>${odl.yangtools.version}</version> + </dependency> + <dependency> + <groupId>org.opendaylight.mdsal.model</groupId> + <artifactId>ietf-inet-types</artifactId> + <version>${odl.ietf-inet-types.version}</version> + </dependency> + <dependency> + <groupId>org.opendaylight.mdsal.model</groupId> + <artifactId>ietf-yang-types</artifactId> + <version>${odl.ietf-yang-types.version}</version> + </dependency> + </dependencies> + + <build> + + <plugins> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <extensions>true</extensions> + <configuration> + <instructions> + <Import-Package>*</Import-Package> + </instructions> + </configuration> + </plugin> + <plugin> + <groupId>org.opendaylight.yangtools</groupId> + <artifactId>yang-maven-plugin</artifactId> + <dependencies> + <dependency> + <groupId>org.opendaylight.mdsal</groupId> + <artifactId>maven-sal-api-gen-plugin</artifactId> + <version>${odl.sal.api.gen.plugin.version}</version> + <type>jar</type> + </dependency> + </dependencies> + <executions> + <execution> + <goals> + <goal>generate-sources</goal> + </goals> + <configuration> + <yangFilesRootDir>${yang.file.directory}</yangFilesRootDir> + <codeGenerators> + <generator> + <codeGeneratorClass>org.opendaylight.mdsal.binding.maven.api.gen.plugin.CodeGeneratorImpl</codeGeneratorClass> + <outputBaseDir>${salGeneratorPath}</outputBaseDir> + </generator> + </codeGenerators> + <inspectDependencies>true</inspectDependencies> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>exec-maven-plugin</artifactId> + <version>1.2.1</version> + <executions> + <execution> + <configuration> + <executable>python</executable> + <arguments> + <argument>scripts/python/yang2props.py</argument> + <argument>src/main/yang/GENERIC-RESOURCE-API.yang</argument> + <argument>target/generic-resource-api.properties</argument> + </arguments> + </configuration> + <id>generation</id> + <phase>generate-resources</phase> + <goals> + <goal>exec</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <executions> + <execution> + <id>attach-artifacts</id> + <goals> + <goal>attach-artifact</goal> + </goals> + <phase>package</phase> + <configuration> + <artifacts> + <artifact> + <file>${project.build.directory}/generic-resource-api.properties</file> + <type>properties</type> + <classifier>generic-resource-api</classifier> + </artifact> + </artifacts> + </configuration> + </execution> + </executions> + </plugin> + + </plugins> + <pluginManagement> + <plugins> + <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.--> + <plugin> + <groupId>org.eclipse.m2e</groupId> + <artifactId>lifecycle-mapping</artifactId> + <version>1.0.0</version> + <configuration> + <lifecycleMappingMetadata> + <pluginExecutions> + <pluginExecution> + <pluginExecutionFilter> + <groupId> + org.codehaus.mojo + </groupId> + <artifactId> + exec-maven-plugin + </artifactId> + <versionRange> + [1.2.1,) + </versionRange> + <goals> + <goal>exec</goal> + </goals> + </pluginExecutionFilter> + <action> + <ignore /> + </action> + </pluginExecution> + </pluginExecutions> + </lifecycleMappingMetadata> + </configuration> + </plugin> + </plugins> + </pluginManagement> + </build> +</project> diff --git a/generic-resource-api/model/scripts/python/yang2props.py b/generic-resource-api/model/scripts/python/yang2props.py new file mode 100755 index 00000000..559d31b8 --- /dev/null +++ b/generic-resource-api/model/scripts/python/yang2props.py @@ -0,0 +1,57 @@ +#!/usr/bin/python + +import re +import sys + + +# Convert word from foo-bar to FooBar +# words begining with a digit will be converted to _digit +def to_enum(s): + if s[0].isdigit(): + s = "_" + s + else: + s = s[0].upper() + s[1:] + return re.sub(r'(?!^)-([a-zA-Z])', lambda m: m.group(1).upper(), s) + +leaf = "" +val = "" +li = [] + +if len(sys.argv) < 3: + print 'yang2props.py <input yang> <output properties>' + sys.exit(2) + +with open(sys.argv[1], "r") as ins: + for line in ins: + # if we see a leaf save the name for later + if "leaf " in line: + match = re.search(r'leaf (\S+)', line) + if match: + leaf = match.group(1) + + # if we see enum convert the value to enum format and see if it changed + # if the value is different write a property entry + if "enum " in line: + match = re.search(r'enum "(\S+)";', line) + if match: + val = match.group(1) + enum = to_enum(val) + + # see if converting to enum changed the string + if val != enum: + property = "yang."+leaf+"."+enum+"="+val + if property not in li: + li.append( property) + + +# Open output file +fo = open(sys.argv[2], "wb") +fo.write("# yang conversion properties \n") +fo.write("# used to convert Enum back to the original yang value \n") +fo.write("\n".join(li)) +fo.write("\n") + +# Close opend file +fo.close() + + diff --git a/generic-resource-api/model/src/main/yang/GENERIC-RESOURCE-API.yang b/generic-resource-api/model/src/main/yang/GENERIC-RESOURCE-API.yang new file mode 100644 index 00000000..233fbaf8 --- /dev/null +++ b/generic-resource-api/model/src/main/yang/GENERIC-RESOURCE-API.yang @@ -0,0 +1,1670 @@ +module GENERIC-RESOURCE-API {
+
+ namespace "org:onap:sdnc:northbound:generic-resource";
+
+ prefix generic-resource-api;
+
+ import ietf-inet-types { prefix "inet"; revision-date "2010-09-24"; }
+
+ import ietf-yang-types { prefix yang; }
+
+ revision "2017-08-24" {
+ description
+ "ONAP Amsterdam version";
+ }
+
+ grouping service-model-infrastructure {
+ list service {
+ key "service-instance-id";
+ leaf service-instance-id {
+ description "Keep as M";
+ type string;
+ mandatory true;
+ }
+ uses service-data;
+ uses service-status;
+ }
+ }
+ grouping service-data {
+ container service-data {
+ uses service-operation-information;
+ uses service-topology;
+ uses service-level-oper-status;
+ container networks {
+ list network {
+ key "network-id";
+ leaf network-id {
+ type string;
+ mandatory true;
+ }
+ container network-data {
+ uses network-operation-information;
+ uses network-topology;
+ container network-provided-allotted-resources {
+ leaf-list network-provided-ar-id {
+ description "List of allotted resources using capacity from this network";
+ type string;
+ ordered-by user;
+ }
+ }
+ uses network-level-oper-status;
+ }
+ }
+ }
+ container vnfs {
+ list vnf {
+ key "vnf-id";
+ leaf vnf-id {
+ type string;
+ mandatory true;
+ }
+ container vnf-data {
+ uses vnf-operation-information;
+ uses vnf-topology;
+ container vnf-provided-allotted-resources {
+ leaf-list vnf-provided-ar-id {
+ description "List of allotted resources using capacity from this vnf";
+ type string;
+ ordered-by user;
+ }
+ }
+ uses vnf-level-oper-status;
+ container vf-modules {
+ list vf-module {
+ key "vf-module-id";
+ leaf vf-module-id {
+ type string;
+ mandatory true;
+ }
+ container vf-module-data {
+ uses vf-module-operation-information;
+ uses vf-module-topology;
+ uses vf-module-level-oper-status;
+ }
+ }
+ }
+ }
+ }
+ }
+ container consumed-allotted-resources {
+ list consumed-allotted-resource {
+ key "allotted-resource-id";
+ uses allotted-resource-info;
+ }
+ }
+ container provided-allotted-resources {
+ list provided-allotted-resource {
+ key "allotted-resource-id";
+ uses allotted-resource-info;
+ }
+ }
+ }
+ }
+ grouping service-status {
+ container service-status {
+ leaf response-code {
+ type string;
+ }
+ leaf response-message {
+ type string;
+ }
+ leaf final-indicator {
+ type string;
+ }
+ leaf request-status {
+ type enumeration {
+ enum "synccomplete";
+ enum "asynccomplete";
+ enum "notifycomplete";
+ }
+ }
+ leaf action {
+ description "value would one of possible request-actions; match the list in service-data oper-status";
+ type string;
+ }
+ leaf rpc-name {
+ type string;
+ }
+ leaf rpc-action {
+ description "this is the svc-action from the incoming request";
+ type enumeration {
+ enum "assign";
+ enum "activate";
+ enum "configure";
+ enum "delete";
+ enum "unassign";
+ enum "deactivate";
+ }
+ }
+ leaf response-timestamp {
+ type string;
+ }
+ }
+ }
+ grouping service-operation-information {
+ uses sdnc-request-header;
+ uses request-information;
+ uses service-information;
+ uses service-request-input;
+ }
+ grouping service-request-input {
+ container service-request-input {
+ leaf service-instance-name {
+ type string;
+ }
+ container service-input-parameters {
+ uses param;
+ }
+ }
+ }
+ grouping service-topology {
+ container service-topology {
+ uses service-topology-identifier;
+ uses ecomp-model-information;
+ uses service-assignments;
+ uses service-parameters;
+ }
+ }
+ grouping service-topology-identifier {
+ container service-topology-identifier {
+ leaf service-instance-id {
+ description "repeated";
+ type string;
+ }
+ leaf service-type {
+ description "tag labeled subscription-service-type in the service-information input";
+ type string;
+ }
+ leaf service-id {
+ description "from MSO input on STO assign";
+ type string;
+ }
+ leaf service-instance-name {
+ description "optionally comes from service-request-input container or is assigned by sdn-c";
+ type string;
+ }
+ leaf global-customer-id {
+ type string;
+ }
+ }
+ }
+ grouping service-assignments {
+ container service-assignments {
+ }
+ }
+ grouping service-parameters {
+ container service-parameters {
+ list service-parameter {
+ key "service-parameter-name";
+ leaf service-parameter-name {
+ type string;
+ }
+ leaf service-parameter-value {
+ type string;
+ }
+ }
+ }
+ }
+ grouping service-level-oper-status {
+ container service-level-oper-status {
+ uses oper-status-data;
+ }
+ }
+ grouping network-operation-information {
+ uses sdnc-request-header;
+ uses request-information;
+ uses service-information;
+ uses network-information;
+ uses network-request-input;
+ }
+ grouping network-information {
+ container network-information {
+ leaf network-id {
+ type string;
+ }
+ leaf network-type {
+ type string;
+ }
+ uses ecomp-model-information;
+ }
+ }
+ grouping network-request-input {
+ container network-request-input {
+ leaf network-name {
+ type string;
+ }
+ uses region-identifier;
+ container network-input-parameters {
+ uses param;
+ }
+ }
+ }
+ grouping network-topology {
+ container network-topology {
+ uses network-topology-identifier-structure;
+ uses region-identifier;
+ uses ecomp-model-information;
+ uses network-assignments;
+ uses network-parameters;
+ }
+ }
+ grouping network-topology-identifier-structure {
+ container network-topology-identifier-structure {
+ leaf network-id {
+ type string;
+ }
+ leaf network-name {
+ type string;
+ }
+ leaf network-role {
+ type string;
+ }
+ leaf network-type {
+ type string;
+ }
+ leaf network-technology {
+ description "should we keep this?";
+ type string;
+ }
+ leaf eipam-v4-address-plan {
+ description "??";
+ type string;
+ }
+ leaf eipam-v6-address-plan {
+ type string;
+ }
+ }
+ }
+ grouping network-assignments {
+ container network-assignments {
+ }
+ }
+ grouping network-parameters {
+ container network-parameters {
+ list network-parameter {
+ key "network-parameter-name";
+ leaf network-parameter-name {
+ type string;
+ }
+ leaf network-parameter-value {
+ type string;
+ }
+ }
+ }
+ }
+ grouping network-level-oper-status {
+ container network-level-oper-status {
+ uses oper-status-data;
+ }
+ }
+ grouping vnf-operation-information {
+ uses sdnc-request-header;
+ uses request-information;
+ uses service-information;
+ uses vnf-information;
+ uses vnf-request-input;
+ }
+ grouping vnf-information {
+ container vnf-information {
+ leaf vnf-id {
+ type string;
+ }
+ leaf vnf-type {
+ description "vnf-model-id in Pats model?in Pats vnf submodule, contained within vnf-instance-topology-identifier grouping (along with vnf-name and vnf-instance-id)";
+ type string;
+ }
+ uses ecomp-model-information;
+ }
+ }
+ grouping vnf-request-input {
+ container vnf-request-input {
+ leaf request-version {
+ description "keep this? e.g. 1702";
+ type string;
+ }
+ leaf vnf-name {
+ description "in Pats vnf submodule, contained within vnf-instance-topology-identifier (along with vnf-model-id and vnf-instance-id)";
+ type string;
+ }
+ uses region-identifier;
+ container vnf-networks {
+ list vnf-network {
+ key "network-role";
+ uses vnf-network-data;
+ }
+ }
+ container vnf-input-parameters {
+ uses param;
+ }
+ }
+ }
+ grouping vnf-topology {
+ container vnf-topology {
+ uses vnf-topology-identifier-structure;
+ uses region-identifier;
+ uses ecomp-model-information;
+ uses vnf-resource-assignments;
+ container vnf-parameters-data {
+ uses param;
+ }
+ }
+ }
+ grouping vnf-topology-identifier-structure {
+ container vnf-topology-identifier-structure {
+ leaf vnf-id {
+ type string;
+ }
+ leaf vnf-type {
+ description "In preload tree, this label is used for the vf-module-type";
+ type string;
+ }
+ leaf nf-type {
+ type string;
+ }
+ leaf nf-role {
+ type string;
+ }
+ leaf nf-function {
+ type string;
+ }
+ leaf nf-code {
+ description "used in vnf naming";
+ type string;
+ }
+ leaf vnf-name {
+ description "optionally comes from vnf-request-input container or is assigned by sdn-c";
+ type string;
+ }
+ }
+ }
+ grouping vnf-resource-assignments {
+ container vnf-resource-assignments {
+ leaf vnf-status {
+ description "Do we need this?Orchestration status from AAI - to be set by SDNCWill not be used for vIPR.";
+ type string;
+ }
+ container availability-zones {
+ leaf-list availability-zone {
+ description "Openstack availability zone name or UUID";
+ type string;
+ ordered-by user;
+ }
+ leaf max-count {
+ description "From the TOSCA data. Indicates the largest availability zone count needed by any vf-module in the VNF.";
+ type uint8;
+ }
+ }
+ container vnf-networks {
+ list vnf-network {
+ key "network-role";
+ uses vnf-network-data;
+ }
+ }
+ }
+ }
+ grouping vnf-network-data {
+ leaf network-role {
+ description "A Network Role to which a VNF must connect";
+ type string;
+ }
+ leaf network-name {
+ description "Unique Neutron UUID of an instance of the network role ";
+ type string;
+ }
+ leaf neutron-id {
+ description "Unique Neutron UUID of an instance of the network role ";
+ type string;
+ }
+ leaf network-id {
+ description "Unique Neutron UUID of an instance of the network role ";
+ type string;
+ }
+ leaf contrail-network-fqdn {
+ description "contrail network policy object";
+ type string;
+ }
+ container subnets-data {
+ list subnet-data {
+ key "ip-version";
+ leaf ip-version {
+ description "Should be ipv4 or ipv6";
+ type string;
+ }
+ leaf subnet-id {
+ description "subnet UUID to be passed into the HEAT template";
+ type string;
+ }
+ }
+ }
+ }
+ grouping vnf-level-oper-status {
+ container vnf-level-oper-status {
+ uses oper-status-data;
+ }
+ }
+ grouping vf-module-operation-information {
+ uses sdnc-request-header;
+ uses request-information;
+ uses service-information;
+ uses vnf-information;
+ uses vf-module-information;
+ uses vf-module-request-input;
+ }
+ grouping vf-module-information {
+ container vf-module-information {
+ leaf vf-module-id {
+ type string;
+ }
+ leaf vf-module-type {
+ type string;
+ }
+ uses ecomp-model-information;
+ }
+ }
+ grouping vf-module-request-input {
+ container vf-module-request-input {
+ leaf request-version {
+ description "keep this?";
+ type string;
+ }
+ leaf vf-module-name {
+ type string;
+ }
+ uses region-identifier;
+ container vf-module-input-parameters {
+ uses param;
+ }
+ }
+ }
+ grouping vf-module-topology {
+ container vf-module-topology {
+ uses vf-module-topology-identifier;
+ uses region-identifier;
+ uses ecomp-model-information;
+ uses vf-module-assignments;
+ container vf-module-parameters {
+ uses param;
+ }
+ }
+ }
+ grouping vf-module-topology-identifier {
+ container vf-module-topology-identifier {
+ leaf vf-module-id {
+ description "vf-module id";
+ type string;
+ }
+ leaf vf-module-name {
+ description "vf-module-name";
+ type string;
+ }
+ leaf vf-module-type {
+ description "In Pats model referred to as model-id";
+ type string;
+ }
+ }
+ }
+ grouping vf-module-assignments {
+ container vf-module-assignments {
+ leaf vf-module-status {
+ description "Do we need this?Orchestration status from AAI - to be set by SDNCNot being used for vIPR.";
+ type string;
+ }
+ container vms {
+ list vm {
+ key "vm-type";
+ uses vm-topology-data;
+ }
+ }
+ }
+ }
+ grouping vm-topology-data {
+ leaf vm-type {
+ type string;
+ mandatory true;
+ }
+ leaf nfc-naming-code {
+ description "used in vm naming(draft 29: changed from nfc-code)";
+ type string;
+ }
+ leaf vm-type-tag {
+ description "from tosca data on vfc";
+ type string;
+ }
+ leaf vm-count {
+ type uint8;
+ }
+ container vm-names {
+ leaf-list vm-name {
+ description "ordered-by: user";
+ type string;
+ ordered-by user;
+ }
+ }
+ container vm-networks {
+ list vm-network {
+ key "network-role";
+ uses vm-network-data;
+ }
+ }
+ }
+ grouping vm-network-data {
+ leaf network-role {
+ description "network (identified by role) that this VM connects to. Should also be included in the vnf-networks for the containing VNF";
+ type string;
+ mandatory true;
+ }
+ leaf network-role-tag {
+ type string;
+ }
+ container network-information-items {
+ list network-information-item {
+ key "ip-version";
+ leaf ip-version {
+ description "Use ipv4 or ipv6";
+ type string;
+ }
+ leaf use-dhcp {
+ description "Indicator to use DHCP on this network for this VM";
+ type enumeration {
+ enum "Y";
+ enum "N";
+ }
+ }
+ leaf ip-count {
+ description "The number of ip addresses to be assigned per vm for this network role";
+ type uint8;
+ }
+ container network-ips {
+ leaf-list network-ip {
+ description "List of assigned ip addresses of type ip-version on a network. Is there a way to specify format to indicate ipv4 or ipv6 format?";
+ type string;
+ ordered-by user;
+ }
+ }
+ }
+ }
+ container mac-addresses {
+ leaf-list mac-address {
+ description "List of network assignments for this vm-type";
+ type string;
+ ordered-by user;
+ }
+ }
+ container floating-ips {
+ leaf-list floating-ip-v4 {
+ description "Floating ipv4 for VMs of a given type on this network";
+ type inet:ip-address;
+ ordered-by user;
+ }
+ leaf-list floating-ip-v6 {
+ description "Floating ipv6 for VMs of a given type on this network";
+ type inet:ipv6-address;
+ ordered-by user;
+ }
+ }
+ container interface-route-prefixes {
+ leaf-list interface-route-prefix {
+ description "ordered-by: user";
+ type string;
+ ordered-by user;
+ }
+ }
+ container sriov-parameters {
+ container heat-vlan-filters {
+ leaf-list heat-vlan-filter {
+ type string;
+ ordered-by user;
+ }
+ }
+ container application-tags {
+ container c-tags {
+ leaf-list c-tag {
+ type string;
+ ordered-by user;
+ }
+ }
+ container s-tags {
+ leaf-list s-tag {
+ type string;
+ ordered-by user;
+ }
+ }
+ }
+ }
+ }
+ grouping vf-module-level-oper-status {
+ container vf-module-level-oper-status {
+ uses oper-status-data;
+ }
+ }
+ grouping allotted-resource-info {
+ leaf allotted-resource-id {
+ type string;
+ }
+ leaf allotted-resource-type {
+ description "Not an enum, but expected values are contrail-route and security-zone.";
+ type string;
+ }
+ leaf allotted-resource-pointer {
+ description "Pointer to the allotted-resources topology";
+ type string;
+ }
+ }
+ grouping contrail-route-operation-information {
+ uses sdnc-request-header;
+ uses request-information;
+ uses service-information;
+ uses allotted-resource-information;
+ uses contrail-route-request-input;
+ }
+ grouping contrail-route-request-input {
+ container contrail-route-request-input {
+ container source-network {
+ uses network-info;
+ }
+ container dest-network {
+ uses network-info;
+ }
+ container contrail-applied-service-info {
+ leaf service-instance-id {
+ description "The service-instance-id of the service in which the resource(s) providing the applied-service are. For vIPR, this is the service-instance-id of the vIPR-ATM service in which the vIPR-ATM VNF Contrail service is the applied service. MSO will populate with the input data.";
+ type string;
+ }
+ leaf contrail-fqdn {
+ description "For future use by MSO on input; MSO not expected to populate in 1707. If MSO can identify the contrail-fqdn of the Contrail applied service for this contrail-route, then it would be specified here on input. Otherwise, SDN-C will look it up by the vIPR-ATM VNF in the service-instance-id of the contrail-applied-service-info grouing.";
+ type string;
+ }
+ }
+ container contrail-route-input-parameters {
+ uses param;
+ }
+ }
+ }
+ grouping network-info {
+ leaf network-id {
+ type string;
+ }
+ leaf network-role {
+ type string;
+ }
+ }
+ grouping contrail-route-topology {
+ container contrail-route-topology {
+ uses allotted-resource-identifiers;
+ uses ecomp-model-information;
+ uses contrail-route-assignments;
+ container contrail-route-parameters {
+ uses param;
+ }
+ }
+ }
+ grouping contrail-route-assignments {
+ container contrail-route-assignments {
+ leaf fq-name {
+ description "The Contrail fq-name of the network policy";
+ type string;
+ }
+ leaf contrail-id {
+ description "The ID assigned by Contrail to the network-policy (one for one with the fq-name)";
+ type string;
+ }
+ container source-network {
+ uses network-info;
+ }
+ container dest-network {
+ uses network-info;
+ }
+ container contrail-applied-service {
+ leaf service-instance-id {
+ description "The service-instance-id of the vnf from which the contrail applied service is coming";
+ type string;
+ }
+ leaf vnf-id {
+ description "The vnf representing the contrail applied service";
+ type string;
+ }
+ leaf contrail-fqdn {
+ description "This is the fq-name of the Contrail service instance through which the route is passing.";
+ type string;
+ }
+ }
+ leaf vlan-tag {
+ description "Contrail-assigned vlan-tag to the vipr vm interface for this route.";
+ type string;
+ }
+ }
+ }
+ grouping security-zone-operation-information {
+ uses sdnc-request-header;
+ uses request-information;
+ uses service-information;
+ uses allotted-resource-information;
+ uses security-zone-request-input;
+ }
+ grouping security-zone-request-input {
+ container security-zone-request-input {
+ leaf vlan-tag {
+ type string;
+ }
+ leaf trusted-network-role {
+ description "In the case of vIPR, this is the landing networks network-role; used in naming";
+ type string;
+ }
+ leaf untrusted-network-role {
+ description "In the case of vIPR, this is the tenant oam networks network-role; used in naming";
+ type string;
+ }
+ container security-zone-input-parameters {
+ uses param;
+ }
+ }
+ }
+ grouping security-zone-topology {
+ container security-zone-topology {
+ uses allotted-resource-identifiers;
+ uses ecomp-model-information;
+ uses security-zone-assignments;
+ container security-zone-parameters {
+ uses param;
+ }
+ }
+ }
+ grouping security-zone-assignments {
+ container security-zone-assignments {
+ leaf trusted-network-role {
+ description "In the case of vIPR, this is the landing networks network-role; used in naming";
+ type string;
+ }
+ leaf security-zone-name-trusted {
+ type string;
+ }
+ leaf untrusted-network-role {
+ description "In the case of vIPR, this is the tenant oam networks network-role; used in naming";
+ type string;
+ }
+ leaf security-zone-name-untrusted {
+ type string;
+ }
+ leaf security-zone-service-instance-id {
+ description "Will be the same as the parent-service-instance-id";
+ type string;
+ }
+ leaf security-zone-vnf-id {
+ description "Selected by SDNC from the security-zone-service-instance-id";
+ type string;
+ }
+ leaf vlan-tag {
+ type string;
+ }
+ }
+ }
+ grouping allotted-resource-information {
+ container allotted-resource-information {
+ leaf allotted-resource-id {
+ type string;
+ }
+ leaf allotted-resource-type {
+ description "Not an enum, but expected values are contrail-route and security-zone.";
+ type string;
+ }
+ leaf parent-service-instance-id {
+ description "Service-instance-id of the parent service to which this allotted resource belongs.";
+ type string;
+ }
+ uses ecomp-model-information;
+ }
+ }
+ grouping allotted-resource-identifiers {
+ container allotted-resource-identifiers {
+ leaf allotted-resource-id {
+ type string;
+ }
+ leaf allotted-resource-name {
+ description "For a contrail-route, the network policy name.";
+ type string;
+ }
+ leaf allotted-resource-type {
+ description "(Added in draft 32)Expected to be contrail-route or security-zone.";
+ type string;
+ }
+ leaf consuming-service-instance-id {
+ description "The service-instance-id of the consuming service of this allotted resource";
+ type string;
+ }
+ leaf parent-service-instance-id {
+ description "Service-instance-id of the parent service to which this allotted resource belongs.";
+ type string;
+ }
+ }
+ }
+ grouping allotted-resource-oper-status {
+ container allotted-resource-oper-status {
+ uses oper-status-data;
+ }
+ }
+ grouping allotted-resource-status {
+ container allotted-resource-status {
+ leaf response-code {
+ type string;
+ }
+ leaf response-message {
+ type string;
+ }
+ leaf final-indicator {
+ type string;
+ }
+ leaf request-status {
+ type enumeration {
+ enum "synccomplete";
+ enum "asynccomplete";
+ enum "notifycomplete";
+ }
+ }
+ leaf action {
+ description "value would one of possible request-actions; match the list in service-data oper-status";
+ type string;
+ }
+ leaf rpc-name {
+ type string;
+ }
+ leaf rpc-action {
+ description "this is the svc-action from the incoming request";
+ type enumeration {
+ enum "assign";
+ enum "activate";
+ enum "create";
+ enum "delete";
+ enum "unassign";
+ enum "deactivate";
+ }
+ }
+ leaf response-timestamp {
+ type string;
+ }
+ }
+ }
+ grouping topology-response-common {
+ leaf svc-request-id {
+ description "the request id from the request message for which this is the responseKeep as M";
+ type string;
+ }
+ leaf response-code {
+ description "a success code or an defined error codeKeep as M";
+ type string;
+ }
+ leaf response-message {
+ description "message included for error code";
+ type string;
+ }
+ leaf ack-final-indicator {
+ description "Expected to be Y or N.";
+ type string;
+ }
+ }
+ grouping sdnc-request-header {
+ container sdnc-request-header {
+ leaf svc-request-id {
+ description "Uniquely generated by calling system (e.g. MSO or SDN-GP)";
+ type string;
+ }
+ leaf svc-action {
+ description "Enumerated listThis is the rpcAction";
+ type enumeration {
+ enum "reserve";
+ enum "assign";
+ enum "activate";
+ enum "delete";
+ enum "changeassign";
+ enum "changedelete";
+ enum "rollback";
+ enum "deactivate";
+ enum "unassign";
+ enum "create";
+ }
+ }
+ leaf svc-notification-url {
+ description "Contains URL for asynchronous response";
+ type string;
+ }
+ }
+ }
+ grouping request-information {
+ container request-information {
+ leaf request-id {
+ description "Request ID generated upstream of MSO";
+ type string;
+ }
+ leaf request-action {
+ description "still need to work Disconnect";
+ type enumeration {
+ enum "CreateNetworkInstance";
+ enum "ActivateNetworkInstance";
+ enum "CreateServiceInstance";
+ enum "DeleteServiceInstance";
+ enum "DeleteNetworkInstance";
+ enum "CreateVnfInstance";
+ enum "ActivateVnfInstance";
+ enum "DeleteVnfInstance";
+ enum "CreateVfModuleInstance";
+ enum "ActivateVfModuleInstance";
+ enum "DeleteVfModuleInstance";
+ enum "CreateContrailRouteInstance";
+ enum "DeleteContrailRouteInstance";
+ enum "CreateSecurityZoneInstance";
+ enum "DeleteSecurityZoneInstance";
+ }
+ }
+ leaf source {
+ type string;
+ }
+ leaf notification-url {
+ type string;
+ }
+ leaf order-number {
+ type string;
+ }
+ leaf order-version {
+ type string;
+ }
+ }
+ }
+ grouping service-information {
+ container service-information {
+ leaf service-id {
+ description "This maps to the product-family-id in A&AI";
+ type string;
+ }
+ leaf subscription-service-type {
+ description "used to reference a&ai subscription-service-type. For example, we show as vIPR-ATM in example.";
+ type string;
+ }
+ uses ecomp-model-information;
+ leaf service-instance-id {
+ type string;
+ }
+ leaf global-customer-id {
+ description "need for put of data to AnAI (MSO provides)";
+ type string;
+ }
+ leaf subscriber-name {
+ description "Would not be expected for vIPR-ATM or mobility services.";
+ type string;
+ }
+ }
+ }
+ grouping ecomp-model-information {
+ container ecomp-model-information {
+ leaf model-invariant-uuid {
+ description "identifies the invariant uuid for this service or resource";
+ type string;
+ }
+ leaf model-customization-uuid {
+ description "customized resource for use within a given service.Would not be present at the service level but would be present for the resource level";
+ type string;
+ }
+ leaf model-uuid {
+ description "identifies the uuid for this service or resource, which is version specific";
+ type string;
+ }
+ leaf model-version {
+ type string;
+ }
+ leaf model-name {
+ type string;
+ }
+ }
+ }
+ grouping region-identifier {
+ leaf tenant {
+ type string;
+ }
+ leaf aic-cloud-region {
+ description "The AIC cloud region which maps to contrail versions";
+ type string;
+ }
+ leaf aic-clli {
+ description "Not expected to be used";
+ type string;
+ }
+ }
+ grouping param {
+ list param {
+ key "name";
+ leaf name {
+ type string;
+ }
+ leaf value {
+ type string;
+ }
+ }
+ }
+ grouping instance-reference {
+ leaf instance-id {
+ type string;
+ }
+ leaf object-path {
+ description "restconf retrieval path to this particular objectE.g. restconf/config/GENERIC-RESOURCE-API:services/service/$service-instance-id/service-data/service-topology/";
+ type string;
+ }
+ }
+ grouping oper-status-data {
+ leaf order-status {
+ description "TBD - do we need Request failed statuses? RequestFailed | InProgressTimeout";
+ type enumeration {
+ enum "Active";
+ enum "PendingAssignment";
+ enum "PendingCreate";
+ enum "PendingUpdate";
+ enum "PendingDelete";
+ enum "Deleted";
+ enum "Created";
+ }
+ }
+ leaf last-rpc-action {
+ type enumeration {
+ enum "assign";
+ enum "activate";
+ enum "delete";
+ enum "unassign";
+ enum "deactivate";
+ enum "create";
+ }
+ }
+ leaf last-action {
+ description "should be list of possible request-actions";
+ type enumeration {
+ enum "CreateNetworkInstance";
+ enum "ActivateNetworkInstance";
+ enum "CreateServiceInstance";
+ enum "DeleteServiceInstance";
+ enum "DeleteNetworkInstance";
+ enum "CreateVnfInstance";
+ enum "ActivateVnfInstance";
+ enum "DeleteVnfInstance";
+ enum "CreateVfModuleInstance";
+ enum "ActivateVfModuleInstance";
+ enum "DeleteVfModuleInstance";
+ enum "CreateContrailRouteInstance";
+ enum "DeleteContrailRouteInstance";
+ enum "CreateSecurityZoneInstance";
+ enum "DeleteSecurityZoneInstance";
+ }
+ }
+ leaf last-svc-request-id {
+ description "Not currently populated in service data.";
+ type string;
+ }
+ leaf last-order-status {
+ description "fieldused by generic-resource-api";
+ type enumeration {
+ enum "Active";
+ enum "PendingAssignment";
+ enum "PendingCreate";
+ enum "PendingUpdate";
+ enum "PendingDelete";
+ enum "Deleted";
+ enum "Created";
+ }
+ }
+ leaf create-timestamp {
+ description "Not currently populated in service data.";
+ type string;
+ }
+ leaf modify-timestamp {
+ type string;
+ }
+ }
+ grouping service-response-information {
+ container service-response-information {
+ uses instance-reference;
+ }
+ }
+ grouping network-response-information {
+ container network-response-information {
+ uses instance-reference;
+ }
+ }
+ grouping vnf-response-information {
+ container vnf-response-information {
+ uses instance-reference;
+ }
+ }
+ grouping vf-module-response-information {
+ container vf-module-response-information {
+ uses instance-reference;
+ }
+ }
+ grouping contrail-route-response-information {
+ container contrail-route-response-information {
+ uses instance-reference;
+ }
+ }
+ grouping security-zone-response-information {
+ container security-zone-response-information {
+ uses instance-reference;
+ }
+ }
+ grouping preload-model-information {
+ list vnf-preload-list {
+ key "vnf-name vnf-type";
+ leaf vnf-name {
+ description "vf-module-name or network name";
+ type string;
+ mandatory true;
+ }
+ leaf vnf-type {
+ description "vf-module-type or network type";
+ type string;
+ mandatory true;
+ }
+ uses preload-data;
+ }
+ }
+ grouping vnf-topology-response-body {
+ leaf svc-request-id {
+ type string;
+ }
+ leaf response-code {
+ type string;
+ }
+ leaf response-message {
+ type string;
+ }
+ leaf ack-final-indicator {
+ type string;
+ }
+ }
+ grouping preload-data {
+ container preload-data {
+ uses vnf-topology-information;
+ uses network-topology-information;
+ uses oper-status;
+ }
+ }
+ grouping vnf-topology-information {
+ container vnf-topology-information {
+ uses vnf-topology-identifier;
+ uses vnf-assignments;
+ uses vnf-parameters;
+ }
+ }
+ grouping vnf-topology-identifier {
+ container vnf-topology-identifier {
+ leaf service-type {
+ type string;
+ }
+ leaf service-id {
+ type string;
+ }
+ leaf vnf-name {
+ description "vf-module-name";
+ type string;
+ }
+ leaf vnf-type {
+ description "vf-module-type";
+ type string;
+ }
+ leaf generic-vnf-name {
+ type string;
+ }
+ leaf generic-vnf-type {
+ type string;
+ }
+ leaf generic-vnf-id {
+ type string;
+ }
+ }
+ }
+ grouping vnf-assignments {
+ container vnf-assignments {
+ leaf vnf-status {
+ description "Orchestration Status from AAI - to be set by SDNC";
+ type string;
+ }
+ list availability-zones {
+ key "availability-zone";
+ leaf availability-zone {
+ description "Openstack availability zone name or UUID";
+ type string;
+ }
+ }
+ list vnf-networks {
+ key "";
+ uses vnf-network;
+ uses sriov-vlan-filter-list;
+ }
+ uses vm-topology;
+ }
+ }
+ grouping vm-topology {
+ list vnf-vms {
+ key "vm-type";
+ leaf vm-type {
+ type string;
+ mandatory true;
+ }
+ leaf vm-count {
+ type uint8;
+ }
+ list vm-names {
+ key "vm-name";
+ leaf vm-name {
+ type string;
+ }
+ }
+ list vm-networks {
+ key "";
+ uses vm-network;
+ }
+ }
+ }
+ grouping vnf-network {
+ leaf network-role {
+ description "A Network Role to which a VNF must connect";
+ type string;
+ mandatory true;
+ }
+ leaf network-name {
+ description "Unique Neutron UUID of an instance of the network role ";
+ type string;
+ }
+ leaf neutron-id {
+ description "Unique Neutron UUID of an instance of the network role ";
+ type string;
+ }
+ leaf network-id {
+ description "Unique Neutron UUID of an instance of the network role ";
+ type string;
+ }
+ leaf subnet-id {
+ description "ipv4 subnet UUID to be passed into the HEAT template";
+ type string;
+ }
+ leaf subnet-name {
+ description "ipv4 subnet-name that corresponds to the ipv4 subnet-id";
+ type string;
+ }
+ leaf contrail-network-fqdn {
+ description "contrail network policy object";
+ type string;
+ }
+ leaf ipv6-subnet-id {
+ description "ipv6 subnet UUID to be passed into the HEAT template";
+ type string;
+ }
+ leaf ipv6-subnet-name {
+ description "ipv6 subnet-name that corresponds to the ipv6 subnet-id";
+ type string;
+ }
+ }
+ grouping sriov-vlan-filter-list {
+ list sriov-vlan-filter-list {
+ key "sriov-vlan-filter";
+ leaf sriov-vlan-filter {
+ type string;
+ }
+ }
+ }
+ grouping vm-network {
+ leaf network-role {
+ description "network (identified by role) that this VM connects to. Should also be included in the vnf-networks for the containing VNF";
+ type string;
+ }
+ leaf use-dhcp {
+ description "Indicator to use DHCP on this network for this VM";
+ type enumeration {
+ enum "Y";
+ enum "N";
+ }
+ }
+ leaf ip-count {
+ description "The number of ip addresses to be assigned per vm for this network role";
+ type uint8;
+ }
+ list network-ips {
+ key "ip-address";
+ leaf ip-address {
+ description "List of assigned ipv4 addresses on a network";
+ type inet:ip-address;
+ }
+ }
+ list network-ips-v6 {
+ key "ip-address-ipv6";
+ leaf ip-address-ipv6 {
+ description "List of assigned ipv6 addresses on a network";
+ type inet:ipv6-address;
+ }
+ }
+ list network-macs {
+ key "mac-address";
+ leaf mac-address {
+ description "List of network assignments for this VM (one per network)";
+ type string;
+ }
+ }
+ leaf floating-ip {
+ description "Floating ipv4 for VMs of a given type on this network";
+ type inet:ip-address;
+ }
+ leaf floating-ip-v6 {
+ description "Floating ipv6 for VMs of a given type on this network";
+ type inet:ipv6-address;
+ }
+ list interface-route-prefixes {
+ key "interface-route-prefix-cidr";
+ leaf interface-route-prefix-cidr {
+ description "route prefixes (CIDRs) in ip/cidr format to be provided to MSO in vnf-topology as a list of static routes";
+ type string;
+ mandatory true;
+ }
+ leaf interface-route-prefix {
+ description "route prefixes (CIDRs) to be provided to MSO in vnf-topology as a list of static routes";
+ type inet:ip-address;
+ }
+ }
+ }
+ grouping vnf-parameters {
+ list vnf-parameters {
+ key "vnf-parameter-name";
+ leaf vnf-parameter-name {
+ description "The name of an arbitrary instance-specific vnf-parameters";
+ type string;
+ }
+ leaf vnf-parameter-value {
+ description "The value of an arbitrary instance-specific vnf-parameters ";
+ type string;
+ }
+ }
+ }
+ grouping network-topology-information {
+ container network-topology-information {
+ uses network-topology-identifier;
+ uses subnets;
+ uses vpn-bindings;
+ uses network-policy;
+ uses route-table-reference;
+ uses provider-network-information;
+ }
+ }
+ grouping network-topology-identifier {
+ container network-topology-identifier {
+ leaf service-type {
+ type string;
+ }
+ leaf network-name {
+ type string;
+ }
+ leaf network-role {
+ type string;
+ }
+ leaf network-type {
+ type string;
+ }
+ leaf network-technology {
+ type string;
+ }
+ }
+ }
+ grouping subnets {
+ list subnets {
+ key "start-address";
+ leaf start-address {
+ type inet:ip-address;
+ }
+ leaf gateway-address {
+ type inet:ip-address;
+ }
+ leaf cidr-mask {
+ type string;
+ }
+ leaf ip-version {
+ type string;
+ }
+ leaf dhcp-enabled {
+ type enumeration {
+ enum "Y";
+ enum "N";
+ }
+ }
+ leaf dhcp-start-address {
+ type string;
+ }
+ leaf dhcp-end-address {
+ type string;
+ }
+ leaf subnet-name {
+ type string;
+ }
+ }
+ }
+ grouping vpn-bindings {
+ list vpn-bindings {
+ key "vpn-binding-id";
+ leaf vpn-binding-id {
+ type string;
+ }
+ leaf global-route-target {
+ type string;
+ }
+ }
+ }
+ grouping network-policy {
+ list network-policy {
+ key "network-policy-fqdn";
+ leaf network-policy-fqdn {
+ type string;
+ }
+ leaf network-policy-id {
+ type string;
+ }
+ }
+ }
+ grouping route-table-reference {
+ list route-table-reference {
+ key "route-table-reference-fqdn";
+ leaf route-table-reference-fqdn {
+ type string;
+ mandatory true;
+ }
+ leaf route-table-reference-id {
+ type string;
+ }
+ }
+ }
+ grouping provider-network-information {
+ leaf physical-network-name {
+ type string;
+ }
+ leaf is-provider-network {
+ type boolean;
+ }
+ leaf is-shared-network {
+ type boolean;
+ }
+ leaf is-external-network {
+ type boolean;
+ }
+ }
+ grouping oper-status {
+ container oper-status {
+ leaf order-status {
+ type enumeration {
+ enum "Active";
+ enum "PendingAssignment";
+ enum "PendingCreate";
+ enum "PendingUpdate";
+ enum "PendingDelete";
+ enum "Deleted";
+ }
+ }
+ leaf last-action {
+ description "this is preload request actions";
+ type enumeration {
+ enum "VNFActivateRequest";
+ enum "ChangeVNFActivateRequest";
+ enum "VnfInstanceActivateRequest";
+ enum "ChangeVnfInstanceActivateRequest";
+ enum "VfModuleActivateRequest";
+ enum "ChangeVfModuleActivateRequest";
+ enum "DisconnectVNFRequest";
+ enum "DisconnectVnfInstanceRequest";
+ enum "DisconnectVfModuleRequest";
+ enum "PreloadVNFRequest";
+ enum "DeletePreloadVNFRequest";
+ enum "PreloadVnfInstanceRequest";
+ enum "DeletePreloadVnfInstanceRequest";
+ enum "PreloadVfModuleRequest";
+ enum "DeletePreloadVfModuleRequest";
+ }
+ }
+ leaf last-svc-request-id {
+ type string;
+ }
+ leaf last-order-status {
+ type enumeration {
+ enum "Active";
+ enum "PendingAssignment";
+ enum "PendingCreate";
+ enum "PendingUpdate";
+ enum "PendingDelete";
+ enum "Deleted";
+ }
+ }
+ leaf create-timestamp {
+ type string;
+ }
+ leaf modify-timestamp {
+ type string;
+ }
+ leaf maintenance-indicator {
+ type enumeration {
+ enum "Y";
+ enum "N";
+ }
+ }
+ }
+ }
+ container services {
+ uses service-model-infrastructure;
+ }
+ container contrail-route-allotted-resources {
+ list contrail-route-allotted-resource {
+ key "allotted-resource-id";
+ leaf allotted-resource-id {
+ type string;
+ mandatory true;
+ }
+ container allotted-resource-data {
+ container allotted-resource-operation-information {
+ uses contrail-route-operation-information;
+ }
+ uses contrail-route-topology;
+ uses allotted-resource-oper-status;
+ }
+ uses allotted-resource-status;
+ }
+ }
+ container security-zone-allotted-resources {
+ list security-zone-allotted-resource {
+ key "allotted-resource-id";
+ leaf allotted-resource-id {
+ type string;
+ mandatory true;
+ }
+ container allotted-resource-data {
+ container allotted-resource-operation-information {
+ uses security-zone-operation-information;
+ }
+ uses security-zone-topology;
+ container security-zone-parameters {
+ uses param;
+ }
+ uses allotted-resource-oper-status;
+ }
+ uses allotted-resource-status;
+ }
+ }
+ rpc service-topology-operation {
+ input {
+ uses service-operation-information;
+ }
+ output {
+ uses topology-response-common;
+ uses service-response-information;
+ }
+ }
+ rpc network-topology-operation {
+ input {
+ uses network-operation-information;
+ }
+ output {
+ uses topology-response-common;
+ uses network-response-information;
+ uses service-response-information;
+ }
+ }
+ rpc vnf-topology-operation {
+ input {
+ uses vnf-operation-information;
+ }
+ output {
+ uses topology-response-common;
+ uses vnf-response-information;
+ uses service-response-information;
+ }
+ }
+ rpc vf-module-topology-operation {
+ input {
+ uses vf-module-operation-information;
+ }
+ output {
+ uses topology-response-common;
+ uses vf-module-response-information;
+ uses vnf-response-information;
+ uses service-response-information;
+ }
+ }
+ rpc contrail-route-topology-operation {
+ input {
+ uses contrail-route-operation-information;
+ }
+ output {
+ uses topology-response-common;
+ uses contrail-route-response-information;
+ uses service-response-information;
+ }
+ }
+ rpc security-zone-topology-operation {
+ input {
+ uses security-zone-operation-information;
+ }
+ output {
+ uses topology-response-common;
+ uses security-zone-response-information;
+ uses service-response-information;
+ }
+ }
+ container preload-vnfs {
+ uses preload-model-information;
+ }
+ rpc preload-vnf-topology-operation {
+ input {
+ uses sdnc-request-header;
+ uses request-information;
+ uses vnf-topology-information;
+ }
+ output {
+ uses vnf-topology-response-body;
+ }
+ }
+ rpc preload-network-topology-operation {
+ input {
+ uses sdnc-request-header;
+ uses request-information;
+ uses network-topology-information;
+ }
+ output {
+ uses vnf-topology-response-body;
+ }
+ }
+} ////closes the module
|