
/*
 * 
 *   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.
 *   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 vlr {
    prefix "vlr";
  }

  import nsd-base {
    prefix "nsd-base";
  }

  import project-nsd {
    prefix "project-nsd";
  }

  import project-vnfd {
    prefix "project-vnfd";
  }

  import vnfr {
    prefix "vnfr";
  }

  import ietf-inet-types {
    prefix "inet";
  }

  import ietf-yang-types {
    prefix "yang";
  }

  import mano-types {
    prefix "manotypes";
  }

  import rw-project {
    prefix "rw-project";
  }

  revision 2017-02-08 {
    description
      "Update model to support projects.";
  }

  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 vnffgr-operational-status {
    type enumeration {
      enum init;
      enum running;
      enum terminate;
      enum terminated;
      enum failed;
    }
  }

  typedef ns-operational-status {
    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;
    }
  }

  typedef config-states {
    type enumeration {
      enum init;
      enum configuring;
      enum config_not_needed;
      enum configured;
      enum failed;
      enum terminate;
    }
  }

  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 "../../../../key-pair/name";
        }
      }
    }
    list user {
      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 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 "../../../../../key-pair/name";
          }
        }
      }
    }
  }

  augment "/rw-project:project" {
    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 event-service-primitive {
    leaf seq {
      description
          "Sequence number for the service primitive.";
      type uint64;
    }

    leaf name {
      description
          "Name of the service primitive.";
      type string;
      mandatory "true";
    }

    leaf user-defined-script {
      description
          "A user defined script.";
      type string;
    }

    list parameter {
      key "name";
      leaf name {
        type string;
      }

      leaf value {
        type string;
      }
    }
  }

  augment "/rw-project:project" {
    container ns-instance-config {

      list nsr {
        key "id";
        unique "name";

        leaf schema-version {
          description "Schema version for the NSR. If unspecified, it assumes v3.0";
          type string;
          default "v3.0";
        }

        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-base:nsd-descriptor-common;

          uses project-nsd:nsr-nsd-vld;

          uses project-nsd:nsr-nsd-constituent-vnfd;

          uses project-nsd:nsr-nsd-placement-groups;

          uses project-nsd:nsr-nsd-vnf-dependency;

          uses project-nsd:nsr-nsd-monitoring-param;

          uses project-nsd:nsr-nsd-service-primitive;
        }
        uses ns-instance-config-params;
      }
    }
  }

  grouping ns-instance-config-params-common {
    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";
        // type leafref {
        //   path "../../nsd/placement-groups/name";
        // }
        type string;
      }
      uses manotypes:placement-group-input;
    }
  }

  grouping ns-instance-config-params {
    uses ns-instance-config-params-common;

    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:
          ../../../../project-nsd:constituent-vnfd
          + [id = current()/../id-ref]
          + /project-nsd:vnfd-id-ref
          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 resolved this will switched to use
          leafref";
        type yang:uuid;
      }

      leaf placement-group-ref {
        description
          "A reference to VNFD placement group";
        type leafref {
          path "../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd[project-vnfd:id = " +
            "current()/../vnfd-id-ref]/project-vnfd:placement-groups/project-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 "../../../../ns-instance-config/nsr"
            + "[id=current()/../../ns-instance-config-ref]"
            + "/nsd/vnffgd/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"
              + "[id=current()/../vnffgd-id-ref]"
              + "/name";
        }
      }

      leaf sdn-account {
        description
            "The SDN account to use when requesting resources for
            this vnffgr";
        type string;
      }

      leaf cloud-account {
        description "Cloud Account in which NSR is instantiated";
        type string;
      }

      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 vnffgr-operational-status;
      }

      list rsp {
        key "id";

        leaf id {
          description
              "Identifier for the RSP.";
          type yang:uuid;
        }

        leaf name {
          description
              "Name for the RSP";
          type string;
        }

        leaf rsp-id {
          description
              "Returned Identifier for the RSP.";
          type yang:uuid;
        }

        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"
              + "[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 string;
          }
          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()/../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 {
              type string;
            }
            leaf vm-id {
              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-list classifier-id {
            description
                "Returned Identifier for the classifier rule.";
            type yang:uuid;
          }
          leaf rsp-id-ref {
            description
                "A reference to the RSP.";
            type leafref {
              path "../../rsp/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()/../vnfr-id-ref]"
                 + "/vnfr:connection-point/vnfr:name";
            }
          }
          leaf port-id {
            type string;
          }
          leaf vm-id {
            type string;
          }
          leaf ip-address {
            type string;
          }
          leaf sff-name {
            type string;
          }
      }
    }
  }

  augment "/rw-project:project" {
    container ns-instance-opdata {
      config false;

      list nsr {
        key "ns-instance-config-ref";

        leaf ns-instance-config-ref {
          type leafref {
            path "../../../ns-instance-config/nsr/id";
          }
          // type yang:uuid;
        }

        leaf name-ref {
          description "Network service name reference";
          type leafref {
            path "../../../ns-instance-config/nsr" +
              "[id=current()/../ns-instance-config-ref]" +
              "/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()/../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 ns-operational-status;
        }

        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
                "Reference to member-vnf within constituent-vnfds";

              key "member-vnf-index-ref";
              leaf member-vnf-index-ref {
                description
                   "Reference to member-vnf within constituent-vnfds";
                type string;
              }

              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: 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
                    leafref";

                 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-service-primitive {
          description
            "Initial set of service primitives for NSD.";
          key "seq";

          uses event-service-primitive;
        }

        list terminate-service-primitive {
          description
            "Set of service primitives to
             execute during termination of NSD.";
          key "seq";

          uses event-service-primitive;
        }

        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";
            // TODO: Fix leafref
            type leafref {
              path "../../../../project-nsd:nsd-catalog/project-nsd:nsd" +
                "[project-nsd:id = current()/../../nsd-ref]" +
                "/project-nsd:monitoring-param/project-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()/../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;
              }
            }
          }
        }
      }
    }
  }

  grouping rpc-common {
    uses manotypes:rpc-project-name;

    leaf nsr_id_ref {
      description "Reference to NSR ID ref";
      type leafref {
        path "/rw-project:project[rw-project:name=current()/.." +
          "/nsr:project-name]/nsr:ns-instance-config/nsr:nsr/nsr:id";
      }
      mandatory true;
    }
  }

  rpc get-ns-service-primitive-values {
    description "Get the service primitive parameter values";

    input {
      leaf name {
        description "Name of the NS service primitive group";
        mandatory true;
        type string;
      }

      uses rpc-common;
    }

    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 string;
        }

        leaf vnfd-id-ref {
          description
              "A reference to a vnfd. This is a
               leafref to path:
                   ../../../../project-nsd:constituent-vnfd
                   + [project-nsd:id = current()/../project-nsd:id-ref]
                   + /project-nsd:vnfd-id-ref
               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 resolved this will switched to use
               leafref";

          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;
      }

      uses rpc-common;

      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;
      }

      uses rpc-common;

      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 {
      uses rpc-common;

      leaf scaling-group-name-ref {
        description "name of the scaling group";
        type leafref {
          path "/rw-project:project[rw-project:name=current()/.." +
            "/nsr:project-name]/nsr:ns-instance-config/nsr:nsr" +
            "[nsr:id=current()/../nsr:nsr_id_ref]/nsr:nsd" +
            "/nsr:scaling-group-descriptor/nsr:name";
        }
        mandatory true;
      }

      leaf instance-id {
        description "id of the scaling group";
        type leafref {
          path "/rw-project:project[rw-project:name=current()/.." +
            "/nsr:project-name]/nsr:ns-instance-config/nsr:nsr" +
            "[nsr:id=current()/../nsr:nsr_id_ref]" +
            "/nsr:scaling-group[nsr:scaling-group-name-ref=current()/.." +
            "/nsr:scaling-group-name-ref]/nsr:instance/nsr:id";
        }
        mandatory true;
      }


    }
    output {
      leaf instance-id {
        description "id of the scaling group";
        type uint64;
      }
    }
  }

  rpc exec-scale-out {
    description "Executes scale out request";

    input {
      uses rpc-common;

      leaf scaling-group-name-ref {
        description "name of the scaling group";
        type leafref {
          path "/rw-project:project[rw-project:name=current()/.." +
            "/nsr:project-name]/nsr:ns-instance-config/nsr:nsr" +
            "[nsr:id=current()/../nsr:nsr_id_ref]/nsr:nsd" +
            "/nsr:scaling-group-descriptor/nsr:name";
        }
        mandatory true;
      }

      leaf instance-id {
        description "id of the scaling group";
        type uint64;
      }
    }

    output {
     leaf instance-id {
        description "id of the scaling group";
        type uint64;
      }
    }
  }

  rpc start-network-service {
    description "Start the network service";
    input {
      leaf name {
        mandatory true;
        description "Name of the Network Service";
        type string;
      }

      uses manotypes:rpc-project-name;

      leaf nsd_id_ref {
        description "Reference to NSD ID ref";
        type leafref {
          path "/rw-project:project[rw-project:name=current()/.." +
            "/project-name]/project-nsd:nsd-catalog/project-nsd:nsd/project-nsd:id";
        }
      }
      uses ns-instance-config-params-common;

      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:
          ../../../../project-nsd:constituent-vnfd
          + [id = current()/../project-nsd:id-ref]
          + /project-nsd:vnfd-id-ref
          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
          leafref";
          type yang:uuid;
        }

        leaf placement-group-ref {
          description
            "A reference to VNFD placement group";
          type leafref {
            path "/rw-project:project[rw-project:name=current()/" +
              "../../project-name]/project-vnfd:vnfd-catalog/project-vnfd:vnfd[project-vnfd:id = " +
              "current()/../vnfd-id-ref]/project-vnfd:placement-groups/project-vnfd:name";
          }
        }

        uses manotypes:placement-group-input;

        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 "/rw-project:project[rw-project:name=current()/../../../" +
                "project-name]/key-pair/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 "/rw-project:project[rw-project:name=current()/" +
                  "../../../../project-name]/key-pair/name";
              }
            }
          }
        }
      }
    }

    output {
      leaf nsr-id {
        description "Automatically generated parameter";
        type yang:uuid;
      }
    }
  }
}
