
/*
 * 
 *   Copyright 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 project-nsd
{
  namespace "http://riftio.com/ns/riftware-1.0/project-nsd";
  prefix "project-nsd";

  import mano-types {
    prefix "manotypes";
  }

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

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

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


  revision 2017-02-28 {
    description
      "Initial revision. This YANG file defines
       the Network Service Descriptor (NSD)
       under projects";
    reference
      "Derived from earlier versions of base YANG files";
  }


  grouping nsd-constituent-vnfd {
    list constituent-vnfd {
      description
          "List of VNFDs that are part of this
          network service.";

      key "member-vnf-index";

      leaf member-vnf-index {
        description
          "Identifier/index for the VNFD. This separate id
           is required to ensure that multiple VNFs can be
           part of single NS";
        type uint64;
      }

      leaf vnfd-id-ref {
        description
          "Identifier for the VNFD.";
        type leafref {
          path "/rw-project:project[rw-project:name = current()/../../../../rw-project:name]" +
            "/project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
        }
      }

      leaf start-by-default {
        description
          "VNFD is started as part of the NS instantiation";
        type boolean;
        default true;
      }
    }
  }

  grouping nsr-nsd-constituent-vnfd {
    list constituent-vnfd {
      description
          "List of VNFDs that are part of this
          network service.";

      key "member-vnf-index";

      leaf member-vnf-index {
        description
          "Identifier/index for the VNFD. This separate id
           is required to ensure that multiple VNFs can be
           part of single NS";
        type uint64;
      }

      leaf vnfd-id-ref {
        description
          "Identifier for the VNFD.";
        type leafref {
          path "/rw-project:project[rw-project:name = current()/../../../../../rw-project:name]" +
            "/project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
        }
      }

      leaf start-by-default {
        description
          "VNFD is started as part of the NS instantiation";
        type boolean;
        default true;
      }
    }
  }

  grouping nsd-vld {
    list vld {

      key "id";

      uses nsd-base:nsd-vld-common;

      list vnfd-connection-point-ref {
        description
            "A list of references to connection points.";
        key "member-vnf-index-ref vnfd-connection-point-ref";

        leaf member-vnf-index-ref {
          description "Reference to member-vnf within constituent-vnfds";
          type leafref {
            path "../../../constituent-vnfd/member-vnf-index";
          }
        }

        leaf vnfd-id-ref {
          description
              "A reference to a vnfd. This is a
               leafref to path:
                   ../../constituent-vnfd
                   + [id = current()/../id-ref]
                   + /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;
          type leafref {
            path "../../../constituent-vnfd[member-vnf-index = current()/../member-vnf-index-ref]/vnfd-id-ref";
          }
        }

        leaf vnfd-connection-point-ref {
          description "A reference to a connection point name";
          type leafref {
            path "../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd" +
                 "[project-vnfd:id = current()/../vnfd-id-ref]/" +
                 "project-vnfd:connection-point/project-vnfd:name";
          }
        }
      }
    }
  }

  grouping nsr-nsd-vld {
    list vld {

      key "id";

      uses nsd-base:nsd-vld-common;

      list vnfd-connection-point-ref {
        description
            "A list of references to connection points.";
        key "member-vnf-index-ref vnfd-connection-point-ref";

        leaf member-vnf-index-ref {
          description "Reference to member-vnf within constituent-vnfds";

          type leafref {
            path "../../../constituent-vnfd/member-vnf-index";
          }
        }

        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 resolved this will switched to use
               leafref";
          type string;
        }

        leaf vnfd-connection-point-ref {
          description "A reference to a connection point name";
          type leafref {
            path "../../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd" +
                 "[project-vnfd:id = current()/../vnfd-id-ref]/" +
                 "project-vnfd:connection-point/project-vnfd:name";
          }
        }
      }
    }
  }

  grouping nsd-vnf-dependency {
    list vnf-dependency {
      description
          "List of VNF dependencies.";
      key vnf-source-ref;
      leaf vnf-source-ref {
        type leafref {
          path "../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
        }
      }
      leaf vnf-depends-on-ref {
        description
            "Reference to VNF that sorce VNF depends.";
        type leafref {
          path "../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
        }
      }
    }
  }

  grouping nsr-nsd-vnf-dependency {
    list vnf-dependency {
      description
          "List of VNF dependencies.";
      key vnf-source-ref;
      leaf vnf-source-ref {
        type leafref {
          path "../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
        }
      }
      leaf vnf-depends-on-ref {
        description
            "Reference to VNF that sorce VNF depends.";
        type leafref {
          path "../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
        }
      }
    }
  }

  grouping nsd-placement-groups {
    list placement-groups {
      description "List of placement groups at NS level";

      key "name";
      uses manotypes:placement-group-info;

      list member-vnfd {
        description
            "List of VNFDs that are part of this placement group";

        key "member-vnf-index-ref";

        leaf member-vnf-index-ref {
          description "member VNF index of this member VNF";
          type leafref {
            path "../../../constituent-vnfd/member-vnf-index";
          }
        }

        leaf vnfd-id-ref {
          description
              "Identifier for the VNFD.";
          type leafref {
            path "../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
          }
        }
      }
    }
  }

  grouping nsr-nsd-placement-groups {
    list placement-groups {
      description "List of placement groups at NS level";

      key "name";
      uses manotypes:placement-group-info;

      list member-vnfd {
        description
            "List of VNFDs that are part of this placement group";

        key "member-vnf-index-ref";

        leaf member-vnf-index-ref {
          description "member VNF index of this member VNF";
          type leafref {
            path "../../../constituent-vnfd/member-vnf-index";
          }
        }

        leaf vnfd-id-ref {
          description
              "Identifier for the VNFD.";
          type leafref {
            path "../../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id";
          }
        }
      }
    }
  }

  grouping nsd-monitoring-param {

    list monitoring-param {
      key "id";

      uses nsd-base:monitoring-param-common;

      list vnfd-monitoring-param {
        description "A list of VNFD monitoring params";
        key "member-vnf-index-ref vnfd-monitoring-param-ref";

        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 resolved this will switched to use
              leafref";

          type leafref {
            path "../../../constituent-vnfd" +
              "[member-vnf-index = current()/../member-vnf-index-ref]" +
              "/vnfd-id-ref";
          }
        }

        leaf vnfd-monitoring-param-ref {
          description "A reference to the VNFD monitoring param";
          type leafref {
            path "../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd"
              + "[project-vnfd:id = current()/../vnfd-id-ref]"
              + "/project-vnfd:monitoring-param/project-vnfd:id";
          }
        }

        leaf member-vnf-index-ref {
          description
            "Optional reference to member-vnf within constituent-vnfds";
          type leafref {
            path "../../../constituent-vnfd/member-vnf-index";
          }
        }
      }
    }
  }

  grouping nsr-nsd-monitoring-param {
    list monitoring-param {
      key "id";

      uses nsd-base:monitoring-param-common;

      list vnfd-monitoring-param {
        description "A list of VNFD monitoring params";
        key "member-vnf-index-ref vnfd-monitoring-param-ref";

        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 resolved this will switched to use
              leafref";

          type string;
        }

        leaf vnfd-monitoring-param-ref {
          description "A reference to the VNFD monitoring param";
          type leafref {
            path "../../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd"
              + "[project-vnfd:id = current()/../vnfd-id-ref]"
              + "/project-vnfd:monitoring-param/project-vnfd:id";
          }
        }

        leaf member-vnf-index-ref {
          description
            "Optional reference to member-vnf within constituent-vnfds";
          type leafref {
            path "../../../constituent-vnfd/member-vnf-index";
          }
        }
      }
    }
  }

  grouping nsd-service-primitive {
   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 leafref {
             path "../../../constituent-vnfd/member-vnf-index";
          }
        }

        leaf vnfd-id-ref {
          description
              "A reference to a vnfd. This is a leafref";

          type leafref {
             path "../../../constituent-vnfd" +
                "[member-vnf-index = current()/../member-vnf-index-ref]" + "/vnfd-id-ref";
          }
        }

        leaf vnfd-name {
          description
              "Name of the VNFD";
          type leafref {
              path "../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd"
                    + "[project-vnfd:id = current()/../vnfd-id-ref]"
                    + "/project-vnfd:name";
          }
        }

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

  grouping nsr-nsd-service-primitive {
   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 leafref {
             path "../../../constituent-vnfd/member-vnf-index";
          }
        }

        leaf vnfd-id-ref {
          description
              "A reference to a vnfd. This is a leafref";

          type leafref {
             path "../../../constituent-vnfd" +
                "[member-vnf-index = current()/../member-vnf-index-ref]" + "/vnfd-id-ref";
          }
        }

        leaf vnfd-name {
          description
              "Name of the VNFD";
          type leafref {
              path "../../../../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd"
                    + "[project-vnfd:id = current()/../vnfd-id-ref]"
                    + "/project-vnfd:name";
          }
        }

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

  grouping nsd-descriptor {
     uses nsd-base:nsd-descriptor-common;

     uses nsd-vld;

     uses nsd-constituent-vnfd;

     uses nsd-placement-groups;

     uses nsd-vnf-dependency;

     uses nsd-monitoring-param;

     uses nsd-service-primitive;
  }

  augment "/rw-project:project" {
    container nsd-catalog {

      list nsd {
        key id;

        uses nsd-descriptor;
      }
    }
  }
}
