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

  description
    "This yang module defines project-based tenancy for RIFT.ware.
    Authorization for project access is defined in terms of RIFT.ware's
    Role-Based Access Control (RBAC) model.";

  revision 2015-09-10 {
    description
      "Initial revision.  This YANG file defines the model for
      RIFT.ware project management for multi-tenancy";
    reference
      "RIFT.io MANO Tenancy Design Specification";
  }

  list project {
    description
      "Configuration and state for individual projects.  RIFT.ware
      applications and projects are expected to augment this list in
      order to add configuration for projects that is specific to the
      product or application.  As such, this list contains minimal
      data defined in this yang module.

      When augmenting this element, other yang modules should prefer to
      define containers with the same name as the augmenting module.
      (Augmenting RIFT.ware modules should prefer to augment without
      the rw prefix [for new features], or should prefer to augment the
      augmented container of an existing augment, to ease future
      adoption and/or standardization.)";

    key "name";
    leaf name {
      description "Name of the project.";
      type string {
        length "1..255";
      }
    }

    leaf description {
      description "Information about project";
      type string;
    }
  }
}
