module xos-core {
  namespace "urn:onlab:xtype:core";
  prefix xos;
  yang-version 1.1;

  import ietf-yang-types { prefix yang; }
  import ietf-inet-types { prefix inet; }
  import xos-types       { prefix xtype; }

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

  contact
    "Larry Peterson <llp@onlab.us>
     Peter K. Lee <peter@corenova.com>";
  
  description
   "This module contains a collection of core 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-07-14 {
    description "Initial revision.";
  }
  
  feature synchronizer {
    description
      "Enables configuration synchronization to the distributed store.";
  }
  
  identity kind;
  identity generic { base kind; }
  identity service { base kind; }

  grouping attribute-pair {
    leaf name  { type string { length 0..128; } }
    leaf value { type string; }
    // don't need pointer back to service
  }

  grouping sync-record {
    description "Synchronizer-specific properties for model records";
    
    leaf created { type yang:date-and-time; }
    leaf updated { type yang:date-and-time; }
    leaf enacted { type yang:date-and-time; }
    leaf policed { type yang:date-and-time; }
        
    leaf writable { type boolean; default true; }
    leaf locked   { type boolean; default false; }
    leaf deleted  { type boolean; default false; }
      
    leaf dirty {
      config false;
      type boolean;
      default false;
    }
      
    container sync {
      anydata register {
        description "scratchpad used by the Observer";
      }
      leaf progress {
        type enumeration {
          enum provisioning {
            value 0;
            description "Provisioning in progress";
          }
        }
      }
      leaf disabled { type boolean; default false; }
      leaf enforced { type boolean; default true; }

      list policy {
        // TODO: how are policy defined/enforced?
      }
    }
      
    action diff {
      when "../dirty == true";
      description "retrieve diff of model state if dirty";
    }
    action save {
      description "trigger save into data store via synchronizer";
    }
  }
  
  grouping base-common {
    leaf id {
      type xtype:unique-identifier;
      mandatory true;
    }
    leaf name {
      type string {
        length 0..255;
      }
    }
    list attribute {
      uses attribute-pair;
      key name;
      status deprecated;
      reference "XOS: service-specific-attribute";
      description "backwards-compatible attribute association";
    }
    leaf service-specific-id {
      type xtype:unique-identifier;
      mandatory true;
      status deprecated;
    }
    container record {
      if-feature synchronizer;
      uses sync-record;
    }
  }
  grouping tenant-root {
    uses base-common {
      refine 'name' {
        description "Specify name of the TenantRoot";
      }
    }
    description
      "A Tenant Root is one of the things that can sit at the root of a chain
       of tenancy. This object represents a node.";

    list subscribed-tenant {
      config false;
      // not exactly clear how this is populated
    }
  }
  grouping subscriber {
    uses tenant-root {
      refine kind { default subscriber; }
    }
    // seems we should have interesting attributes specific to subscriber?
  }
  grouping provider {
    uses tenant-root {
      refine kind { default provider; }
    }
    // seems we should have interesting attributes specific to provider?
  }
  grouping service {
    uses base-common {
      refine 'name' {
        description "Name of the Service";
      }
    }
    leaf kind {
      type identityref {
        base kind;
      }
      default generic;
    }
    leaf description {
      type string {
        length 0..254;
      }
      description "Description of the Service";
    }
    leaf version {
      type string { length 0..30; }
      description "Version of Service Definition";
    }
    
    leaf enabled   { type boolean; default true; }
    leaf published { type boolean; default true; }

    container links {
      leaf view { type inet:uri; }
      leaf icon { type inet:uri; }
    }
    
    list keypair {
      description "collection of public/private key pair(s)";
      // should be a specific typedef for storing this content
      leaf public  { type string { length 0..1024; } }
      leaf private { type string { length 0..1024; } }
    }
    list provider {
      description
        "Each entry represents a provider of the service. Each unique service
         should augment this block with service specific attributes.";
      key id;
      uses xtype:provider;
    }
    list subscriber {
      description
        "Each entry represents a subscriber of the service. Each unique service
         should augment this block with service specific attributes.";
      key id;
      uses xtype:subscriber;
      notification subscriber-added;
      notification subscriber-deleted;
    }
    list slice {
      uses xtype:slice;
    }
    
    // TOOD: need to better understand relationship between Service and Slice
    action scale {
      description "Adjust scale for slice(s)";
    }

    // TODO: need to better understand relationship between Service and VTN
  }

  grouping tenancy {
    uses base-common;

    choice provider {
      description "only one type of provider node is valid.";
      case service { leaf provider-service { type instance-identifier; } }
    }
    
    choice subscriber {
      description "only one type of subscriber node is valid.";
      case service { leaf subscriber-service { type instance-identifier; } }
      case tenant  { leaf subscriber-tenant  { type instance-identifier; } }
      case user    { leaf subscriber-user    { type instance-identifier; } }
      case root    { leaf subscriber-root    { type instance-identifier; } }
      case network { leaf subscriber-network { type instance-identifier; } }
    }

    leaf connect-method {
      //when "../kind == 'static-tenant'";
      
      type enumeration {
        enum public { description "Public"; }
        enum private { description "Private"; }
        enum private-unidirectional { description "Private Uni-directional"; }
        enum na { description "Not Applicable"; }
      }
      default na;
    }

    // TODO: should be able to deal with TenantWithContainer here
    
  }

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

    uses base-common;

    leaf enabled {
       type boolean;
       default true;
    }

    leaf omf-friendly {
       type boolean;
       default false;
       status deprecated;
    }

    leaf slice-url {
       description "A URL describing the purpose of this slice";
       type xtype:url-field; 
       // blank true;
    }

    leaf max-instances {
       description "The maximum number of VMs that this slice is allowed to allocate";
       type uint32;
    } 

    leaf service {
       description "The service that runs in this slice";
       type xtype:service;
    }

    leaf network {
       description "The network that the slice uses to connect to other slices and to the Internet.";
       type string;
    }

    leaf exposed-ports {
       description "The ports to be exposed for other slices to connect to";
       type string;
    }

    leaf service-class {
      type xtype:service-class;
      status deprecated;
    }
   
    leaf creator {
      type xtype:user;
    }

    leaf default-flavor {
      type xtype:flavor;
    }

    leaf default-image {
      type xtype:image;
    }

    leaf default-node {
      type xtype:node;
    } 

    leaf mount-data-sets {
      type string {
        length 0..256; 
      }
      default "GenBank";
    } 

    leaf default_isolation {
      type string {
        length 0..30;
      }
      default "vm";
    } 

    leaf-list tags {
      // below leafref is not valid since there is no /tag
      type leafref {
        path "/tag[id = current()/../id]/id";
      }
    }
  }
  
  
  grouping controller-images {
    uses xos-base;

    leaf image { 
      type xtype:image; 
    }

    leaf controller { 
      type xtype:controller; 
    }

    container synchronizer {
        if-feature synchronizer {
            leaf glance-image-id { 
              type string;
            }
        }
    }
  }

  grouping controller-site-privilege {
    uses xos-base;

    leaf controller { 
      type xtype:controller; 
    }

    leaf site-privilege { 
      type xtype:site-privilege; 
    }
    
   container synchronizer {
     if-feature synchronizer {

       leaf role-id { 
         type string;
       }
     }
   }

  grouping image {
    uses xos-base;

    
    leaf kind { 
      type string;
    }
    leaf disk-format { 
      type string;
    }
    leaf container-format { 
      type string;
    }
    leaf path { 
      type string;
    }
    leaf tag { 
      type string;
    }
  }

  grouping controller-network {
    uses xos-base;
    leaf network { 
      type xtype:network; 
    }
    leaf controller { 
      type xtype:controller; 
    }
    
    container synchronizer {
        if-feature synchronizer {
            leaf net-id { 
              type string;
            }
            leaf router-id { 
              type string;
            }
            leaf subnet-id { 
              type string;
            }
        }

    leaf subnet { 
      type string;
    }
   
  }

  grouping site {
    uses xos-base;
    
    leaf site-url { 
      type xtype:url-field;
    }
    leaf enabled { 
      type boolean;
    }
    leaf hosts-nodes { 
      type boolean;
    }
    leaf hosts-users { 
      type boolean;
    }
    leaf location { 
      type xtype:geoposition-field;
    }
    leaf longitude { 
      type decimal64;
    }
    leaf latitude { 
      type decimal64;
    }
    leaf login-base { 
      type string;
    }
    leaf is-public { 
      type boolean;
    }
    leaf abbreviated-name { 
      type string;
    }
  }

  grouping slice-role {
    uses xos-base;
    leaf role { 
      type string;
    }
  }

  grouping site-deployment {
    uses xos-base;
    leaf site { 
      type xtype:site; 
    }
    leaf deployment { 
      type xtype:deployment; 
    }
    leaf controller { 
      type xtype:controller; 
    }
    container synchronizer {
        if-feature synchronizer {

          leaf availability-zone { 
            type string;
          }
        }
    }
  }

  
  grouping user-credential {
    uses xos-base;
    leaf user { 
      type xtype:user; 
    }
    
    leaf key-id { 
      type string;
    }

    leaf enc-value { 
      type xtype:encrypted-string;
    }
  }

  grouping invoice {
    uses xos-base;
    leaf date { 
      type xtype:datetime;
    }
    leaf account { 
      type xtype:account; 
    }
  }

  grouping slice-privilege {
    uses xos-base;
    leaf user { 
      type xtype:user; 
    }
    leaf slice { 
      type xtype:slice; 
    }
    leaf role { 
      type xtype:role; 
    }
  }

  grouping flavor {
    uses xos-base;
    
    leaf description { 
      type string;
    }
    leaf flavor { 
      type string;
    }
    leaf order { 
      type uint32;
    }
    leaf default { 
      type boolean;
    }
  }

  grouping port {
    uses xos-base;
    leaf network { 
      type xtype:network; 
    }
    leaf instance { 
      type xtype:instance; 
    }
    container synchronizer {
        if-feature synchronizer {
            leaf ip { 
              type inet:ip-address;
            }
            leaf port-id { 
              type string;
            }
            leaf mac { 
              type string;
            }
        }
    }
    leaf xos-created { 
      type boolean;
    }
  }

  grouping service-role {
    uses xos-base;
    leaf role { 
      type string;
    }
  }

  grouping controller-site {
    uses xos-base;
    leaf site { 
      type xtype:site; 
    }

    leaf controller { 
      type xtype:controller; 
    }

    container synchronizer {
        if-feature synchronizer {

          leaf tenant-id { 
            type string;
          }
        }
    }
  }

  grouping controller-slice {
    uses xos-base;
    leaf controller { 
      type xtype:controller; 
    }
    leaf slice { 
      type xtype:slice; 
    }
    
    container synchronizer {
        if-feature synchronizer {
          leaf tenant-id { 
            type string;
          }
        }
    }
  }

  grouping tenant-role {
    uses xos-base;
    leaf role { 
      type string;
    }
  }

  grouping network {
    uses xos-base;
    leaf template { 
      type xtype:template; 
    }

    leaf subnet { 
      type string;
    }

    leaf ports { 
      type string;
    }

    leaf labels { 
      type string;
    }

    leaf owner { 
      type xtype:owner; 
    }

    leaf guaranteed-bandwidth { 
      type uint32;
    }

    leaf permit-all-slices { 
      type boolean;
    }

    leaf topology-parameters { 
      type string;
    }

    leaf controller-url { 
      type string;
    }

    leaf controller-parameters { 
      type string;
    }

    container synchronizer {
        if-feature synchronizer {
            leaf network-id { 
              type string;
            }
            leaf router-id { 
              type string;
            }
            leaf subnet-id { 
              type string;
            }
        }
    }
    leaf autoconnect { 
      type boolean;
    }
  }

  grouping controller-role {
    uses xos-base;
    leaf role { 
      type string;
    }
  }

  grouping diag {
    uses xos-base;
    
  }

  grouping service-class {
    uses xos-base;
    
    leaf description { 
      type string;
    }
    leaf commitment { 
      type uint32;
    }
    leaf membership-fee { 
      type uint32;
    }
    leaf membership-fee-months { 
      type uint32;
    }
    leaf upgrade-requires-approval { 
      type boolean;
    }
  }

  grouping site-role {
    uses xos-base;
    leaf role { 
      type string;
    }
  }

  grouping instance {
    uses xos-base;
    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;
        }
    }
    leaf image { 
      type xtype:image; 
    }
    leaf creator { 
      type xtype:creator; 
    }
    leaf slice { 
      type xtype:slice; 
    }
    leaf deployment { 
      type xtype:deployment; 
    }
    leaf node { 
      type xtype:node; 
    }
    leaf number-cores { 
      type uint32;
    }
    leaf flavor { 
      type xtype:flavor; 
    }
    leaf user-data { 
      type string;
    }
    leaf isolation { 
      type string;
    }
    leaf volumes { 
      type string;
    }
    leaf parent { 
      type xtype:parent; 
    }
  }

  grouping charge {
    uses xos-base;
    leaf account { 
      type xtype:account; 
    }
    leaf slice { 
      type xtype:slice; 
    }
    leaf kind { 
      type string;
    }
    leaf state { 
      type string;
    }
    leaf date { 
      type xtype:datetime;
    }
    leaf object { 
      type xtype:object; 
    }
    leaf amount { 
      type decimal64;
    }
    leaf core-hours { 
      type decimal64;
    }
    leaf invoice { 
      type xtype:invoice; 
    }
  }

  grouping program {
    uses xos-base;
    leaf description { 
      type string;
    }

    leaf kind { 
      type string;
    }

    leaf command { 
      type string;
    }

    leaf owner { 
      type xtype:owner; 
    }

    leaf contents { 
      type string;
    }

    leaf output { 
      type string;
    }

    leaf messages { 
      type string;
    }

    leaf status { 
      type string;
    }
  }

  grouping role {
    uses xos-base;
    leaf role-type { 
      type string;
    }
    leaf role { 
      type string;
    }
    leaf description { 
      type string;
    }
    leaf content-type { 
      type xtype:content-type; 
    }
  }

  grouping usable-object {
    uses xos-base;
  }

  grouping node-label {
    uses xos-base;
  }

  grouping slice-credential {
    uses xos-base;
    leaf slice { 
      type xtype:slice; 
    }
    
    leaf key-id { 
      type string;
    }
    leaf enc-value { 
      type xtype:encrypted-string;
    }
  }

  grouping node {
    uses xos-base;
    leaf site-deployment { 
      type xtype:site-deployment; 
    }
    leaf site { 
      type xtype:site; 
    }
  }

  grouping address-pool {
    uses xos-base;
    leaf addresses { 
      type string;
    }
    leaf gateway-ip { 
      type string;
    }
    leaf gateway-mac { 
      type string;
    }
    leaf cidr { 
      type string;
    }
    leaf inuse { 
      type string;
    }
    leaf service { 
      type xtype:service; 
    }
  }

  grouping dashboard-view {
    uses xos-base;
    leaf url { 
      type string;
    }
    leaf enabled { 
      type boolean;
    }
  }

  grouping network-parameter {
    uses xos-base;
    leaf parameter { 
      type xtype:parameter; 
    }
    leaf value { 
      type string;
    }
    leaf content-type { 
      type xtype:content-type; 
    }
    leaf object-id { 
      type uint32;
    }
  }

  grouping image-deployments {
    uses xos-base;
    leaf image { 
      type xtype:image; 
    }
    leaf deployment { 
      type xtype:deployment; 
    }
  }

  grouping controller-user {
    uses xos-base;
    leaf user { 
      type xtype:user; 
    }

    leaf controller { 
      type xtype:controller; 
    }
    
    container synchronizer {
        if-feature synchronizer {
            leaf kuser-id { 
              type string;
            }
        }
      }
  }

  grouping reserved-resource {
    uses xos-base;
    leaf instance { 
      type xtype:instance; 
    }
    leaf resource { 
      type xtype:resource; 
    }
    leaf quantity { 
      type uint32;
    }
    leaf reservationSet { 
      type xtype:reservationSet; 
    }
  }

  grouping network-template {
    uses xos-base;
    leaf description { 
      type string;
    }
    leaf guaranteed-bandwidth { 
      type uint32;
    }
    leaf visibility { 
      type string;
    }
    leaf translation { 
      type string;
    }
    leaf access { 
      type string;
    }
    leaf shared-network-name { 
      type string;
    }
    leaf shared-network-id { 
      type string;
    }
    leaf topology-kind { 
      type string;
    }
    leaf controller-kind { 
      type string;
    }
  }

  grouping controller-dashboard-view {
    uses xos-base;
    leaf controller { 
      type xtype:controller; 
    }
    leaf dashboardView { 
      type xtype:dashboardView; 
    }
    leaf enabled { 
      type boolean;
    }
    leaf url { 
      type string;
    }
  }

  grouping user-dashboard-view {
    uses xos-base;
    leaf user { 
      type xtype:user; 
    }
    leaf dashboardView { 
      type xtype:dashboardView; 
    }
    leaf order { 
      type uint32;
    }
  }

  grouping controller {
    uses xos-base;
    leaf backend-type { 
      type string;
    }
    leaf version { 
      type string;
    }
    leaf auth-url { 
      type string;
    }
    leaf admin-user { 
      type string;
    }
    leaf admin-password { 
      type string;
    }
    leaf admin-tenant { 
      type string;
    }
    leaf domain { 
      type string;
    }
    leaf rabbit-host { 
      type string;
    }
    leaf rabbit-user { 
      type string;
    }
    leaf rabbit-password { 
      type string;
    }
    leaf deployment { 
      type xtype:deployment; 
    }
  }

  grouping user {
    uses xos-base;
    leaf password { 
      type string;
    }
    leaf last-login { 
      type xtype:datetime;
    }
    leaf email { 
      type EmailField;
    }
    leaf username { 
      type string;
    }
    leaf firstname { 
      type string;
    }
    leaf lastname { 
      type string;
    }
    leaf phone { 
      type string;
    }
    leaf user-url { 
      type xtype:url-field;
    }
    leaf site { 
      type xtype:site; 
    }
    leaf public-key { 
      type string;
    }
    leaf is-active { 
      type boolean;
    }
    leaf is-admin { 
      type boolean;
    }
    leaf is-staff { 
      type boolean;
    }
    leaf is-readonly { 
      type boolean;
    }
    leaf is-registering { 
      type boolean;
    }
    leaf is-appuser { 
      type boolean;
    }
    leaf login-page { 
      type string;
    }
    leaf timezone { 
      type xtype:time-zone-field;
    }
  }

  grouping deployment {
    uses xos-base;
    
    leaf access-control { 
      type string;
    }
  }

  grouping reservation {
    uses xos-base;
    leaf start-time { 
      type xtype:datetime;
    }
    leaf slice { 
      type xtype:slice; 
    }
    leaf duration { 
      type uint32;
    }
  }

  grouping site-privilege {
    uses xos-base;
    leaf user { 
      type xtype:user; 
    }
    leaf site { 
      type xtype:site; 
    }
    leaf role { 
      type xtype:role; 
    }
  }

  grouping payment {
    uses xos-base;
    leaf account { 
      type xtype:account; 
    }
    leaf amount { 
      type decimal64;
    }
    leaf date { 
      type xtype:datetime;
    }
  }
  
  grouping network-slice {
    uses xos-base;
    leaf network { 
      type xtype:network; 
    }

    leaf slice { 
      type xtype:slice; 
    }
  }

  grouping account {
    uses xos-base;
    leaf site { 
      type xtype:site; 
    }
  }

  grouping controller-slice-privilege {
    uses xos-base;
    leaf controller { 
      type xtype:controller; 
    }

    leaf slice-privilege { 
      type xtype:slice-privilege; 
    }
    
    container synchronizer {
        if-feature synchronizer {
            leaf role-id { 
              type string;
            }
        }
    }
  }

  grouping site-credential {
    uses xos-base;
    leaf site { 
      type xtype:site; 
    }
    
    leaf key-id { 
      type string;
    }

    leaf enc-value { 
      type xtype:encrypted-string;
    }
  }

  grouping deployment-privilege {
    uses xos-base;
    leaf user { 
      type xtype:user; 
    }

    leaf deployment { 
      type xtype:deployment; 
    }

    leaf role { 
      type xtype:role; 
    }
  }

  grouping network-parameter-type {
    uses xos-base;
    leaf description { 
      type string;
    }
  }
  
  grouping deployment-role {
    uses xos-base;
    leaf role { 
      type string;
    }
  }

  grouping project {
    uses xos-base;
  }
  
  grouping slice-tag {
    uses xos-base;
    leaf slice { 
      type xtype:slice; 
    }
    
    leaf value { 
      type string;
    }
  }

  grouping router {
    uses xos-base;
    leaf owner { 
      type xtype:owner; 
    }
  }

  grouping service-resource {
    uses xos-base;
    leaf service-class { 
      type xtype:service-class; 
    }
    
    leaf max-units-deployment { 
      type uint32;
    }

    leaf max-units-node { 
      type uint32;
    }

    leaf max-duration { 
      type uint32;
    }

    leaf bucket-in-rate { 
      type uint32;
    }

    leaf bucket-max-size { 
      type uint32;
    }

    leaf cost { 
      type uint32;
    }

    leaf calendar-reservable { 
      type boolean;
    }
  }

  grouping service-privilege {
    uses xos-base;
    leaf user { 
      type xtype:user; 
    }
    leaf service { 
      type xtype:service; 
    }
    leaf role { 
      type xtype:role; 
    }
  }

  /*** main configuration tree for XOS ***/

  container api {
    description
      "The primary configuration interaction endpoint";
    
    container service {
      description
        "placeholder endpoint for services to augment";
    }
    container tenant {
      description
        "placeholder endpoint for tenants to augment";
    }
  }
  
}
