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

  import vnfd {
    prefix "vnfd";
  }

  import rwvcs-types {
    prefix "rwvcstypes";
  }

  import rw-pb-ext { prefix "rwpb"; }

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

  import mano-types {
    prefix "manotypes";
  }

  revision 2015-09-10 {
    description
      "Initial revision. This YANG file augments
       the base MANO VNFD";
    reference
      "Derived from earlier versions of base YANG files";
  }

  augment /vnfd:vnfd-catalog/vnfd:vnfd {
    uses manotypes:control-param;
    uses manotypes:action-param;
    leaf meta {
      description
        "Any meta-data needed by the UI";
      type string;
    }
    list component {
      description
          "This section defines the RIFT.ware
           virtual components";
      key "component-name";
      rwpb:msg-new VcsComponent;
      rwpb:application-request-point;

      leaf component-name {
        description "";
        type string;
      }

      leaf component-type {
        description "";
        type rwvcstypes:component_type;
        mandatory true;
      }

      choice component {
        case rwvcs-rwcollection {
          uses rwvcstypes:rwvcs-rwcollection;
        }
        case rwvcs-rwvm {
          uses rwvcstypes:rwvcs-rwvm;
        }
        case rwvcs-rwproc {
          uses rwvcstypes:rwvcs-rwproc;
        }
        case native-proc {
          uses rwvcstypes:native-proc;
        }
        case rwvcs-rwtasklet {
          uses rwvcstypes:rwvcs-rwtasklet;
        }
      }
    } // list component
  }

  augment /vnfd:vnfd-catalog/vnfd:vnfd/vnfd:vdu {
    leaf vcs-component-ref {
      description
          "This defines the software components using the
           RIFT.ware Virtual Component System (VCS). This
           also allows specifying a state machine during
           the VM startup.
           NOTE: This is an significant addition to MANO,
           since MANO doesn't clearly specify a method to
           identify various software components in a VM.
           Also using a state machine is not something that
           is well described in MANO.";
      type leafref {
        path "/vnfd:vnfd-catalog/vnfd:vnfd/rw-vnfd:component/rw-vnfd:component-name";
      }
    }
  }
}
// vim: sw=2
