blob: d1ad954be01394f00d9f5ef03cad3bc11b049567 [file] [log] [blame]
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";
}
}
}