All the yang files from SO committed to IM
[osm/IM.git] / models / yang / nsr.yang
diff --git a/models/yang/nsr.yang b/models/yang/nsr.yang
new file mode 100644 (file)
index 0000000..36e03a4
--- /dev/null
@@ -0,0 +1,1459 @@
+
+/*
+ * 
+ *   Copyright 2016 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.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ *
+ */
+
+module nsr
+{
+  namespace "urn:ietf:params:xml:ns:yang:nfvo:nsr";
+  prefix "nsr";
+
+  import rw-pb-ext {
+    prefix "rwpb";
+  }
+
+  import vlr {
+    prefix "vlr";
+  }
+
+  import nsd {
+    prefix "nsd";
+  }
+
+  import vnfd {
+    prefix "vnfd";
+  }
+
+  import vnfr {
+    prefix "vnfr";
+  }
+
+  import ietf-inet-types {
+    prefix "inet";
+  }
+
+  import ietf-yang-types {
+    prefix "yang";
+  }
+
+  import mano-types {
+    prefix "manotypes";
+  }
+
+  import rw-sdn {
+    prefix "rwsdn";
+  }
+
+  revision 2015-09-10 {
+    description
+      "Initial revision. This YANG file defines
+       the Network Service Record (NSR)";
+    reference
+      "Derived from earlier versions of base YANG files";
+  }
+
+  typedef config-states {
+    type enumeration {
+      enum init;
+      enum configuring;
+      enum config_not_needed;
+      enum configured;
+      enum failed;
+    }
+  }
+
+  typedef trigger-type {
+    type enumeration {
+      enum ns-primitive;
+      enum vnf-primitive;
+    }
+  }
+
+  grouping cloud-config {
+    description "List of cloud config parameters";
+
+    list ssh-authorized-key {
+      key "key-pair-ref";
+
+      description "List of authorized ssh keys as part of cloud-config";
+
+      leaf key-pair-ref {
+        description "A reference to the key pair entry in the global key pair table";
+        type leafref {
+          path "/nsr:key-pair/nsr:name";
+        }
+      }
+    }
+    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 ssh-authorized-key {
+        key "key-pair-ref";
+
+        description "Used to configure the list of public keys to be injected as part 
+                        of ns instantiation";
+
+        leaf key-pair-ref {
+          description "A reference to the key pair entry in the global key pair table";
+          type leafref {
+            path "/nsr:key-pair/nsr:name";
+          }
+        }
+      }
+    }
+  }
+
+  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;
+    }
+  }
+
+  rpc start-network-service {
+    description "Start the network service";
+    input {
+      leaf name {
+        mandatory true;
+        description "Name of the Network Service";
+        type string;
+      }
+      leaf nsd-ref {
+        description "Reference to NSR ID ref";
+        mandatory true;
+        type leafref {
+          path "/nsd:nsd-catalog/nsd:nsd/nsd:id";
+        }
+      }
+      uses ns-instance-config-params;
+    }
+
+    output {
+      leaf nsr-id {
+        description "Automatically generated parameter";
+        type yang:uuid;
+      }
+    }
+  }
+
+
+
+  container ns-instance-config {
+
+    list nsr {
+      key "id";
+      unique "name";
+
+      leaf id {
+        description "Identifier for the NSR.";
+        type yang:uuid;
+      }
+
+      leaf name {
+        description "NSR name.";
+        type string;
+      }
+
+      leaf short-name {
+        description "NSR short name.";
+        type string;
+      }
+
+      leaf description {
+        description "NSR description.";
+        type string;
+      }
+
+      leaf admin-status {
+        description
+          "This is the administrative status of the NS instance";
+
+        type enumeration {
+          enum ENABLED;
+          enum DISABLED;
+        }
+      }
+
+      container nsd {
+        description "NS descriptor used to instantiate this NS";
+        uses nsd:nsd-descriptor;
+      }
+
+      uses ns-instance-config-params;
+    }
+  }
+
+  grouping ns-instance-config-params {
+    uses manotypes:input-parameter;
+
+    list scaling-group {
+      description "List of ns scaling group instances";
+      key "scaling-group-name-ref";
+
+      leaf scaling-group-name-ref {
+        description "name of the scaling group
+        leafref path ../../nsd/scaling-group-descriptor/name";
+        type string;
+      }
+
+      list instance {
+        description "The instance of the scaling group";
+        key "id";
+        leaf id {
+          description "Scaling group instance uuid";
+          type uint16;
+        }
+      }
+    }
+
+    list nsd-placement-group-maps {
+      description
+          "Mapping from mano-placement groups construct from NSD to cloud
+          platform placement group construct";
+
+      key "placement-group-ref";
+
+      leaf placement-group-ref {
+        description "Reference for NSD placement group
+            leafref path ../../nsd/placement-groups/name";
+        type string;
+      }
+      uses manotypes:placement-group-input;
+    }
+
+   list vnfd-placement-group-maps {
+      description
+          "Mapping from mano-placement groups construct from VNFD to cloud
+          platform placement group construct";
+
+    key "placement-group-ref vnfd-id-ref";
+
+    leaf vnfd-id-ref {
+      description
+          "A reference to a vnfd. This is a
+          leafref to path:
+          ../../../../nsd:constituent-vnfd
+          + [nsr:id = current()/../nsd:id-ref]
+          + /nsd:vnfd-id-ref
+          NOTE: confd limitations prevent the use of xpath";
+      type yang:uuid;
+    }
+
+    leaf placement-group-ref {
+      description
+          "A reference to VNFD placement group";
+      type leafref {
+        path "/vnfd:vnfd-catalog/vnfd:vnfd[vnfd:id = current()/" +
+            "../nsr:vnfd-id-ref]/vnfd:placement-groups/vnfd:name";
+      }
+    }
+
+    uses manotypes:placement-group-input;
+   }
+   uses cloud-config;
+  }
+
+  grouping vnffgr {
+
+    list vnffgr {
+      key "id";
+
+      leaf id {
+        description "Identifier for the VNFFGR.";
+        type yang:uuid;
+      }
+
+      leaf vnffgd-id-ref {
+        description "VNFFG descriptor id reference";
+        type leafref {
+          path "/nsr:ns-instance-config/nsr:nsr"
+            + "[nsr:id=current()/../../ns-instance-config-ref]"
+            + "/nsr:nsd/nsr:vnffgd/nsr:id";
+        }
+      }
+
+      leaf vnffgd-name-ref {
+        description "VNFFG descriptor name reference";
+        type leafref {
+            path "/ns-instance-config/nsr"
+              + "[id=current()/../../ns-instance-config-ref]"
+              + "/nsd/vnffgd[nsr:id = current()/../vnffgd-id-ref]"
+              + "/name";
+        }
+      }
+
+      leaf sdn-account {
+        description
+            "The SDN account to use when requesting resources for
+            this vnffgr";
+        type leafref {
+          path "/rwsdn:sdn/rwsdn:account/rwsdn:name";
+        }
+      }
+
+      leaf operational-status {
+        description
+          "The operational status of the VNFFGR instance
+            init                : The VNFFGR has just started.
+            running             : The VNFFGR is in running state.
+            terminate           : The VNFFGR is being terminated.
+            terminated          : The VNFFGR is in the terminated state.
+            failed              : The VNFFGR instantiation failed
+          ";
+
+        type enumeration {
+          rwpb:enum-type "VnffgrOperationalStatus";
+          enum init;
+          enum running;
+          enum terminate;
+          enum terminated;
+          enum failed;
+        }
+      }
+
+      list rsp {
+        key "id";
+
+        leaf id {
+          description
+              "Identifier for the RSP.";
+          type yang:uuid;
+        }
+
+        leaf name {
+          description
+              "Name for the RSP";
+          type string;
+        }
+
+        leaf vnffgd-rsp-id-ref {
+          description
+              "Identifier for the VNFFG Descriptor RSP reference";
+          type leafref {
+            path "/ns-instance-config/nsr"
+              + "[id=current()/../../../ns-instance-config-ref]"
+              + "/nsd/vnffgd"
+              + "[id=current()/../../vnffgd-id-ref]"
+              + "/rsp/id";
+          }
+        }
+
+        leaf vnffgd-rsp-name-ref {
+          description
+              "Name for the VNFFG Descriptor RSP reference";
+          type leafref {
+            path "/ns-instance-config/nsr:nsr"
+              + "[id=current()/../../../ns-instance-config-ref]"
+              + "/nsd/vnffgd"
+              + "[id=current()/../../vnffgd-id-ref]"
+              + "/rsp[id=current()/../vnffgd-rsp-id-ref]"
+              + "/name";
+          }
+        }
+
+        leaf classifier-name {
+          type string;
+        }
+
+        leaf path-id {
+          description
+              "Unique Identifier for the service path";
+          type uint32;
+        }
+
+        list vnfr-connection-point-ref {
+          key "hop-number";
+          leaf hop-number {
+            description
+                "Monotonically increasing number to show service path hop
+                order";
+            type uint8;
+          }
+          leaf service-function-type {
+            description
+                "Type of Service Function.
+                NOTE: This needs to map with Service Function Type in ODL to
+                support VNFFG. Service Function Type is mandatory param in ODL
+                SFC. This is temporarily set to string for ease of use";
+            type string;
+          }
+
+          leaf member-vnf-index-ref {
+            type uint64;
+          }
+          leaf vnfd-id-ref {
+            description
+                "Reference to VNF Descriptor Id";
+            type string;
+          }
+          leaf vnfr-id-ref {
+            description
+                "A reference to a vnfr id";
+                type leafref {
+                  path "/vnfr:vnfr-catalog/vnfr:vnfr/vnfr:id";
+                }
+          }
+          leaf vnfr-name-ref {
+            description
+                "A reference to a vnfr name";
+                type leafref {
+                  path "/vnfr:vnfr-catalog/vnfr:vnfr/vnfr:name";
+                }
+          }
+          leaf vnfr-connection-point-ref {
+            description
+                "A reference to a vnfr connection point.";
+            type leafref {
+              path "/vnfr:vnfr-catalog/vnfr:vnfr"
+                 + "[vnfr:id = current()/../nsr:vnfr-id-ref]"
+                 + "/vnfr:connection-point/vnfr:name";
+            }
+          }
+          leaf service-index {
+            description
+                "Location within the service path";
+            type uint8;
+          }
+          container connection-point-params {
+            leaf mgmt-address {
+              type inet:ip-address;
+            }
+            leaf name {
+              type string;
+            }
+            leaf port-id {
+              rwpb:field-inline "true";
+              rwpb:field-string-max 64;
+              type string;
+            }
+            leaf vm-id {
+              rwpb:field-inline "true";
+              rwpb:field-string-max 64;
+              type string;
+            }
+            leaf address {
+              type inet:ip-address;
+            }
+            leaf port {
+              type inet:port-number;
+            }
+          }
+
+          container service-function-forwarder {
+            leaf name {
+              description
+                  "Service Function Forwarder name";
+              type string;
+            }
+            leaf ip-address {
+              description
+                  "Data Plane IP Address of the SFF";
+              type inet:ip-address;
+            }
+            leaf port {
+              description
+                  "Data Plane Port of the SFF";
+              type inet:port-number;
+            }
+          }
+        }
+      }
+
+      list classifier {
+          key "id";
+
+          leaf id {
+            description
+                "Identifier for the classifier rule.";
+            type yang:uuid;
+          }
+          leaf name {
+            description
+                "Name of the classifier.";
+            type string;
+          }
+          leaf rsp-id-ref {
+            description
+                "A reference to the RSP.";
+            type leafref {
+              path "../../nsr:rsp/nsr:id";
+            }
+          }
+          leaf rsp-name {
+            description
+              "Name for the RSP";
+            type string;
+          }
+          leaf vnfr-id-ref {
+            description
+                "A reference to a vnfr id";
+                type leafref {
+                  path "/vnfr:vnfr-catalog/vnfr:vnfr/vnfr:id";
+                }
+          }
+          leaf vnfr-name-ref {
+            description
+                "A reference to a vnfr name";
+                type leafref {
+                  path "/vnfr:vnfr-catalog/vnfr:vnfr/vnfr:name";
+                }
+          }
+          leaf vnfr-connection-point-ref {
+            description
+                "A reference to a vnfr connection point.";
+            type leafref {
+              path "/vnfr:vnfr-catalog/vnfr:vnfr"
+                 + "[vnfr:id = current()/../nsr:vnfr-id-ref]"
+                 + "/vnfr:connection-point/vnfr:name";
+            }
+          }
+          leaf port-id {
+            rwpb:field-inline "true";
+            rwpb:field-string-max 64;
+            type string;
+          }
+          leaf vm-id {
+            rwpb:field-inline "true";
+            rwpb:field-string-max 64;
+            type string;
+          }
+          leaf ip-address {
+            type string;
+          }
+          leaf sff-name {
+            type string;
+          }
+      }
+    }
+  }
+
+  container ns-instance-opdata {
+    config false;
+
+    list nsr {
+      key "ns-instance-config-ref";
+
+      leaf ns-instance-config-ref {
+        type leafref {
+          path "/nsr:ns-instance-config/nsr:nsr/nsr:id";
+        }
+      }
+
+      leaf name-ref {
+        description "Network service name reference";
+        type leafref {
+          path "/nsr:ns-instance-config/nsr:nsr/nsr:name";
+        }
+      }
+
+      leaf nsd-ref {
+        description "Network service descriptor id reference";
+        type leafref {
+          path "/ns-instance-config/nsr"
+            + "[id=current()/../ns-instance-config-ref]"
+            + "/nsd/id";
+        }
+      }
+
+      leaf nsd-name-ref {
+        description "Network service descriptor name reference";
+        type leafref {
+          path "/ns-instance-config/nsr"
+            + "[id=current()/../ns-instance-config-ref]"
+            + "/nsd/name";
+        }
+      }
+
+      leaf create-time {
+        description
+          "Creation timestamp of this Network Service.
+          The timestamp is expressed as seconds
+          since unix epoch - 1970-01-01T00:00:00Z";
+
+        type uint32;
+      }
+
+      leaf uptime {
+        description
+          "Active period of this Network Service.
+          Uptime is expressed in seconds";
+
+        type uint32;
+      }
+
+      list connection-point {
+        description
+            "List for external connection points.
+            Each NS has one or more external connection points.
+            As the name implies that external connection points
+            are used for connecting the NS to other NS or to
+            external networks. Each NS exposes these connection
+            points to the orchestrator. The orchestrator can
+            construct network service chains by connecting the
+            connection points between different NS.";
+
+        key "name";
+        leaf name {
+          description
+              "Name of the NS connection point.";
+          type string;
+        }
+
+        leaf type {
+          description
+              "Type of the connection point.";
+          type manotypes:connection-point-type;
+        }
+      }
+
+      list vlr {
+        key "vlr-ref";
+        leaf vlr-ref {
+          description
+              "Reference to a VLR record in the VLR catalog";
+          type leafref {
+            path "/vlr:vlr-catalog/vlr:vlr/vlr:id";
+          }
+        }
+
+
+        list vnfr-connection-point-ref {
+          description
+            "A list of references to connection points.";
+          key "vnfr-id";
+
+          leaf vnfr-id {
+            description "A reference to a vnfr";
+            type leafref {
+              path "/vnfr:vnfr-catalog/vnfr:vnfr/vnfr:id";
+            }
+          }
+
+          leaf connection-point {
+            description
+                "A reference to a connection point name in a vnfr";
+            type leafref {
+              path "/vnfr:vnfr-catalog/vnfr:vnfr"
+                 + "[vnfr:id = current()/../nsr:vnfr-id]"
+                 + "/vnfr:connection-point/vnfr:name";
+            }
+          }
+        }
+      }
+
+      list constituent-vnfr-ref {
+        description
+            "List of VNFRs that are part of this
+             network service.";
+        key "vnfr-id";
+
+        leaf vnfr-id {
+          description
+            "Reference to the VNFR id
+             This should be a leafref to /vnfr:vnfr-catalog/vnfr:vnfr/vnfr:id
+             But due to confd bug (RIFT-9451), changing to string.
+            ";
+          type string;
+        }
+      }
+
+      list scaling-group-record {
+        description "List of scaling group records";
+        key "scaling-group-name-ref";
+
+        leaf scaling-group-name-ref {
+          description "name of the scaling group";
+          type leafref {
+            path "/ns-instance-config/nsr"
+              + "[id=current()/../../ns-instance-config-ref]"
+              + "/nsd/scaling-group-descriptor/name";
+          }
+        }
+
+        list instance {
+          description "Reference to scaling group instance record";
+          key "instance-id";
+          leaf instance-id {
+            description "Scaling group instance id";
+            type uint16;
+          }
+
+          leaf is-default {
+            description "Flag indicating whether this instance was part of
+                default scaling group (and thus undeletable)";
+            type boolean;
+          }
+
+          leaf op-status {
+            description
+              "The operational status of the NS instance
+                init                : The scaling group has just started.
+                vnf-init-phase      : The VNFs in the scaling group are being instantiated.
+                running             : The scaling group  is in running state.
+                terminate           : The scaling group is being terminated.
+                vnf-terminate-phase : The VNFs in the scaling group are being terminated.
+                terminated          : The scaling group  is in the terminated state.
+                failed              : The scaling group instantiation failed.
+              ";
+
+            type enumeration {
+              enum init;
+              enum vnf-init-phase;
+              enum running;
+              enum terminate;
+              enum vnf-terminate-phase;
+              enum terminated;
+              enum failed;
+            }
+          }
+
+          leaf config-status {
+            description
+              "The configuration status of the scaling group instance
+               configuring : At least one of the VNFs in this scaling group instance
+                             is in configuring state
+               configured  : All the VNFs in this scaling group instance are
+                             configured or config-not-needed state
+               failed      : Configuring this scaling group instance failed
+              ";
+            type config-states;
+          }
+
+          leaf error-msg {
+            description
+              "Reason for failure in configuration of this scaling instance";
+            type string;
+          }
+
+          leaf create-time {
+            description
+              "Creation timestamp of this scaling group record.
+              The timestamp is expressed as seconds
+              since unix epoch - 1970-01-01T00:00:00Z";
+
+              type uint32;
+          }
+
+          leaf-list vnfrs {
+            description "Reference to VNFR within the scale instance";
+            type leafref {
+              path "../../../constituent-vnfr-ref/vnfr-id";
+            }
+          }
+        }
+      }
+
+      uses vnffgr;
+
+      leaf operational-status {
+        description
+          "The operational status of the NS instance
+            init                : The network service has just started.
+            vl-init-phase       : The VLs in the NS are being instantiated.
+            vnf-init-phase      : The VNFs in the NS are being instantiated.
+            running             : The NS is in running state.
+            terminate           : The NS is being terminated.
+            vnf-terminate-phase : The NS is terminating the VNFs in the NS.
+            vl-terminate-phase  : The NS is terminating the VLs in the NS.
+            terminated          : The NS is in the terminated state.
+            failed              : The NS instantiation failed.
+            scaling-out         : The NS is scaling out
+            scaling-in          : The NS is scaling in
+            vl-instantiate      : The NS is initiating a new VL
+            vl-terminate        : The NS is terminating a VL
+          ";
+
+        type enumeration {
+          enum init;
+          enum vl-init-phase;
+          enum vnf-init-phase;
+          enum running;
+          enum terminate;
+          enum vnf-terminate-phase;
+          enum vl-terminate-phase;
+          enum terminated;
+          enum failed;
+          enum scaling-out;
+          enum scaling-in;
+          enum vl-instantiate;
+          enum vl-terminate;
+        }
+      }
+
+      leaf config-status {
+        description
+          "The configuration status of the NS instance
+            configuring: At least one of the VNFs in this instance is in configuring state
+            configured:  All the VNFs in this NS instance are configured or config-not-needed state
+          ";
+        type config-states;
+      }
+
+      list service-primitive {
+         description
+              "Network service level service primitives.";
+
+         key "name";
+
+         leaf name {
+            description
+                "Name of the service primitive.";
+            type string;
+         }
+
+         list parameter {
+            description
+                "List of parameters for the service primitive.";
+
+            key "name";
+            uses manotypes:primitive-parameter;
+         }
+
+         uses manotypes:ui-primitive-group;
+
+         list vnf-primitive-group {
+            description
+                "List of service primitives grouped by VNF.";
+
+            key "member-vnf-index-ref";
+            leaf member-vnf-index-ref {
+              description
+                 "Reference to member-vnf within constituent-vnfds";
+              type uint64;
+            }
+
+            leaf vnfd-id-ref {
+               description
+                 "A reference to a vnfd. This is a 
+                  leafref to path:
+                      ../../../../nsd:constituent-vnfd
+                      + [nsd:id = current()/../nsd:id-ref]
+                      + /nsd:vnfd-id-ref
+                  NOTE: confd limitations prevent the use of xpath";
+
+               type string;
+            }
+
+            leaf vnfd-name {
+               description
+                 "Name of the VNFD";
+               type string;
+            }
+
+            list primitive {
+               key "index";
+
+               leaf index {
+                 description "Index of this primitive";
+                 type uint32;
+               }
+
+               leaf name {
+                 description "Name of the primitive in the VNF primitive ";
+                 type string;
+               }
+            }
+         }
+
+         leaf user-defined-script {
+           description
+               "A user defined script.";
+           type string;
+         }
+      }
+
+      list initial-config-primitive {
+        rwpb:msg-new NsrInitialConfigPrimitive;
+        description
+            "Initial set of configuration primitives for NSD.";
+        key "seq";
+        leaf seq {
+          description
+              "Sequence number for the configuration primitive.";
+          type uint64;
+        }
+
+        leaf name {
+          description
+              "Name of the configuration primitive.";
+          type string;
+          mandatory "true";
+        }
+
+        leaf user-defined-script {
+          description
+              "A user defined script.";
+          type string;
+        }
+
+        list parameter {
+          description
+              "List of parameters for the initial config primitive";
+          key "name";
+          leaf name {
+            description "Name of the intitial config parameter";
+            type string;
+          }
+
+          leaf value {
+            description "Value associated with the initial config 
+                        parameter";
+            type string;
+          }
+        }
+      }
+
+
+      list monitoring-param {
+        description
+          "List of NS level params.";
+        key "id";
+
+        uses manotypes:monitoring-param-value;
+        uses manotypes:monitoring-param-ui-data;
+        uses manotypes:monitoring-param-aggregation;
+
+        leaf id {
+          type string;
+        }
+
+        leaf name {
+          type string;
+        }
+
+        leaf nsd-mon-param-ref {
+          description "Reference to the NSD monitoring param descriptor
+                       that produced this result";
+          type leafref {
+            path "/nsd:nsd-catalog/nsd:nsd[nsd:id = current()/" +
+                 "../../nsr:nsd-ref]/nsd:monitoring-param/nsd:id";
+          }
+        }
+
+        list vnfr-mon-param-ref {
+          description "A list of VNFR monitoring params associated with this monp";
+          key "vnfr-id-ref vnfr-mon-param-ref";
+
+          leaf vnfr-id-ref {
+            description
+               "A reference to a vnfr. This is a
+                leafref to path:
+                    /vnfr:vnfr-catalog/vnfr:vnfr/vnfr:id";
+
+            type yang:uuid;
+          }
+
+          leaf vnfr-mon-param-ref {
+            description "A reference to the VNFR monitoring param";
+            type leafref {
+              path "/vnfr:vnfr-catalog/vnfr:vnfr"
+                + "[vnfr:id = current()/../nsr:vnfr-id-ref]"
+                + "/vnfr:monitoring-param/vnfr:id";
+            }
+          }
+        }
+      }
+
+      list config-agent-job {
+        key "job-id";
+
+        leaf job-id {
+          description "config agent job Identifier for the NS.";
+          type uint64;
+        }
+
+        leaf job-name {
+          description "Config agent job name";
+          type string;
+        }
+
+        leaf job-status {
+          description
+              "Job status to be set based on each VNF primitive execution,
+               pending  - if at least one VNF is in pending state
+                          and remaining VNFs are in success state.
+               Success  - if all VNF executions are in success state
+               failure  - if one of the VNF executions is failure";
+          type enumeration {
+            enum pending;
+            enum success;
+            enum failure;
+          }
+        }
+
+        leaf triggered-by {
+          description "The primitive is triggered from NS or VNF level";
+          type trigger-type;
+        }
+
+        leaf create-time {
+          description
+            "Creation timestamp of this Config Agent Job.
+            The timestamp is expressed as seconds
+            since unix epoch - 1970-01-01T00:00:00Z";
+
+          type uint32;
+        }
+
+        leaf job-status-details {
+          description "Config agent job status details, in case of errors";
+          type string;
+        }
+
+        uses manotypes:primitive-parameter-value;
+
+        list parameter-group {
+          description
+              "List of NS Primitive parameter groups";
+          key "name";
+          leaf name {
+            description
+                "Name of the parameter.";
+            type string;
+          }
+
+          uses manotypes:primitive-parameter-value;
+        }
+
+        list vnfr {
+          key "id";
+          leaf id {
+            description "Identifier for the VNFR.";
+            type yang:uuid;
+          }
+          leaf vnf-job-status {
+            description
+                "Job status to be set based on each VNF primitive execution,
+                 pending  - if at least one primitive is in pending state
+                            and remaining primitives are in success state.
+                 Success  - if all primitive executions are in success state
+                 failure  - if one of the primitive executions is failure";
+            type enumeration {
+              enum pending;
+              enum success;
+              enum failure;
+            }
+          }
+
+          list primitive {
+            key "name";
+            leaf name {
+              description "the name of the primitive";
+              type string;
+            }
+
+            uses manotypes:primitive-parameter-value;
+
+            leaf execution-id {
+              description "Execution id of the primitive";
+              type string;
+            }
+            leaf execution-status {
+              description "status of the Execution";
+              type enumeration {
+                enum pending;
+                enum success;
+                enum failure;
+              }
+            }
+            leaf execution-error-details {
+              description "Error details if execution-status is failure";
+              type string;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  rpc get-ns-service-primitive-values {
+    description "Get the service primitive parameter values";
+    input {
+      leaf nsr_id_ref {
+        description "Reference to NSR ID ref";
+        mandatory true;
+        type leafref {
+          path "/nsr:ns-instance-config/nsr:nsr/nsr:id";
+        }
+      }
+
+      leaf name {
+        description "Name of the NS service primitive group";
+        mandatory true;
+        type string;
+      }
+    }
+
+    output {
+      list ns-parameter {
+        description "Automatically generated parameter";
+        key "name";
+
+        leaf name {
+          description "Parameter name which should be pulled from a parameter pool";
+          type string;
+        }
+        leaf value {
+          description "Automatically generated value";
+          type string;
+        }
+      }
+
+      list ns-parameter-group {
+        description "Automatically generated parameters in parameter group";
+        key "name";
+        leaf name {
+          description "Parameter group name";
+          type string;
+        }
+        list parameter {
+          description "Automatically generated group parameter";
+          key "name";
+
+          leaf name {
+            description "Parameter name which should be pulled from a parameter pool";
+            type string;
+          }
+          leaf value {
+            description "Automatically generated value";
+            type string;
+          }
+        }
+      }
+
+      list vnf-primitive-group {
+        description
+            "List of service primitives grouped by VNF.";
+
+        key "member-vnf-index-ref";
+        leaf member-vnf-index-ref {
+          description
+              "Reference to member-vnf within constituent-vnfds";
+          type uint64;
+        }
+
+        leaf vnfd-id-ref {
+          description
+              "A reference to a vnfd. This is a
+               leafref to path:
+                   ../../../../nsd:constituent-vnfd
+                   + [nsd:id = current()/../nsd:id-ref]
+                   + /nsd:vnfd-id-ref
+               NOTE: confd limitations prevent the use of xpath";
+
+          type string;
+        }
+
+        list primitive {
+          key "index";
+          leaf index {
+            description "Index of this primitive";
+            type uint32;
+          }
+
+          leaf name {
+            description "Name of the primitive associated with a value pool";
+            type string;
+          }
+
+          list parameter {
+            description "Automatically generated parameter";
+            key "name";
+
+            leaf name {
+              description "Parameter name which should be pulled from a parameter pool";
+              type string;
+            }
+            leaf value {
+              description "Automatically generated value";
+              type string;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  rpc exec-ns-service-primitive {
+    description "Executes a NS service primitive or script";
+
+    input {
+      leaf name {
+        description "Name of the primitive";
+        type string;
+      }
+
+      leaf nsr_id_ref {
+        description "Reference to NSR ID ref";
+        type leafref {
+          path "/nsr:ns-instance-config/nsr:nsr/nsr:id";
+        }
+      }
+
+      leaf triggered-by {
+        description "The primitive is triggered from NS or VNF level";
+        type trigger-type;
+        default ns-primitive;
+      }
+
+      uses manotypes:primitive-parameter-value;
+
+      list parameter-group {
+        description
+            "List of NS Primitive parameter groups";
+        key "name";
+        leaf name {
+          description
+              "Name of the parameter.";
+          type string;
+        }
+
+        uses manotypes:primitive-parameter-value;
+      }
+
+      list vnf-list {
+        description
+            "List of VNFs whose primitives are being set.";
+        key "member_vnf_index_ref";
+
+        leaf member_vnf_index_ref {
+          description "Member VNF index";
+          type uint64;
+        }
+
+        leaf vnfr-id-ref {
+          description
+              "A reference to a vnfr. This is a
+               leafref to path";
+          type yang:uuid;
+        }
+
+        list vnf-primitive {
+          description
+              "List of service primitives supported by the
+            configuration agent for this VNF.";
+          key "index";
+
+          leaf index {
+            description
+                "index of the service primitive.";
+            type uint32;
+          }
+          leaf name {
+            description
+                "Name of the service primitive.";
+            type string;
+          }
+
+          uses manotypes:primitive-parameter-value;
+        }
+      }
+      leaf user-defined-script {
+        description
+            "A user defined script.";
+        type string;
+      }
+    }
+    output {
+      leaf job-id {
+        description "Job identifier for this RPC";
+        type uint64;
+      }
+
+      leaf name {
+        description "Name of the service primitive";
+        type string;
+      }
+
+      leaf nsr_id_ref {
+        description "Reference to NSR ID ref";
+        type leafref {
+          path "/nsr:ns-instance-config/nsr:nsr/nsr:id";
+        }
+      }
+
+      leaf triggered-by {
+        description "The primitive is triggered from NS or VNF level";
+        type trigger-type;
+      }
+
+      leaf create-time {
+        description
+          "Creation timestamp of this config agent JOB.
+          The timestamp is expressed as seconds
+          since unix epoch - 1970-01-01T00:00:00Z";
+
+        type uint32;
+      }
+
+      leaf job-status-details {
+        description "Job status details, in case of any errors";
+        type string;
+      }
+
+      uses manotypes:primitive-parameter-value;
+
+      list parameter-group {
+        description
+            "List of NS Primitive parameter groups";
+        key "name";
+        leaf name {
+          description
+              "Name of the parameter.";
+          type string;
+        }
+
+        uses manotypes:primitive-parameter-value;
+      }
+
+      list vnf-out-list {
+        description
+            "List of VNFs whose primitives were set.";
+        key "member_vnf_index_ref";
+
+        leaf member_vnf_index_ref {
+          description "Member VNF index";
+          type uint64;
+        }
+        leaf vnfr-id-ref {
+          description
+              "A reference to a vnfr. This is a
+               leafref to path";
+          type yang:uuid;
+        }
+
+        list vnf-out-primitive {
+          description
+              "List of service primitives supported by the
+            configuration agent for this VNF.";
+          key "index";
+
+          leaf index {
+            description
+                "index of the service primitive.";
+            type uint32;
+          }
+
+          leaf name {
+            description
+                "Name of the service primitive.";
+            type string;
+          }
+
+          uses manotypes:primitive-parameter-value;
+
+          leaf execution-id {
+            description "Execution id of this primitive";
+            type string;
+          }
+
+          leaf execution-status {
+            description "Status of the execution of this primitive";
+            type string;
+          }
+
+          leaf execution-error-details {
+            description "Error details if execution-status is failed";
+            type string;
+          }
+        }
+      }
+    }
+  }
+
+  rpc exec-scale-in {
+    description "Executes scale out request";
+
+    input {
+
+      leaf nsr-id-ref {
+        description "Reference to NSR ID ref";
+        type leafref {
+          path "/nsr:ns-instance-config/nsr:nsr/nsr:id";
+        }
+      }
+
+      leaf scaling-group-name-ref {
+        description "name of the scaling group";
+        type string;
+      }
+
+      leaf instance-id {
+        description "id of the scaling group";
+        type uint64;
+      }
+
+
+    }
+    output {
+      leaf instance-id {
+        description "id of the scaling group";
+        type uint64;
+      }
+    }
+  }
+
+  rpc exec-scale-out {
+    description "Executes scale out request";
+
+    input {
+
+      leaf nsr-id-ref {
+        description "Reference to NSR ID ref";
+        type leafref {
+          path "/nsr:ns-instance-config/nsr:nsr/nsr:id";
+        }
+      }
+
+      leaf scaling-group-name-ref {
+        description "name of the scaling group";
+        type string;
+      }
+
+      leaf instance-id {
+        description "id of the scaling group";
+        type uint64;
+      }
+
+    }
+    output {
+     leaf instance-id {
+        description "id of the scaling group";
+        type uint64;
+      }
+    }
+  }
+
+}