Feature 8634: support for L3 networking
[osm/IM.git] / models / yang / mano-types.yang
index ebd24a9..f4cce6b 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.
 
 module mano-types
 {
-  namespace "urn:ietf:params:xml:ns:yang:nfvo:mano-types";
+  namespace "urn:etsi:osm:yang:mano-types";
   prefix "manotypes";
 
   import ietf-inet-types {
     prefix "inet";
   }
 
-  import rw-pb-ext {
-    prefix "rwpb";
+  import osm-project {
+    prefix "osm-project";
+  }
+
+  revision 2017-02-08 {
+    description
+      "Update model to support projects.";
   }
 
   revision 2015-04-23 {
@@ -40,6 +45,12 @@ 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 {
@@ -67,6 +78,12 @@ module mano-types
         type string;
       }
 
+      leaf data-type {
+        description
+            "Data type associated with the value.";
+        type manotypes:parameter-data-type;
+      }
+
       leaf value {
         description
             "Value associated with the name.";
@@ -109,6 +126,7 @@ module mano-types
         "The value should be dimmed by the UI.
         Only applies to parameters with default values.";
       type boolean;
+      default false;
     }
 
     leaf hidden {
@@ -116,28 +134,29 @@ module mano-types
         "The value should be hidden by the UI.
         Only applies to parameters with default values.";
       type boolean;
+      default false;
     }
   }
-  
+
   grouping ui-primitive-group {
     list parameter-group {
       description
             "Grouping of parameters which are logically grouped in UI";
       key "name";
+
       leaf name {
         description
             "Name of the parameter group";
         type string;
       }
+
       list parameter {
         description
             "List of parameters for the service primitive.";
         key "name";
         uses manotypes:primitive-parameter;
       }
+
       leaf mandatory {
         description "Is this parameter group mandatory";
         type boolean;
@@ -146,28 +165,7 @@ module mano-types
     }
   }
 
-  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 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 initial-config {
+  grouping event-config {
     leaf seq {
       description
           "Sequence number for the configuration primitive.";
@@ -178,7 +176,7 @@ module mano-types
       description
           "Name of the configuration primitive.";
       type string;
-      mandatory "true";
+      mandatory true;
     }
 
     leaf user-defined-script {
@@ -200,91 +198,253 @@ module mano-types
     }
   }
 
-  grouping vnf-configuration {
-    container vnf-configuration {
-      rwpb:msg-new VnfConfiguration;
+ grouping image-properties {
+    leaf image {
       description
-          "Information about the VNF configuration. Note: 
-           If the NS contains multiple instances of the
-           same VNF, each instance could have a different
-           configuration.";
+            "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 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;
+    }
+  }
+
 
-      choice config-method {
+  grouping vca-relations {
+    list relation {
+      description "List of relations between elements in this descriptor.";
+      key "name";
+
+      leaf name {
         description
-            "Defines the configuration method for the VNF.";
-        case script {
+          "Name of the relation.";
+
+        type string;
+      }
+
+      list entities {
+        description
+          "List of two elements to be related.
+           Elements to be related are identified by a pair (id, endpoint).
+           The relation will relate (id1, endpoint1) to (id2, endpoint2).";
+        key "id";
+
+        leaf id {
           description
-              "Use custom script for configuring the VNF.
-               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;
-              }
-            }
-          }
+            "A string, reference to the element id in the descriptor.
+             It could be a vnfd-id or a vdu-id in a VNFD,
+             or a nsd-id or member-vnf-index in a NSD.";
+          type string;
         }
 
-        case juju {
+        leaf endpoint {
           description
-            "Configure the VNF through Juju.";
-          container juju {
-            leaf charm {
-              description "Juju charm to use with the VNF.";
-              type string;
+            "Endpoint name defining the relation.";
+          type string;
+        }
+      }
+    }
+  }
+
+  grouping vca-metrics {
+    description
+        "Information about the VNF or VDU metrics";
+    list metrics {
+      description "List of VCA related metrics";
+      key "name";
+      leaf name {
+        description
+          "Name of the metric, as defined in the Juju charm.";
+        type string;
+      }
+    }
+  } // END - grouping vca-metrics
+
+  grouping configuration-method {
+    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;
             }
           }
         }
       }
 
-      list service-primitive {
-        rwpb:msg-new ServicePrimitive;
+      case juju {
         description
-          "List of service primitives supported by the
-          configuration agent for this VNF.";
-        key "name";
+          "Configure the VNF or VDU through Juju.";
+        container juju {
+          leaf charm {
+            description "Juju charm to use with the VNF or VDU.";
+            type string;
+          }
+          leaf proxy {
+            description "Is this a proxy charm?";
+            type boolean;
+            default true;
+          }
+        }
+      }
+    }
+  }
 
-        leaf name {
-          description
-            "Name of the service primitive.";
+  grouping vca-config-access {
+
+    container config-access {
+
+      description
+        "Indicates the way to access to the xNF or xDU for VCA configuration.
+         For the moment there is a single way (ssh-access).";
+
+      container ssh-access {
+
+        description
+          "If the xNF requires ssh and this parameter is set, SSH keys
+          will be injected so that VCA can configure the xNF or xDU via ssh.";
+
+        leaf required  {
+          description "whether ssh access is needed or not";
+          type boolean;
+          default false;
+        }
+
+        leaf default-user {
+          description "Default user for ssh";
           type string;
         }
+      }
+    }
+  } // END - grouping vca-config-access
 
-        list parameter {
-          description
-            "List of parameters to the service primitive.";
-          key "name";
-          uses primitive-parameter;
+  grouping vca-configuration {
+    description
+        "Common information in the descriptors for NS, VNF or VDU configuration.
+         Note: If the NS contains multiple instances of the
+         same VNF or VDU, each instance could have a different
+         configuration.";
+
+    uses manotypes:configuration-method;
+
+    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 config primitive.";
+        type string;
+      }
+
+      list parameter {
+        description
+          "List of parameters to the config primitive.";
+        key "name";
+        uses primitive-parameter;
+      }
+
+      leaf user-defined-script {
+        description
+          "A user defined script. If user defined script is defined,
+           the script will be executed using bash";
+        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;
+      }
+
+      choice primitive-type {
+        case primitive-definition {
+          leaf name {
+            description
+              "Name of the configuration primitive.";
+            type string;
+          }
+
+          uses primitive-parameter-value;
+
+          leaf user-defined-script {
+            description
+              "A user defined script.";
+            type string;
+          }
         }
       }
+    }
+
+    list terminate-config-primitive {
+      description
+        "Terminate set of configuration primitives.";
+      key "seq";
+      leaf seq {
+        description
+          "Sequence number for the configuration primitive.";
+        type uint64;
+      }
+      leaf name {
+        description
+          "Name of the configuration primitive.";
+        type string;
+      }
+
+      uses primitive-parameter-value;
 
-      list initial-config-primitive {
-        rwpb:msg-new InitialConfigPrimitive;
+      leaf user-defined-script {
         description
-          "Initial set of configuration primitives.";
-        key "seq";
-        uses initial-config;
+          "A user defined script.";
+        type string;
       }
     }
-  } // END - grouping vnf-configuration
+    uses manotypes:vca-metrics;
+
+  } // 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
-         //        between a VNF and the existing network.
+         ELAN: A multipoint service connecting a set of elements
+         ELINE: A point-to-point service connecting two elements
+         L3: A service providing either Layer-3 visibility (IP) between
+             VDUs/VNFs or explicit interconnection between two ELAN VLDs.";
          // 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 L3;
       // enum ETREE;
-      // enum ELINE;
     }
   }
 
@@ -364,12 +524,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;
     }
   }
 
@@ -555,6 +715,61 @@ module mano-types
     }
   }
 
+  typedef nfvi-metric-type {
+    description "Type of NFVI metric to be monitored";
+    type enumeration {
+      enum cpu_utilization;
+      enum average_memory_utilization;
+      enum disk_read_ops;
+      enum disk_write_ops;
+      enum disk_read_bytes;
+      enum disk_write_bytes;
+      enum packets_sent;
+      enum packets_received;
+      enum packets_in_dropped;
+      enum packets_out_dropped;
+    }
+  }
+
+  typedef scaling-trigger {
+    type enumeration {
+      enum pre-scale-in {
+        value 1;
+      }
+      enum post-scale-in {
+        value 2;
+      }
+      enum pre-scale-out {
+        value 3;
+      }
+      enum post-scale-out {
+        value 4;
+      }
+    }
+  }
+
+  typedef scaling-policy-type {
+    type enumeration {
+      enum manual {
+        value 1;
+      }
+      enum automatic {
+        value 2;
+      }
+    }
+  }
+
+  typedef scaling-criteria-operation {
+    type enumeration {
+      enum AND {
+        value 1;
+      }
+      enum OR {
+        value 2;
+      }
+    }
+  }
+
   grouping vm-flavor {
     container vm-flavor {
       leaf vcpu-count {
@@ -577,6 +792,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 {
@@ -694,7 +916,7 @@ module mano-types
         description "Number of threads per cores on the host.";
         type uint64;
       }
-      
+
       list cpu-feature {
         key "feature";
         description "List of CPU features.";
@@ -704,7 +926,6 @@ module mano-types
         }
       }
 
-      
       leaf om-cpu-model-string {
         description "OpenMANO CPU model string";
         type string;
@@ -718,6 +939,7 @@ module mano-types
           type string;
         }
       }
+
     }
   }
 
@@ -749,47 +971,76 @@ module mano-types
         }
       }
 
-      leaf cpu-pinning-policy {
-        description
-            "CPU pinning policy describes association
-             between virtual CPUs in guest and the
-             physical CPUs in the host.
-             DEDICATED : Virtual CPUs are pinned to
-                         physical CPUs
-             SHARED    : Multiple VMs may share the
-                         same physical CPUs.
-             ANY       : Any policy is acceptable for the VM";
-        type enumeration {
-          enum DEDICATED;
-          enum SHARED;
-          enum ANY;
+      choice cpu-policy {
+        case cpu-pinning {
+          leaf cpu-pinning-policy {
+            description
+                "CPU pinning policy describes association
+                 between virtual CPUs in guest and the
+                 physical CPUs in the host.
+                 DEDICATED : Virtual CPUs are pinned to
+                             physical CPUs
+                 SHARED    : Multiple VMs may share the
+                             same physical CPUs.
+                 ANY       : Any policy is acceptable for the VM";
+            type enumeration {
+              enum DEDICATED;
+              enum SHARED;
+              enum ANY;
+            }
+            default "ANY";
+          }
+          leaf cpu-thread-pinning-policy {
+              description
+                "CPU thread pinning policy describes how to
+                 place the guest CPUs when the host supports
+                 hyper threads:
+                 AVOID   : Avoids placing a guest on a host
+                           with threads.
+                 SEPARATE: Places vCPUs on separate cores,
+                           and avoids placing two vCPUs on
+                           two threads of same core.
+                 ISOLATE : Places each vCPU on a different core,
+                           and places no vCPUs from a different
+                           guest on the same core.
+                 PREFER  : Attempts to place vCPUs on threads
+                           of the same core.";
+            type enumeration {
+              enum AVOID;
+              enum SEPARATE;
+              enum ISOLATE;
+              enum PREFER;
+            }
+          }
         }
-        default "ANY";
-      }
 
-      leaf cpu-thread-pinning-policy {
-          description
-            "CPU thread pinning policy describes how to
-             place the guest CPUs when the host supports
-             hyper threads:
-             AVOID   : Avoids placing a guest on a host
-                       with threads.
-             SEPARATE: Places vCPUs on separate cores,
-                       and avoids placing two vCPUs on
-                       two threads of same core.
-             ISOLATE : Places each vCPU on a different core,
-                       and places no vCPUs from a different
-                       guest on the same core.
-             PREFER  : Attempts to place vCPUs on threads
-                       of the same core.";
-        type enumeration {
-          enum AVOID;
-          enum SEPARATE;
-          enum ISOLATE;
-          enum PREFER;
+        case cpu-quota {
+          container cpu-quota {
+              description "CPU quota describes the CPU resource allocation policy.
+                           Limit and Reserve values are defined in MHz";
+              uses allocation-properties;
+          }
         }
       }
 
+      container mem-quota {
+          description "Memory quota describes the memory resource allocation policy.
+                       Limit and Reserve values are defined in MB";
+          uses allocation-properties;
+      }
+
+      container disk-io-quota {
+          description "Disk IO quota describes the disk IO operations resource allocation policy.
+                       Limit and Reserve values are defined in IOPS";
+          uses allocation-properties;
+      }
+
+      container vif-quota {
+          description "Virtual interfaces quota describes the virtual interface bandwidth resource allocation policy.
+                       Limit and Reserve values are defined in Mbps";
+          uses allocation-properties;
+      }
+
       list pcie-device {
         description
             "List of pcie passthrough devices.";
@@ -924,6 +1175,27 @@ module mano-types
     }
   }
 
+  grouping allocation-properties {
+    leaf limit {
+      description "Defines the maximum allocation. The value 0 indicates that usage is not limited.
+                   This parameter ensures that the instance never uses more than the defined amount of resource.";
+      type uint64;
+    }
+
+    leaf reserve {
+      description "Defines the guaranteed minimum reservation.
+                   If needed, the machine will definitely get allocated the reserved amount of resources.";
+      type uint64;
+    }
+
+    leaf shares {
+      description "Number of shares allocated.
+                   Specifies the proportional weighted share for the domain.
+                   If this element is omitted, the service defaults to the OS provided defaults";
+      type uint64;
+    }
+  }
+
   grouping provider-network {
     container provider-network {
       description "Container for the provider network.";
@@ -934,22 +1206,6 @@ module mano-types
         type string;
       }
 
-      leaf overlay-type {
-        description
-            "Type of the overlay network.
-             LOCAL - Provider network implemented in a single compute node
-             FLAT - Provider network shared by all tenants 
-             VLAN - Provider network implemented using 802.1Q tagging
-             VXLAN - Provider networks implemented using RFC 7348
-             GRE - Provider networks implemented using GRE tunnels";
-        type enumeration {
-          enum LOCAL;
-          enum FLAT;
-          enum VLAN;
-          enum VXLAN;
-          enum GRE;
-        }
-      }
       leaf segmentation_id {
         description
             "ID of segregated virtual networks";
@@ -958,7 +1214,7 @@ module mano-types
     }
   }
 
-  grouping monitoring-param {
+  grouping http-endpoints {
     list http-endpoint {
       description
           "List of http endpoints to be used by monitoring params";
@@ -1019,52 +1275,16 @@ module mano-types
         }
       }
     }
-
-    list monitoring-param {
-      description
-          "List of monitoring parameters at the network service level";
-      key id;
-      leaf id {
-        type string;
-      }
-
-      leaf name {
-        type string;
-      }
-
-      leaf http-endpoint-ref {
-        type leafref {
-          path "../../http-endpoint/path";
-        }
-      }
-
-      leaf json-query-method {
-        type json-query-method;
-        default "NAMEKEY";
-      }
-
-      container json-query-params {
-        leaf json-path {
-          description
-            "The jsonpath to use to extract value from JSON structure";
-          type string;
-        }
-        leaf object-path {
-          description
-            "The objectpath to use to extract value from JSON structure";
-          type string;
-        }
-      }
-
-      uses monitoring-param-ui-data;
-      uses monitoring-param-value;
-
-    }
   }
 
   grouping monitoring-param-aggregation {
     typedef aggregation-type {
-      description "aggregation-type";
+      description
+          "aggregation-type, indicates the way to aggregate monitoring-params
+          (e.g. how to aggregate CPU utilisation of all VNFs belonging to the
+          same VNF group identified by member-vnf-index; or how to aggregate
+          memory utilisation of all VDUs belonging to the same VDU group
+          identified by vdu id)";
       type enumeration {
         enum AVERAGE;
         enum MINIMUM;
@@ -1093,6 +1313,7 @@ module mano-types
       leaf widget-type {
         description "Defines the UI Display variant of measured counters.";
         type manotypes:widget-type;
+        default "COUNTER";
       }
 
       leaf units {
@@ -1333,7 +1554,7 @@ module mano-types
       }
 
       leaf default-value {
-        description "/nsd:nsd-catalog/nsd:nsd/nsd:vendor";
+        description "Default Value for the Input Parameter";
         type string;
       }
     }
@@ -1569,11 +1790,12 @@ module mano-types
     }
   }
 
-  typedef alarm-operation-type {
+  typedef relational-operation-type {
     description
-        "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.";
+        "The relational operator used to define whether an alarm,
+        scaling event, etc. 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
@@ -1583,14 +1805,7 @@ module mano-types
     }
   }
 
-  grouping alarm {
-    leaf alarm-id {
-      description
-          "This field is reserved for the identifier assigned by the VIM provider";
-
-      type string;
-    }
-
+  grouping alarm-properties {
     leaf name {
       description "A human readable string to identify the alarm";
       type string;
@@ -1653,11 +1868,6 @@ module mano-types
       type alarm-severity-type;
     }
 
-    leaf metric {
-      description "The metric to be tracked by this alarm.";
-      type alarm-metric-type;
-    }
-
     leaf statistic {
       description "The type of metric statistic that is tracked by this alarm";
       type alarm-statistic-type;
@@ -1666,9 +1876,9 @@ module mano-types
     leaf operation {
       description
           "The relational operator used to define whether an alarm should be
-           triggered in certain scenarios, such as if the metric statistic 
+           triggered in certain scenarios, such as if the metric statistic
            goes above or below a specified value.";
-      type alarm-operation-type;
+      type relational-operation-type;
     }
 
     leaf value {
@@ -1709,12 +1919,12 @@ 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";
@@ -1727,13 +1937,13 @@ module mano-types
       }
     }
   }
-  
+
   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 {
@@ -1756,7 +1966,7 @@ module mano-types
       case openmano {
         leaf openmano-construct {
           type empty;
-        }        
+        }
       }
       case vsphere {
         leaf vsphere-construct {
@@ -1775,7 +1985,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 "";
 
@@ -1791,7 +2050,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
@@ -1814,7 +2073,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;
@@ -1838,12 +2097,12 @@ module mano-types
       list dns-server {
         key "address";
         leaf address {
-                                       description "List of DNS Servers associated with IP Profile";
-                                       type inet:ip-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;
@@ -1873,19 +2132,19 @@ 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;
     }
   }
@@ -1910,12 +2169,12 @@ module mano-types
   grouping supplemental-boot-data {
     description "Grouping for custom vim data";
     container supplemental-boot-data {
-      uses manotypes:config-file;
+//    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;
-      } 
+      }
     }
   }
 
@@ -1949,7 +2208,6 @@ module mano-types
       case image {
         uses image-properties;
       }
-
     }
 
     leaf device-bus {
@@ -1971,6 +2229,16 @@ module mano-types
           enum lun;
       }
     }
+  }
 
+  grouping rpc-project-name {
+    leaf project-name {
+      default "default";
+      description
+        "Project to which this belongs";
+      type leafref {
+        path "/osm-project:project/osm-project:name";
+      }
+    }
   }
 }