module xos-slice {
  namespace "urn:ietf:params:xml:ns:yang:xos-slice";
  prefix xslice;
  yang-version 1.1;

  import ietf-yang-types { prefix yang; }
  import ietf-inet-types { prefix inet; }
  import xos-controller  { prefix xos; }
  import xos-types       { prefix xtype; }
  import opnfv-infrastructure { prefix nfvi; }

  organization
    "Open Networking Lab (XOS) / Corenova Technologies, Inc.";

  contact
    "Larry Peterson <llp@onlab.us>
     Peter K. Lee <peter@corenova.com>";
  
  description
    "This module contains a collection of Slice and related models for XOS.

    Copyright (c) 2016 ON.LAB and the persons identified as authors of
    the code.  All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, is permitted pursuant to, and subject to the license
    terms of the Apache License, Version 2.0 which accompanies this
    distribution, and is available at
    (http://www.apache.org/licenses/LICENSE-2.0).";
  
  revision 2016-09-13 {
    description "Initial revision.";
  }

  grouping slice {
    description 
      "A slice is a logically centralized container for network and compute resources";

    uses xos:provider {
      refine "name" { description "Name of the slice"; }
    }
    leaf slice-url {
      description "A URL describing the purpose of this slice";
      type inet:uri;
      // blank true;
    }
    leaf-list instances {
      type leafref {
        path "/nfvi:controller/compute/server/id";
      }
    }
    leaf-list networks {
      type leafref {
        path "/nfvi:controller/fabric/network/id";
      }
    }
    container policy {
      leaf max-instances {
        description "The maximum number of VMs that this slice is allowed to allocate";
        type uint16;
      }
      leaf default-flavor {
        type leafref {
          path "/nfvi:controller/compute/flavor/id";
        }
      }
      leaf default-image {
        type leafref {
          path "/nfvi:controller/compute/image/id";
        }
      }
      leaf default-node {
        type leafref {
          path "/nfvi:controller/compute/host/id";
        }
      } 
      leaf mount-data-sets {
        type string {
          length 0..256; 
        }
        default "GenBank";
      } 
      leaf default-isolation {
        type xtype:isolation;
      } 
    }
    leaf network {
      description
        "The network that the slice uses to connect to other slices and to the Internet.";
      type enumeration {
        enum none;
        enum host;
        enum bridged;
        enum noauto;
      }
      default none;
    }
    leaf-list ports {
      description
        "The ports to be exposed for other slices to connect to";
      type uint16;
    }
    leaf creator {
      type leafref {
        path "/xos:core/user/id";
      }
    }
    leaf-list tags {
      type string;
    }
    // below are deprecated and should not be used
    leaf service {
      description "The service that runs in this slice";
      status deprecated;
    }
    // TOOD: need to better understand relationship between Service and Slice
    action scale {
      description "Adjust scale for slice(s)";
    }
  }

  /*
   * Augmentations to XOS core and NFVI modules
   */
  augment "/xos:core" {
    list slice {
      key id;
      uses xslice:slice;
    }
  }
  
  augment "/nfvi:controller/nfvi:compute/nfvi:server" {
    leaf slice {
      // do we need this circular reference?
    }
    leaf deployment {
      type leafref {
        path "/xos:core/deployment/id";
      }
    }
    leaf isolation {
      type xtype:isolation;
    }
    leaf-list volumes {
      type string; // should be leafref
    }
    // leaf parent {
    //   type xtype:parent;
    // }
    container synchronizer {
      if-feature synchronizer;
      leaf instance-id { 
        type string;
      }
      leaf instance-uuid { 
        type string;
      }
      leaf instance-name { 
        type string;
      }
      leaf ip { 
        type inet:ip-address;
      }
    }
  }
  augment "/nfvi:controller/nfvi:compute/nfvi:image" {
    leaf template {
      type leafref {
        path "/xos:core/template/id";
      }
    }
    leaf-list deployments {
      type leafref {
        path "/xos:core/deployment/id";
      }
    }
    container synchronizer {
      if-feature xos:synchronizer;
      leaf glance-image-id { 
        type string;
      }
    }
  }
  augment "/nfvi:controller/nfvi:fabric/nfvi:network" {
    leaf autoconnect {
      type boolean;
      default true;
    }
    leaf-list labels {
      type string;
    }
    container policy {
      leaf guaranteed-bandwidth { 
        type uint32;
      }
      leaf permit-all-slices { 
        type boolean;
        default true;
      }
      container parameters {
        list topology {
          key name;
          uses xos:parameter;
        }
        list controller {
          key name;
          uses xos:parameter;
        }
        list network {
          key name;
          uses xos:parameter;
        }
      }
    }
    container synchronizer {
      if-feature synchronizer;
      leaf network-id { 
        type string;
      }
      leaf router-id { 
        type string;
      }
      leaf subnet-id { 
        type string;
      }
    }
  }
  augment "/nfvi:controller/nfvi:fabric/nfvi:network/nfvi:subnet/nfvi:port" {
    leaf instance {
      type instance-identifier;
    }
    leaf xos-created {
      type boolean;
      status deprecated;
    }
    container synchronizer {
      if-feature xos:synchronizer;
      leaf ip { 
        type inet:ip-address;
      }
      leaf port-id { 
        type yang:uuid;
      }
      leaf mac { 
        type yang:mac-address;
      }
    }
  }
  augment "/nfvi:controller/nfvi:fabric/nfvi:network/nfvi:subnet/nfvi:dhcp/nfvi:pool" {
    leaf gateway-ip {
      type inet:ip-address;
    }
    leaf gateway-mac {
      type yang:mac-address;
    }
    leaf cidr {
      type string;
    }
    leaf inuse {
      type boolean;
    }
  }
}
