aboutsummaryrefslogtreecommitdiffstats
path: root/vnfapi/model
diff options
context:
space:
mode:
Diffstat (limited to 'vnfapi/model')
-rw-r--r--vnfapi/model/pom.xml124
-rwxr-xr-xvnfapi/model/scripts/python/yang2props.py57
-rwxr-xr-xvnfapi/model/src/main/yang/VNF-API.yang815
-rwxr-xr-xvnfapi/model/src/main/yang/vnfsubmodule.yang356
4 files changed, 1352 insertions, 0 deletions
diff --git a/vnfapi/model/pom.xml b/vnfapi/model/pom.xml
new file mode 100644
index 00000000..cf354ed1
--- /dev/null
+++ b/vnfapi/model/pom.xml
@@ -0,0 +1,124 @@
+<?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>
+ <artifactId>vnfapi</artifactId>
+ <groupId>org.openecomp.sdnc.northbound</groupId>
+ <version>1.0.0</version>
+ </parent>
+ <artifactId>vnfapi-model</artifactId>
+ <packaging>bundle</packaging>
+
+ <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>
+ <version>${odl.yangtools.yang.maven.plugin.version}</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.opendaylight.mdsal</groupId>
+ <artifactId>maven-sal-api-gen-plugin</artifactId>
+ <version>${odl.yangtools.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.yangtools.maven.sal.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/VNF-API.yang</argument>
+ <argument>target/vnfapi.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}/vnfapi.properties</file>
+ <type>properties</type>
+ <classifier>vnfapi</classifier>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.opendaylight.mdsal</groupId>
+ <artifactId>yang-binding</artifactId>
+ <version>${odl.yangtools.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>
+</project>
diff --git a/vnfapi/model/scripts/python/yang2props.py b/vnfapi/model/scripts/python/yang2props.py
new file mode 100755
index 00000000..559d31b8
--- /dev/null
+++ b/vnfapi/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/vnfapi/model/src/main/yang/VNF-API.yang b/vnfapi/model/src/main/yang/VNF-API.yang
new file mode 100755
index 00000000..a786757f
--- /dev/null
+++ b/vnfapi/model/src/main/yang/VNF-API.yang
@@ -0,0 +1,815 @@
+module VNF-API {
+
+ yang-version 1;
+
+ namespace "org:openecomp:sdnctl:vnf";
+
+ prefix vnfapi;
+
+ import ietf-inet-types { prefix "ietf"; revision-date "2010-09-24"; }
+
+ include "vnfsubmodule";
+
+ organization "OpenECOMP";
+
+ contact
+ "Network Controller <sdnc@lists.openecomp.org>";
+
+ description
+ "Defines API interface for VNF Orchestration";
+
+ revision "2015-07-20" {
+ description
+ "Initial draft";
+ }
+ // Last updated on 8-17-2016
+ grouping sdnc-request-header {
+ container sdnc-request-header {
+ leaf svc-request-id {
+ type string;
+ }
+ leaf svc-action {
+ type enumeration {
+ enum "reserve";
+ enum "assign";
+ enum "activate"; // equal to commit
+ enum "delete"; // equal to commit
+ enum "changeassign";
+ enum "changedelete";
+ enum "rollback";
+ }
+ }
+ leaf svc-notification-url {
+ type string;
+ }
+ }
+ }
+
+ grouping request-information {
+ container request-information {
+ leaf request-id {
+ type string;
+ }
+ leaf request-action {
+ type enumeration {
+ enum "PreloadNetworkRequest";
+ enum "DeletePreloadNetworkRequest";
+ enum "NetworkActivateRequest";
+ enum "DisconnectNetworkRequest";
+ enum "PreloadVNFRequest";
+ enum "DeletePreloadVNFRequest";
+ enum "VNFActivateRequest";
+ enum "ChangeVNFActivateRequest";
+ enum "DisconnectVNFRequest";
+ enum "PreloadVnfInstanceRequest";
+ enum "DeletePreloadVnfInstanceRequest";
+ enum "VnfInstanceActivateRequest";
+ enum "ChangeVnfInstanceActivateRequest";
+ enum "DisconnectVnfInstanceRequest";
+ enum "PreloadVfModuleRequest";
+ enum "DeletePreloadVfModuleRequest";
+ enum "VfModuleActivateRequest";
+ enum "ChangeVfModuleActivateRequest";
+ enum "DisconnectVfModuleRequest";
+ }
+ }
+ leaf request-sub-action {
+ type enumeration {
+ enum "SUPP";
+ enum "CANCEL";
+ }
+ }
+ 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 {
+ // 1610 use for AnAI subscription-service-type
+ leaf service-type {
+ type string;
+ description "AnAI subscription-service-type";
+ }
+ leaf service-id {
+ type string;
+ }
+ leaf service-instance-id {
+ type string;
+ description "A service instance that a VNF or a l3-network is associated with";
+ }
+ // 1610 use for global-customer-id
+ leaf subscriber-name {
+ type string;
+ description "AnAI global-customer-id";
+ }
+ }
+ }
+
+
+ grouping vnf-request-information {
+ container vnf-request-information {
+ leaf vnf-request-version {
+ type string;
+ }
+ leaf vnf-id {
+ type string;
+ description "vf-module-id";
+ }
+ leaf vnf-type {
+ type string;
+ description "vf-module-type";
+ }
+ leaf vnf-name {
+ type string;
+ description "vf-module-name";
+ }
+ leaf generic-vnf-id {
+ type string;
+ description "generic vnf-id";
+ }
+ leaf generic-vnf-type {
+ type string;
+ description "generic vnf type";
+ }
+ leaf generic-vnf-name {
+ type string;
+ description "generic vnf name";
+ }
+ leaf tenant {
+ type string;
+ }
+ leaf aic-clli {
+ type string;
+ }
+ leaf aic-cloud-region {
+ type string;
+ description "The AIC cloud region which maps to contrail versions";
+ }
+ list vnf-networks {
+ key network-role;
+ uses vnf-network;
+ description "Network List";
+ }
+ }
+ }
+
+ grouping network-request-information {
+ container network-request-information {
+ leaf network-id {
+ type string;
+ }
+ leaf network-type {
+ type string;
+ }
+ leaf network-name {
+ type string;
+ }
+ leaf tenant {
+ type string;
+ }
+ leaf aic-clli {
+ type string;
+ }
+ leaf aic-cloud-region {
+ type string;
+ description "The AIC cloud region which maps to contrail versions";
+ }
+ }
+ }
+
+ /***********************************************************/
+ /* PRELOAD DATA */
+ /***********************************************************/
+
+ container preload-vnfs {
+ uses preload-model-information;
+ }
+ grouping preload-model-information {
+ list vnf-preload-list {
+ key "vnf-name vnf-type";
+ leaf vnf-name {
+ type string;
+ description "vf-module-name";
+ }
+ leaf vnf-type {
+ type string;
+ description "vf-module-type";
+ }
+ uses preload-data;
+ }
+ }
+
+ // For preload networks it will have network-topology-information
+ // For preload vnfs, it will have vnf-topology-information
+ 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 {
+ type string;
+ description "vf-module-name";
+ }
+ leaf vnf-type {
+ type string;
+ description "vf-module-type";
+ }
+ 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 {
+ type string;
+ description "Orchestration Status from AAI - to be set by SDNC";
+ }
+ list availability-zones {
+ ordered-by user;
+ leaf availability-zone {
+ type string;
+ description "Openstack availability zone name or UUID";
+ }
+ }
+ list vnf-networks {
+ key network-role;
+ uses vnf-network;
+ // 1610
+ uses sriov-vlan-filter-list;
+ description "Network List";
+ }
+ uses vm-topology;
+ }
+ }
+
+ grouping vm-topology {
+ list vnf-vms {
+ key vm-type;
+ leaf vm-type {
+ type string;
+ }
+ leaf vm-count {
+ type uint8;
+ }
+ list vm-names {
+ ordered-by user;
+ leaf vm-name{
+ type string;
+ }
+ }
+ //leaf-list vm-names {
+ // type string;
+ // ordered-by user;
+ //}
+ list vm-networks {
+ key network-role;
+ uses vm-network;
+ description "Network List";
+ }
+ }
+ }
+
+ grouping vnf-network {
+ leaf network-role {
+ type string;
+ description "A Network Role to which a VNF must connect";
+ }
+ leaf network-name {
+ type string;
+ description "Unique Neutron UUID of an instance of the network role ";
+ }
+ leaf neutron-id {
+ type string;
+ description "Unique Neutron UUID of an instance of the network role ";
+ }
+ leaf network-id {
+ type string;
+ description "Unique Neutron UUID of an instance of the network role ";
+ }
+ leaf subnet-id {
+ type string;
+ description "ipv4 subnet UUID to be passed into the HEAT template for DHCP assignment";
+ }
+ leaf contrail-network-fqdn {
+ type string;
+ description "contrail network policy object";
+ }
+ // 1610
+ leaf ipv6-subnet-id {
+ type string;
+ description "ipv6 subnet UUID to be passed into the HEAT template for DHCP assignment";
+ }
+ leaf ipv6-subnet-name {
+ type string;
+ description "ipv6 subnet-name that corresponds to the ipv6 subnet-id";
+ }
+ leaf subnet-name {
+ type string;
+ description "ipv4 subnet-name that corresponds to the ipv4 subnet-id";
+ }
+ }
+
+ // 1610
+ grouping sriov-vlan-filter-list {
+ list sriov-vlan-filter-list {
+ leaf sriov-vlan-filter {
+ type string;
+ }
+ }
+ }
+
+ grouping vm-network {
+ leaf network-role {
+ type string;
+ description "network (identified by role) that this VM connects to. Should also be included in the vnf-networks for the containing VNF";
+
+ }
+ leaf use-dhcp {
+ type enumeration {
+ enum "Y";
+ enum "N";
+ }
+ description "Indicator to use DHCP on this network for this VM";
+ }
+ leaf ip-count {
+ type uint8;
+ description "The number of ip addresses to be assigned per vm for this network role";
+ }
+ list network-ips {
+ ordered-by user;
+ leaf ip-address {
+ //type string;
+ type ietf:ip-address;
+ description "List of assigned ipv4 addresses on a network";
+ }
+ }
+ list network-ips-v6 {
+ ordered-by user;
+ leaf ip-address-ipv6 {
+ //type string;
+ type ietf:ipv6-address;
+ description "List of assigned ipv6 addresses on a network";
+ }
+ }
+ list network-macs {
+ ordered-by user;
+ leaf mac-address {
+ type string;
+ description "List of network assignments for this VM (one per network)";
+ }
+ }
+ leaf floating-ip {
+ //type string;
+ type ietf:ip-address;
+ description "Floating ipv4 for VMs of a given type on this network";
+ }
+ leaf floating-ip-v6 {
+ //type string;
+ type ietf:ipv6-address;
+ description "Floating ipv6 for VMs of a given type on this network";
+ }
+ list interface-route-prefixes {
+ ordered-by user;
+ leaf interface-route-prefix {
+ type ietf:ip-address;
+ description "route prefixes (CIDRs) to be provided to MSO in vnf-topology as a list of static routes";
+ }
+ }
+ }
+
+ grouping vnf-parameters {
+ list vnf-parameters {
+ key vnf-parameter-name;
+ leaf vnf-parameter-name {
+ type string;
+ description "The name of an arbitrary instance-specific vnf-parameters";
+ }
+ leaf vnf-parameter-value {
+ type string;
+ description "The value of an arbitrary instance-specific vnf-parameters ";
+ }
+ }
+ }
+
+ 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 ietf:ip-address;
+ //type string;
+ }
+ leaf gateway-address{
+ //type string;
+ type ietf: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;
+ }
+ // 1610
+ 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;
+ }
+ }
+ }
+
+ //1610
+ grouping route-table-reference {
+ list route-table-reference {
+ leaf route-table-reference-id {
+ type string;
+ }
+ leaf route-table-reference-fqdn {
+ type string;
+ }
+ }
+ }
+
+ // 1610
+ grouping provider-network-information {
+ container 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;
+ }
+ }
+ }
+
+ /***********************************************************/
+ /* SERVICE_DATA */
+ /***********************************************************/
+ container vnfs {
+ uses vnf-model-infrastructure;
+ }
+ grouping vnf-model-infrastructure {
+ list vnf-list {
+ key vnf-id;
+ leaf vnf-id {
+ type string;
+ mandatory true;
+ description "vf-module-id";
+ }
+ uses service-data;
+ uses service-status;
+ }
+ }
+ grouping service-data {
+ container service-data {
+ uses vnf-configuration-information;
+ uses oper-status;
+ }
+ }
+ 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 vnfsdn-action {
+ type enumeration {
+ enum "PreloadNetworkRequest";
+ enum "DeletePreloadNetworkRequest";
+ enum "NetworkActivateRequest";
+ enum "DisconnectNetworkRequest";
+ enum "PreloadVNFRequest";
+ enum "DeletePreloadVNFRequest";
+ enum "VNFActivateRequest";
+ enum "ChangeVNFActivateRequest";
+ enum "DisconnectVNFRequest";
+ enum "PreloadVnfInstanceRequest";
+ enum "DeletePreloadVnfInstanceRequest";
+ enum "VnfInstanceActivateRequest";
+ enum "ChangeVnfInstanceActivateRequest";
+ enum "DisconnectVnfInstanceRequest";
+ enum "PreloadVfModuleRequest";
+ enum "DeletePreloadVfModuleRequest";
+ enum "VfModuleActivateRequest";
+ enum "ChangeVfModuleActivateRequest";
+ enum "DisconnectVfModuleRequest";
+ }
+ }
+ leaf vnfsdn-subaction {
+ type enumeration {
+ enum "SUPP";
+ enum "CANCEL";
+ }
+ }
+ leaf rpc-name {
+ type enumeration {
+ enum "vnf-topology-operation";
+ enum "preload-vnf-topology-operation";
+ enum "vnf-instance-topology-operation";
+ enum "preload-vnf-instance-topology-operation";
+ enum "vf-module-topology-operation";
+ enum "preload-vf-module-topology-operation";
+ }
+ }
+ leaf rpc-action {
+ type enumeration {
+ enum "reserve";
+ enum "assign";
+ enum "activate"; // equal to commit
+ enum "delete"; // equal to commit
+ enum "changeassign";
+ enum "changedelete";
+ enum "rollback";
+ }
+ }
+ leaf response-timestamp {
+ type string;
+ }
+ }
+ }
+ grouping vnf-configuration-information {
+ uses sdnc-request-header;
+ uses request-information;
+ uses service-information;
+ uses vnf-request-information;
+ uses vnf-topology;
+ }
+ 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 vnf-information {
+ container vnf-information {
+ leaf vnf-service-type {
+ type string;
+ }
+ leaf vnf-id {
+ type string;
+ description "vf-module-id";
+ }
+ }
+ }
+
+ grouping network-information {
+ container network-information {
+ leaf network-service-type {
+ type string;
+ }
+ leaf network-id {
+ type string;
+ }
+ }
+ }
+
+
+ // Carried over from l3sdn and potentially not needed
+ 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 {
+ 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";
+ }
+ }
+ }
+ }
+ grouping vnf-topology {
+ leaf vnf-id {
+ type string;
+ description "vf-module-id";
+ }
+ uses vnf-topology-information;
+ }
+
+
+ rpc vnf-topology-operation {
+ input {
+ uses sdnc-request-header;
+ uses request-information;
+ uses service-information;
+ uses vnf-request-information;
+ }
+ output {
+ uses vnf-topology-response-body;
+ uses vnf-information;
+ uses service-information;
+ }
+ }
+
+ rpc network-topology-operation {
+ input {
+ uses sdnc-request-header;
+ uses request-information;
+ uses service-information;
+ uses network-request-information;
+ }
+ output {
+ uses vnf-topology-response-body;
+ uses network-information;
+ uses service-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;
+ }
+ }
+}
diff --git a/vnfapi/model/src/main/yang/vnfsubmodule.yang b/vnfapi/model/src/main/yang/vnfsubmodule.yang
new file mode 100755
index 00000000..1c573d21
--- /dev/null
+++ b/vnfapi/model/src/main/yang/vnfsubmodule.yang
@@ -0,0 +1,356 @@
+submodule vnfsubmodule {
+
+ belongs-to VNF-API { prefix "vnfapi"; }
+
+ // Last updated on 8-17-2016
+ /********************************************/
+ /* vnf-instance */
+ /********************************************/
+ grouping vnf-instance-request-information {
+ container vnf-instance-request-information {
+ leaf request-version {
+ type string;
+ }
+ uses vnf-instance-topology-identifier;
+ uses region-identifier;
+ list vnf-networks {
+ key network-role;
+ uses vnfapi:vnf-network;
+ description "List of vnf networks to override preload";
+ }
+ }
+ }
+
+ grouping region-identifier {
+ leaf tenant {
+ type string;
+ }
+ leaf aic-cloud-region {
+ type string;
+ description "The AIC cloud region which maps to contrail versions";
+ }
+ }
+
+
+ /***********************************************************/
+ /* PRELOAD DATA - vnf-instance */
+ /***********************************************************/
+
+ container preload-vnf-instances {
+ uses preload-vnf-instance-model-information;
+ }
+ grouping preload-vnf-instance-model-information {
+ list vnf-instance-preload-list {
+ key "vnf-instance-name vnf-model-id";
+ leaf vnf-instance-name {
+ type string;
+ description "vnf-instance-name, aka generic-vnf-name";
+ }
+ leaf vnf-model-id {
+ type string;
+ description "vnf-model-id, aka generic-vnf-type";
+ }
+ uses vnf-instance-preload-data;
+ }
+ }
+
+ grouping vnf-instance-preload-data {
+ container vnf-instance-preload-data {
+ uses vnf-instance-topology-information;
+ uses vnfapi:oper-status;
+ }
+ }
+
+ grouping vnf-instance-topology-information {
+ container vnf-instance-topology-information {
+ uses vnf-instance-identifiers;
+ uses vnfapi:service-information;
+ uses vnfapi:vnf-assignments;
+ uses vnfapi:vnf-parameters;
+ }
+ }
+
+ // This is used by MSO request for assign,rollback,activate,delete, etc
+ grouping vnf-instance-topology-identifier {
+ leaf vnf-instance-name {
+ type string;
+ }
+ leaf vnf-model-id {
+ type string;
+ }
+ leaf vnf-instance-id {
+ type string;
+ }
+ }
+
+ // container used in preload identifiers
+ grouping vnf-instance-identifiers {
+ container vnf-instance-identifiers {
+ uses vnf-instance-topology-identifier;
+ }
+ }
+
+ /***********************************************************/
+ /* SERVICE_DATA - vnf-instance */
+ /***********************************************************/
+ container vnf-instances {
+ uses vnf-instance-model-infrastructure;
+ }
+ grouping vnf-instance-model-infrastructure {
+ list vnf-instance-list {
+ key vnf-instance-id;
+ leaf vnf-instance-id {
+ type string;
+ mandatory true;
+ description "generic-vnf-id";
+ }
+ uses vnf-instance-service-data;
+ uses vnfapi:service-status;
+ }
+ }
+
+ grouping vnf-instance-service-data {
+ container vnf-instance-service-data {
+ uses vnf-instance-configuration-information;
+ uses vf-module-relationship-list;
+ uses vnfapi:oper-status;
+ }
+ }
+
+ grouping vnf-instance-configuration-information {
+ uses vnfapi:sdnc-request-header;
+ uses vnfapi:request-information;
+ uses vnfapi:service-information;
+ uses vnf-instance-request-information;
+ uses vnf-instance-topology;
+ }
+
+ grouping vf-module-relationship-list {
+ list vf-module-relationship-list {
+ leaf vf-module-id {
+ type string;
+ description "vf-module-id";
+ }
+ }
+ }
+
+ grouping vnf-instance-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 vnf-instance-information {
+ container vnf-instance-information {
+ leaf vnf-instance-id {
+ type string;
+ description "vnf-instance-id";
+ }
+ }
+ }
+
+ grouping vnf-instance-topology {
+ leaf vnf-instance-id {
+ type string;
+ description "vnf-instance-id";
+ }
+ uses vnf-instance-topology-information;
+ }
+
+
+ rpc vnf-instance-topology-operation {
+ input {
+ uses sdnc-request-header;
+ uses request-information;
+ uses service-information;
+ uses vnf-instance-request-information;
+ }
+ output {
+ uses vnf-instance-topology-response-body;
+ uses vnf-instance-information;
+ uses service-information;
+ }
+ }
+
+ rpc preload-vnf-instance-topology-operation {
+ input {
+ uses sdnc-request-header;
+ uses request-information;
+ uses vnf-instance-topology-information;
+ }
+ output {
+ uses vnf-instance-topology-response-body;
+ }
+ }
+
+ /********************************************/
+ /* vf-module */
+ /********************************************/
+ grouping vf-module-request-information {
+ container vf-module-request-information {
+ uses vnf-instance-topology-identifier;
+ uses region-identifier;
+ uses vf-module-topology-identifier;
+ }
+ }
+
+ grouping vf-module-identifiers {
+ container vf-module-identifiers {
+ uses vf-module-topology-identifier;
+ }
+ }
+
+ grouping vf-module-topology-identifier {
+ leaf vf-module-id {
+ type string;
+ description "vf-module id";
+ }
+ leaf vf-module-name {
+ type string;
+ description "vf-module-name";
+ }
+ leaf vf-module-model-id {
+ type string;
+ description "vf-module-type";
+ }
+ }
+
+ /***********************************************************/
+ /* PRELOAD DATA - vfmodule */
+ /***********************************************************/
+ container preload-vf-modules {
+ uses preload-vf-module-model-information;
+ }
+
+ grouping preload-vf-module-model-information {
+ list vf-module-preload-list {
+ key "vf-module-name vf-module-model-id";
+ leaf vf-module-name {
+ type string;
+ description "vf-module-name";
+ }
+ leaf vf-module-model-id {
+ type string;
+ description "vf-module-type";
+ }
+ uses vf-module-preload-data;
+ }
+ }
+
+ grouping vf-module-preload-data {
+ container vf-module-preload-data {
+ uses vf-module-topology-information;
+ uses vnfapi:oper-status;
+ }
+ }
+
+ grouping vf-module-topology-information {
+ container vf-module-topology-information {
+ uses vf-module-identifiers;
+ uses vnfapi:vnf-assignments;
+ uses vnfapi:vnf-parameters;
+ }
+ }
+
+
+ /***********************************************************/
+ /* SERVICE_DATA - vfmodule */
+ /***********************************************************/
+ container vf-modules {
+ uses vf-module-model-infrastructure;
+ }
+ grouping vf-module-model-infrastructure {
+ list vf-module-list {
+ key vf-module-id;
+ leaf vf-module-id {
+ type string;
+ mandatory true;
+ description "vf-module-id";
+ }
+ uses vf-module-service-data;
+ uses vnfapi:service-status;
+ }
+ }
+
+ grouping vf-module-service-data {
+ container vf-module-service-data {
+ uses vf-module-configuration-information;
+ uses vnfapi:oper-status;
+ }
+ }
+
+ grouping vf-module-configuration-information {
+ uses vnfapi:sdnc-request-header;
+ uses vnfapi:request-information;
+ uses vnfapi:service-information;
+ uses vf-module-request-information;
+ uses vf-module-topology;
+ }
+
+ grouping vf-module-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 vf-module-information {
+ container vf-module-information {
+ leaf vf-module-id {
+ type string;
+ description "vf-module-id";
+ }
+ }
+ }
+
+ grouping vf-module-topology {
+ leaf vf-module-id {
+ type string;
+ description "vf-module-id";
+ }
+ uses vf-module-topology-information;
+ }
+
+
+ rpc vf-module-topology-operation {
+ input {
+ uses sdnc-request-header;
+ uses request-information;
+ uses service-information;
+ uses vf-module-request-information;
+ }
+ output {
+ uses vf-module-topology-response-body;
+ uses vf-module-information;
+ uses service-information;
+ }
+ }
+
+ rpc preload-vf-module-topology-operation {
+ input {
+ uses sdnc-request-header;
+ uses request-information;
+ uses vf-module-topology-information;
+ }
+ output {
+ uses vf-module-topology-response-body;
+ }
+ }
+}