rel3 IM fixes - removed references to rw-pb and corrected config-primitive instead...
[osm/SO.git] / models / plugins / yang / mano-types.yang
index cd5d446..8950c7a 100644 (file)
@@ -1,7 +1,7 @@
 
 /*
- * 
- *   Copyright 2016 RIFT.IO Inc
+ *
+ *   Copyright 2016-2017 RIFT.IO Inc
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
  *   you may not use this file except in compliance with the License.
@@ -27,8 +27,13 @@ module mano-types
     prefix "inet";
   }
 
-  import rw-pb-ext {
-    prefix "rwpb";
+  import rw-project {
+    prefix "rw-project";
+  }
+
+  revision 2017-02-08 {
+    description
+      "Update model to support projects.";
   }
 
   revision 2015-04-23 {
@@ -40,6 +45,20 @@ module mano-types
       "Derived from earlier versions of base YANG files";
   }
 
+  typedef meta-data-type {
+    type enumeration {
+      enum STRING;
+    }
+  }
+
+  typedef package-type {
+      description "Type of descriptor being on-boarded";
+      type enumeration {
+        enum NSD;
+        enum VNFD;
+      }
+    }
+
   typedef parameter-data-type {
     type enumeration {
       enum STRING;
@@ -92,15 +111,16 @@ module mano-types
     }
 
     leaf parameter-pool {
-      description "NSD Parameter pool name to use for this paramter";
+      description "NSD parameter pool name to use for this parameter";
       type string;
     }
 
     leaf read-only {
       description
-        "The value should be greyed out by the UI.
+        "The value should be dimmed by the UI.
         Only applies to parameters with default values.";
       type boolean;
+      default false;
     }
 
     leaf hidden {
@@ -108,205 +128,225 @@ module mano-types
         "The value should be hidden by the UI.
         Only applies to parameters with default values.";
       type boolean;
+      default false;
     }
   }
-  
 
-  grouping vnf-configuration {
-    container vnf-configuration {
-      rwpb:msg-new VnfConfiguration;
+  grouping ui-primitive-group {
+    list parameter-group {
       description
-          "Information regarding the VNF configuration 
-           is captured here. Note that if the NS contains
-           multiple instances of the same VNF, each instance
-           of the VNF may have different configuration";
+            "Grouping of parameters which are logically grouped in UI";
+      key "name";
 
-      choice config-method {
+      leaf name {
         description
-            "Defines the configuration method for the VNF.";
-        case netconf {
-          description
-              "Use NETCONF for configuring the VNF.";
-          container netconf {
-            leaf target {
-              description
-                  "Netconf configuration target";
-              type enumeration {
-                enum running;
-                enum candidate;
-              }
-            }
+            "Name of the parameter group";
+        type string;
+      }
 
-            leaf protocol {
-              description
-                  "Protocol to use for netconf (e.g. ssh)";
-              type enumeration {
-                enum None;
-                enum ssh;
-              }
-            }
+      list parameter {
+        description
+            "List of parameters for the service primitive.";
+        key "name";
+        uses manotypes:primitive-parameter;
+      }
 
-            leaf port {
-              description
-                  "Port for the netconf server.";
-              type inet:port-number;
-            }
-          }
-        }
+      leaf mandatory {
+        description "Is this parameter group mandatory";
+        type boolean;
+        default true;
+      }
+    }
+  }
 
-        case rest {
-          description
-              "Use REST for configuring the VNF.";
-          container rest {
-            leaf port {
-              description
-                  "Port for the REST server.";
-              type inet:port-number;
-            }
-          }
-        }
+  grouping event-config {
+    leaf seq {
+      description
+          "Sequence number for the configuration primitive.";
+      type uint64;
+    }
 
-        case script {
-          description
-              "Use custom script for configuring the VNF.
-               This script is executed in the context of 
-               Orchestrator.";
-          container script {
-            leaf script-type {
-              description
-                  "Script type - currently supported : bash, expect";
-              type enumeration {
-                enum bash;
-                enum expect;
-              }
-            }
-          }
-        }
+    leaf name {
+      description
+          "Name of the configuration primitive.";
+      type string;
+      mandatory "true";
+    }
 
-        case juju {
-          description
-            "Configure the VNF through Juju.";
-          container juju {
-            leaf charm {
-              description "Juju charm to use with the VNF.";
-              type string;
-            }
-          }
-        }
+    leaf user-defined-script {
+      description
+          "A user defined script.";
+      type string;
+    }
+
+    list parameter {
+      key "name";
+      leaf name {
+        type string;
       }
 
-      container config-access {
-        leaf mgmt-ip-address {
-          description
-              "IP address to be used to configure this VNF,
-               optional if it is possible to resolve dynamically.";
-          type inet:ip-address;
-        }
+      leaf value {
+        description "Value of the configuration primitive.";
+        type string;
+      }
+    }
+  }
+  
+ grouping image-properties {
+    leaf image {
+      description
+            "Image name for the software image.
+             If the image name is found within the VNF package it will
+             be uploaded to all VIM accounts during onboarding process.
+             Otherwise, the image must be added to the VIM account with
+             the same name as entered here.
+            ";
+      type string;
+    }
 
-        leaf username {
-          description 
-              "username for configuration.";
+    leaf image-checksum {
+      description
+            "Image md5sum for the software image.
+            The md5sum, if provided, along with the image name uniquely
+            identifies an image uploaded to the CAL.
+            ";
+      type string;
+    }
+  }
+
+
+  grouping vca-relationships {
+    container vca-relationships {
+      list relation {
+        description "List of relations between VCA componets.";
+
+        key "requires provides";
+
+        leaf requires {
+          description
+            "Name of the required relation.";
           type string;
         }
 
-        leaf password {
-          description 
-              "Password for configuration access authentication.";
+        leaf provides {
+          description
+            "Name of the provided relation.";
           type string;
         }
       }
+    }
+  }
 
-      container config-attributes {
-        description
-            "Miscelaneous input parameters to be considered
-             while processing the NSD to apply configuration";
+  grouping vca-configuration {
+    description
+        "Information about the VNF or VDU configuration. Note:
+         If the NS contains multiple instances of the
+         same VNF or VDU, each instance could have a different
+         configuration.";
 
-        leaf config-priority {
-          description
-              "Configuration priority - order of confgiration
-               to be applied to each VNF in this NS,
-               low number gets precedence over high number";
-          type uint64;
+    choice config-method {
+      description
+          "Defines the configuration method for the VNF or VDU.";
+      case script {
+        description
+            "Use custom script for configuring the VNF or VDU.
+             This script is executed in the context of
+             Orchestrator (The same system and environment
+             as the Launchpad).";
+        container script {
+          leaf script-type {
+            description
+                "Script type - currently supported - Scripts confirming to Rift CA plugin";
+            type enumeration {
+              enum rift;
+            }
+          }
         }
+      }
 
-        leaf config-delay {
-          description 
-              "Wait (seconds) before applying the configuration to VNF";
-          type uint64;
+      case juju {
+        description
+          "Configure the VNF or VDU through Juju.";
+        container juju {
+          leaf charm {
+            description "Juju charm to use with the VNF or VDU.";
+            type string;
+          }
+          uses manotypes:vca-relationships;
         }
       }
+    }
 
-      list service-primitive {
-        rwpb:msg-new ServicePrimitive;
-        description
-          "List of service primitives supported by the
-          configuration agent for this VNF.";
-        key "name";
+    list config-primitive {
+      description
+        "List of config primitives supported by the
+        configuration agent for this VNF or VDU.";
+      key "name";
 
-        leaf name {
-          description
-            "Name of the service primitive.";
-          type string;
-        }
+      leaf name {
+        description
+          "Name of the config primitive.";
+        type string;
+      }
 
-        list parameter {
-          description
-            "List of parameters to the service primitive.";
-          key "name";
-          uses primitive-parameter;
-        }
+      list parameter {
+        description
+          "List of parameters to the config primitive.";
+        key "name";
+        uses primitive-parameter;
       }
 
-      list initial-config-primitive {
-        rwpb:msg-new InitialConfigPrimitive;
+      leaf user-defined-script {
         description
-            "Initial set of configuration primitives.";
-        key "seq";
-        leaf seq {
-          description
-              "Sequence number for the configuration primitive.";
-          type uint64;
-        }
+          "A user defined script. If user defined script is defined,
+           the script will be executed using bash";
+        type string;
+      }
+    }
 
-        leaf name {
-          description 
-              "Name of the configuration primitive.";
-          type string;
-        }
+    list initial-config-primitive {
+      description
+        "Initial set of configuration primitives.";
+      key "seq";
+      leaf seq {
+        description
+          "Sequence number for the configuration primitive.";
+        type uint64;
+      }
 
-        list parameter {
-          key "name";
+      choice primitive-type {
+        case primitive-definition {
           leaf name {
+            description
+              "Name of the configuration primitive.";
             type string;
           }
 
-          leaf value {
+          uses primitive-parameter-value;
+
+          leaf user-defined-script {
+            description
+              "A user defined script.";
             type string;
           }
         }
       }
-
-      leaf config-template {
-        description
-            "Configuration template for each VNF";
-        type string;
-      }
     }
-  } // END - grouping vnf-configuration
+  } // END - grouping vca-configuration
 
   typedef virtual-link-type {
     description
         "Type of virtual link
          ELAN: A multipoint service connecting a set of VNFs
-         // ELINE: For a simple point to point connection
+         ELINE: For a simple point to point connection
          //        between a VNF and the existing network.
          // ETREE: A multipoint service connecting one or
          //        more roots and a set of leaves, but
          //        preventing inter-leaf communication.";
     type enumeration {
       enum ELAN;
+      enum ELINE;
       // enum ETREE;
-      // enum ELINE;
     }
   }
 
@@ -336,7 +376,7 @@ module mano-types
 
   typedef api-type {
     description
-      "Type of API to fetch monitoring params";
+      "Type of API to fetch monitoring parameters";
 
     type enumeration {
       enum HTTP;
@@ -350,8 +390,8 @@ module mano-types
       "The method to extract a value from a JSON response
 
        NAMEKEY - Use the name as the key for a non-nested value.
-       JSONPATH - Use jsonpath-rw implemenation to extract a value.
-       OBJECTPATH - Use objectpath implemenation to extract a value.";
+       JSONPATH - Use jsonpath-rw implementation to extract a value.
+       OBJECTPATH - Use objectpath implementation to extract a value.";
       type enumeration {
         enum NAMEKEY;
         enum JSONPATH;
@@ -375,7 +415,7 @@ module mano-types
         VPORT: Virtual Port
         // VNIC_ADDR: Virtual NIC Address
         // PNIC_ADDR: Physical NIC Address
-        // PPORT: Phsical Port.";
+        // PPORT: Physical Port.";
 
     type enumeration {
       enum VPORT;
@@ -386,12 +426,12 @@ module mano-types
     description
         "Type of the widget, typically used by the UI.";
     type enumeration {
-      enum HISTOGRAM;
-      enum BAR;
-      enum GAUGE;
-      enum SLIDER;
       enum COUNTER;
+      enum GAUGE;
       enum TEXTBOX;
+      enum SLIDER;
+      enum HISTOGRAM;
+      enum BAR;
     }
   }
 
@@ -581,7 +621,7 @@ module mano-types
     container vm-flavor {
       leaf vcpu-count {
         description
-            "Number of vcpus for the VM.";
+            "Number of VCPUs for the VM.";
         type uint16;
       }
 
@@ -599,6 +639,13 @@ module mano-types
     }
   } //grouping vm-flavor
 
+       grouping vm-flavor-name {
+       leaf vm-flavor-name {
+               description "flavor name to be used while creating vm using cloud account";
+               type string;
+       }
+       }
+
   grouping vswitch-epa {
     container vswitch-epa {
       leaf ovs-acceleration {
@@ -716,22 +763,29 @@ module mano-types
         description "Number of threads per cores on the host.";
         type uint64;
       }
-      
-      leaf-list cpu-feature {
-        description
-            "List of CPU features.";
-        type cpu-feature-type;
+
+      list cpu-feature {
+        key "feature";
+        description "List of CPU features.";
+        leaf feature {
+          description "CPU feature.";
+          type cpu-feature-type;
+        }
       }
 
-      
+
       leaf om-cpu-model-string {
-        description "Openmano CPU model string";
+        description "OpenMANO CPU model string";
         type string;
       }
 
-      leaf-list om-cpu-feature {
-        description "Openmano CPU features";
-        type string;
+      list om-cpu-feature {
+        key "feature";
+        description "List of OpenMANO CPU features";
+        leaf feature {
+          description "CPU feature";
+          type string;
+        }
       }
     }
   }
@@ -749,12 +803,12 @@ module mano-types
             "Memory page allocation size. If a VM requires
              hugepages, it should choose LARGE or SIZE_2MB
              or SIZE_1GB. If the VM prefers hugepages it
-             should chose PREFER_LARGE.
+             should choose PREFER_LARGE.
              LARGE        : Require hugepages (either 2MB or 1GB)
              SMALL        : Doesn't require hugepages
              SIZE_2MB     : Requires 2MB hugepages
              SIZE_1GB     : Requires 1GB hugepages
-             PREFER_LARGE : Application perfers hugepages";
+             PREFER_LARGE : Application prefers hugepages";
         type enumeration {
           enum LARGE;
           enum SMALL;
@@ -822,8 +876,8 @@ module mano-types
       }
 
       choice numa-policy {
-        case numa-unware {
-          leaf numa-unware {
+        case numa-unaware {
+          leaf numa-unaware {
             type empty;
           }
         }
@@ -831,20 +885,21 @@ module mano-types
         case numa-aware {
           container numa-node-policy {
             description
-                "This policy defines numa topology of the
+                "This policy defines NUMA topology of the
                  guest. Specifically identifies if the guest
-                 should be run on a host with one numa
-                 node or multiple numa nodes. As an example
-                 a guest may want 8 vcpus and 4 GB of
-                 memory. But may want the vcpus and memory
-                 distributed across multiple numa nodes.
-                 The NUMA node 1 may run with 6 vcpus and
-                 3GB, and NUMA node 2 may run with 2 vcpus
-                 and 1GB.";
+                 should be run on a host with one NUMA
+                 node or multiple NUMA nodes. As an example
+                 a guest might need 8 VCPUs and 4 GB of
+                 memory. However, it might need the VCPUs
+                 and memory distributed across multiple
+                 NUMA nodes. In this scenario, NUMA node
+                 1 could run with 6 VCPUs and 3GB, and
+                 NUMA node 2 could run with 2 VCPUs and
+                 1GB.";
 
             leaf node-cnt {
               description
-                  "The number of numa nodes to expose to the VM.";
+                  "The number of NUMA nodes to expose to the VM.";
               type uint16;
             }
 
@@ -856,7 +911,7 @@ module mano-types
                                strictly from the memory attached
                                to the NUMA node.
                    PREFERRED : The memory should be allocated
-                               perferentially from the memory
+                               preferentially from the memory
                                attached to the NUMA node";
               type enumeration {
                 enum STRICT;
@@ -873,11 +928,16 @@ module mano-types
                 type uint64;
               }
 
-              leaf-list vcpu {
+              list vcpu {
+                key "id";
                 description
-                    "List of vcpus to allocate on
-                     this numa node.";
-                type uint64;
+                    "List of VCPUs to allocate on
+                     this NUMA node.";
+                leaf id {
+                  type uint64;
+                  description "List of VCPUs ids to allocate on
+                               this NUMA node";
+                }
               }
 
               leaf memory-mb {
@@ -889,7 +949,7 @@ module mano-types
 
               choice om-numa-type {
                 description
-                    "Openmano Numa type selection";
+                    "OpenMANO Numa type selection";
 
                 case cores {
                   leaf num-cores {
@@ -905,7 +965,7 @@ module mano-types
 
                     list paired-thread-ids {
                       description
-                          "List of thread pairs to use in case of paired-thread numa";
+                          "List of thread pairs to use in case of paired-thread NUMA";
                       max-elements 16;
                       key thread-a;
 
@@ -938,25 +998,14 @@ module mano-types
       description "Container for the provider network.";
       leaf physical-network {
         description
-            "Name of the phsyical network on which the provider
+            "Name of the physical network on which the provider
              network is built.";
         type string;
       }
 
-      leaf overlay-type {
-        description
-            "Type of the overlay network.";
-        type enumeration {
-          enum LOCAL;
-          enum FLAT;
-          enum VLAN;
-          enum VXLAN;
-          enum GRE;
-        }
-      }
       leaf segmentation_id {
         description
-            "Segmentation ID";
+            "ID of segregated virtual networks";
             type uint32;
       }
     }
@@ -1021,7 +1070,7 @@ module mano-types
 
         leaf vnfd-id-ref {
           description
-              "A reference to a vnfd. This is a 
+              "A reference to a vnfd. This is a
                leafref to path:
                    ../../../../nsd:constituent-vnfd
                    + [nsd:id = current()/../nsd:id-ref]
@@ -1029,7 +1078,7 @@ module mano-types
                NOTE: An issue with confd is preventing the
                use of xpath. Seems to be an issue with leafref
                to leafref, whose target is in a different module.
-               Once that is resovled this will switched to use
+               Once that is resolved this will switched to use
                leafref";
 
           type string;
@@ -1096,7 +1145,7 @@ module mano-types
         type string;
       }
 
-      leaf polling_interval_secs {
+      leaf polling-interval-secs {
         description "The HTTP polling interval in seconds";
         type uint8;
         default 2;
@@ -1104,8 +1153,8 @@ module mano-types
 
       leaf method {
         description
-          "This is the method to be performed at the uri.
-           GET by default for action";
+          "Method that the URI should perform.
+           Deafult action is GET.";
 
         type manotypes:http-method;
         default "GET";
@@ -1128,7 +1177,7 @@ module mano-types
 
     list monitoring-param {
       description
-          "List of monitoring parameters at the NS level";
+          "List of monitoring parameters at the network service level";
       key id;
       leaf id {
         type string;
@@ -1191,16 +1240,19 @@ module mano-types
       }
 
       leaf group-tag {
-        description "A simple tag to group monitoring parameters";
+        description "A tag to group monitoring parameters";
         type string;
       }
 
 
       leaf widget-type {
+        description "Defines the UI Display variant of measured counters.";
         type manotypes:widget-type;
+        default "COUNTER";
       }
 
       leaf units {
+        description "Measured Counter Units (e.g., Packets, Kbps, Mbps, etc.)";
         type string;
       }
   }
@@ -1219,7 +1271,7 @@ module mano-types
         }
         leaf max-value {
           description
-              "Maxium value for the parameter";
+              "Maximum value for the parameter";
           type uint64;
         }
       }
@@ -1266,19 +1318,22 @@ module mano-types
       key id;
 
       leaf id {
+        description "Identifier for control parameter";
         type string;
       }
 
       leaf name {
+        description "Name of a control parameter";
         type string;
       }
 
       leaf description {
+        description "A description of the control parameter";
         type string;
       }
 
       leaf group-tag {
-        description "A simple tag to group control parameters";
+        description "A tag to group control parameters";
         type string;
       }
 
@@ -1290,7 +1345,7 @@ module mano-types
 
       leaf max-value {
         description
-            "Maxium value for the parameter";
+            "Maximum value for the parameter";
         type uint64;
       }
 
@@ -1316,15 +1371,15 @@ module mano-types
 
       leaf url {
         description
-          "This is the URL where to perform the operation";
+          "This is the URL where the operation should be performed.";
 
         type inet:uri;
       }
 
       leaf method {
         description
-          "This is the method to be performed at the uri.
-           POST by default for action";
+          "Method that the URI should perform.
+           Default Action is POST";
 
         type manotypes:http-method;
         default "POST";
@@ -1360,7 +1415,7 @@ module mano-types
       }
 
       leaf group-tag {
-        description "A simple tag to group monitoring parameter";
+        description "A tag to group monitoring parameter";
         type string;
       }
 
@@ -1390,7 +1445,7 @@ module mano-types
   }
 
   grouping input-parameter {
-    description "";
+    description "List of input parameters that can be specified when instantiating a network service.";
 
     list input-parameter {
       description
@@ -1401,7 +1456,7 @@ module mano-types
 
       leaf xpath {
         description
-          "A an xpath that specfies which element in a descriptor is to be
+          "An xpath that specfies which element in a descriptor is to be
           modified.";
         type string;
       }
@@ -1434,7 +1489,7 @@ module mano-types
       }
 
       leaf default-value {
-        description " A default value for this input parameter";
+        description "Default Value for the Input Parameter";
         type string;
       }
     }
@@ -1640,7 +1695,7 @@ module mano-types
   }
 
   typedef alarm-severity-type {
-    description "An indication of the importance or ugency of the alarm";
+    description "An indication of the importance or urgency of the alarm";
     type enumeration {
       enum LOW;
       enum MODERATE;
@@ -1659,8 +1714,8 @@ module mano-types
 
   typedef alarm-statistic-type {
     description
-        "The type of statistic to used to measure a metric to determine
-        threshold crossing for an alarm.";
+        "Statistic type to use to determine threshold crossing
+         for an alarm.";
     type enumeration {
       enum AVERAGE;
       enum MINIMUM;
@@ -1672,9 +1727,9 @@ module mano-types
 
   typedef alarm-operation-type {
     description
-        "The relational operator used to define whether an alarm should be
-        triggered when, say, the metric statistic goes above or below a
-        specified value.";
+        "The relational operator used to define whether an alarm
+        should be triggered in certain scenarios, such as if the
+        metric statistic goes above or below a specified value.";
     type enumeration {
       enum GE; // greater than or equal
       enum LE; // less than or equal
@@ -1687,8 +1742,7 @@ module mano-types
   grouping alarm {
     leaf alarm-id {
       description
-          "This field is reserved for the identifier assigned by the cloud
-          provider";
+          "This field is reserved for the identifier assigned by the VIM provider";
 
       type string;
     }
@@ -1699,7 +1753,7 @@ module mano-types
     }
 
     leaf description {
-      description "A string containing a description of this alarm";
+      description "A description of this alarm";
       type string;
     }
 
@@ -1751,7 +1805,7 @@ module mano-types
     }
 
     leaf severity {
-      description "A measure of the important or urgency of the alarm";
+      description "A measure of the importance or urgency of the alarm";
       type alarm-severity-type;
     }
 
@@ -1767,9 +1821,9 @@ module mano-types
 
     leaf operation {
       description
-          "The relational operator that defines whether the alarm should be
-          triggered when the metric statistic is, say, above or below the
-          specified threshold value.";
+          "The relational operator used to define whether an alarm should be
+           triggered in certain scenarios, such as if the metric statistic
+           goes above or below a specified value.";
       type alarm-operation-type;
     }
 
@@ -1792,17 +1846,14 @@ module mano-types
 
     leaf evaluations {
       description
-          "This is the number of samples of the metric statistic used to
-          evaluate threshold crossing. Each sample or evaluation is equal to
-          the metric statistic obtained for a given period. This can be used
-          to mitigate spikes in the metric that may skew the statistic of
-          interest.";
+          "Defines the length of time (seconds) in which metric data are
+           collected in order to evaluate the chosen statistic.";
       type uint32;
     }
   }
 
   typedef cloud-account-type {
-    description "cloud account type";
+    description "VIM account type";
     type enumeration {
       enum aws;
       enum cloudsim;
@@ -1814,27 +1865,31 @@ module mano-types
       enum openvim;
     }
   }
-  
+
   grouping host-aggregate {
     list host-aggregate {
       description "Name of the Host Aggregate";
       key "metadata-key";
-      
+
       leaf metadata-key {
+        description
+            "Name of the additional information attached to the host-aggregate";
         type string;
       }
       leaf metadata-value {
+        description
+            "Value of the corresponding metadata-key";
         type string;
       }
     }
   }
-  
+
   grouping placement-group-input {
     leaf cloud-type {
       type manotypes:cloud-account-type;
     }
     choice cloud-provider {
-      case openstack {           
+      case openstack {
         container availability-zone {
           description "Name of the Availability Zone";
           leaf name {
@@ -1857,7 +1912,7 @@ module mano-types
       case openmano {
         leaf openmano-construct {
           type empty;
-        }        
+        }
       }
       case vsphere {
         leaf vsphere-construct {
@@ -1876,7 +1931,56 @@ module mano-types
       }
     }
   }
-  
+
+  grouping cloud-config {
+    list key-pair {
+      key "name";
+      description "Used to configure the list of public keys to be injected as part
+          of ns instantiation";
+
+      leaf name {
+        description "Name of this key pair";
+        type string;
+      }
+
+      leaf key {
+        description "Key associated with this key pair";
+        type string;
+      }
+    }
+
+    list user {
+      key "name";
+      description "List of users to be added through cloud-config";
+
+      leaf name {
+        description "Name of the user ";
+        type string;
+      }
+
+      leaf user-info {
+        description "The user name's real name";
+        type string;
+      }
+
+      list key-pair {
+        key "name";
+        description "Used to configure the list of public keys to be injected as part
+            of ns instantiation";
+
+        leaf name {
+          description "Name of this key pair";
+          type string;
+        }
+
+        leaf key {
+          description "Key associated with this key pair";
+          type string;
+        }
+      }
+    }
+  }
+
   grouping placement-group-info {
     description "";
 
@@ -1892,7 +1996,7 @@ module mano-types
                    behind this placement group. This is for human consumption only";
       type string;
     }
-    
+
     leaf strategy {
       description
           "Strategy associated with this placement group
@@ -1915,7 +2019,7 @@ module mano-types
   grouping ip-profile-info {
     description "Grouping for IP-Profile";
     container ip-profile-params {
-      
+
       leaf ip-version {
         type inet:ip-version;
         default ipv4;
@@ -1936,12 +2040,15 @@ module mano-types
         type string;
       }
 
-      leaf-list dns-server {
-        description "List of DNS Servers associated with IP Profile";
-        type inet:ip-address;
+      list dns-server {
+        key "address";
+        leaf address {
+          description "List of DNS Servers associated with IP Profile";
+          type inet:ip-address;
+        }
       }
 
-      container dhcp-params {  
+      container dhcp-params {
         leaf enabled {
           description "This flag indicates if DHCP is enabled or not";
           type boolean;
@@ -1971,21 +2078,113 @@ module mano-types
       description
           "List of IP Profiles.
              IP Profile describes the IP characteristics for the Virtual-Link";
-    
+
       key "name";
 
       leaf name {
         description "Name of the IP-Profile";
         type string;
       }
-      
+
       leaf description {
         description "Description for IP profile";
         type string;
       }
-      
+
       uses ip-profile-info;
     }
   }
-  
+
+  grouping config-file {
+    description "Grouping for files needed to be mounted into an additional drive";
+    list config-file {
+      description
+          "List of configuration files to be written on an additional drive";
+      key "source";
+      leaf source {
+        description "Name of the configuration file";
+        type string;
+      }
+      leaf dest {
+        description "Full path of the destination in the guest";
+        type string;
+      }
+    }
+  }
+
+  grouping supplemental-boot-data {
+    description "Grouping for custom vim data";
+    container supplemental-boot-data {
+      uses manotypes:config-file;
+      leaf boot-data-drive {
+        description "Some VIMs implement additional drives to host config-files or meta-data";
+        type boolean;
+        default false;
+      }
+    }
+  }
+
+  grouping volume-info {
+    description "Grouping for Volume-info";
+
+    leaf description {
+      description "Description for Volume";
+      type string;
+    }
+
+    leaf size {
+      description "Size of disk in GB";
+      type uint64;
+    }
+
+    choice volume-source {
+      description
+            "Defines the source of the volume. Possible options are
+             1. Ephemeral -- Empty disk
+             2. Image     -- Refer to image to be used for volume
+             3. Volume    -- Reference of pre-existing volume to be used
+            ";
+
+      case ephemeral {
+        leaf ephemeral {
+          type empty;
+        }
+      }
+
+      case image {
+        uses image-properties;
+      }
+    }
+
+    leaf device-bus {
+      description "Type of disk-bus on which this disk is exposed to guest";
+      type enumeration {
+        enum ide;
+        enum usb;
+        enum virtio;
+        enum scsi;
+      }
+    }
+
+    leaf device-type {
+      description "The type of device as exposed to guest";
+      type enumeration {
+          enum disk;
+          enum cdrom;
+          enum floppy;
+          enum lun;
+      }
+    }
+  }
+
+  grouping rpc-project-name {
+    leaf project-name {
+      default "default";
+      description
+        "Project to which this belongs";
+      type leafref {
+        path "/rw-project:project/rw-project:name";
+      }
+    }
+  }
 }