blob: 1e7a2db4fbbcc2aeb6090370ddf3ebff6e0f1f74 [file] [log] [blame]
module xos-core {
namespace "urn:onlab:xos:core";
prefix xos;
yang-version 1.1;
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.";
}
import ietf-yang-types { prefix yang; }
import ietf-inet-types { prefix inet; }
import xos-types { prefix xos; }
feature synchronizer {
description
"Enables configuration synchronization to the distributed store.";
}
identity kind;
identity generic { base kind; }
identity service { base kind; }
typedef unique-identifier {
description "defines valid formats for external reference id";
type union {
type uint32 { range 1..max; }
type yang:uuid;
type inet:uri;
}
}
typedef bandwidth {
type uint32 {
range 1000000..max; // should be at least 1 Mbps?
}
units 'bps';
}
typedef vlan {
type uint16 { range 0..4095; }
}
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 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 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 xos: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 xos:subscriber;
notification subscriber-added;
notification subscriber-deleted;
}
// 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 xos.refs.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 xos.refs.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 xos.refs.service-class;
status deprecated;
}
leaf creator {
type xos.refs.user;
}
leaf default-flavor {
type xos.refs.flavor;
}
leaf default-image {
type xos.refs.image;
}
leaf default-node {
type xos.refs.node;
}
leaf mount-data-sets {
type string;
default "GenBank";
length 0..256;
}
leaf default_isolation {
type string;
default "vm";
length 0..30;
}
leaf-list tags {
type leafref {
path "/tag[id = current()/../id]/id";
}
}
}
grouping controller-images {
uses xos-base;
leaf image {
type xos:image;
}
leaf controller {
type xos:controller;
}
container synchronizer {
if-feature synchronizer {
leaf glance-image-id {
type string;
}
}
}
}
grouping controller-site-privilege {
uses xos-base;
leaf controller {
type xos:controller;
}
leaf site-privilege {
type xos: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 xos:network;
}
leaf controller {
type xos: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 xos:url-field;
}
leaf enabled {
type boolean;
}
leaf hosts-nodes {
type boolean;
}
leaf hosts-users {
type boolean;
}
leaf location {
type xos: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 {
leaf site {
type xos:site;
}
leaf deployment {
type xos:deployment;
}
leaf controller {
type xos:controller;
}
container synchronizer {
if-feature synchronizer {
leaf availability-zone {
type string;
}
}
}
}
grouping user-credential {
leaf user {
type xos:user;
}
leaf key-id {
type string;
}
leaf enc-value {
type xos:encrypted-string;
}
}
grouping invoice {
leaf date {
type xos:datetime;
}
leaf account {
type xos:account;
}
}
grouping slice-privilege {
leaf user {
type xos:user;
}
leaf slice {
type xos:slice;
}
leaf role {
type xos:role;
}
}
grouping flavor {
leaf description {
type string;
}
leaf flavor {
type string;
}
leaf order {
type uint32;
}
leaf default {
type boolean;
}
}
grouping port {
leaf network {
type xos:network;
}
leaf instance {
type xos: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 {
leaf role {
type string;
}
}
grouping controller-site {
leaf site {
type xos:site;
}
leaf controller {
type xos:controller;
}
container synchronizer {
if-feature synchronizer {
leaf tenant-id {
type string;
}
}
}
}
grouping controller-slice {
leaf controller {
type xos:controller;
}
leaf slice {
type xos:slice;
}
container synchronizer {
if-feature synchronizer {
leaf tenant-id {
type string;
}
}
}
}
grouping tenant-role {
leaf role {
type string;
}
}
grouping network {
leaf template {
type xos:template;
}
leaf subnet {
type string;
}
leaf ports {
type string;
}
leaf labels {
type string;
}
leaf owner {
type xos: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 {
leaf role {
type string;
}
}
grouping diag {
}
grouping service-class {
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 {
leaf role {
type string;
}
}
grouping instance {
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 xos:image;
}
leaf creator {
type xos:creator;
}
leaf slice {
type xos:slice;
}
leaf deployment {
type xos:deployment;
}
leaf node {
type xos:node;
}
leaf number-cores {
type uint32;
}
leaf flavor {
type xos:flavor;
}
leaf user-data {
type string;
}
leaf isolation {
type string;
}
leaf volumes {
type string;
}
leaf parent {
type xos:parent;
}
}
grouping charge {
leaf account {
type xos:account;
}
leaf slice {
type xos:slice;
}
leaf kind {
type string;
}
leaf state {
type string;
}
leaf date {
type xos:datetime;
}
leaf object {
type xos:object;
}
leaf amount {
type decimal64;
}
leaf core-hours {
type decimal64;
}
leaf invoice {
type xos:invoice;
}
}
grouping program {
leaf description {
type string;
}
leaf kind {
type string;
}
leaf command {
type string;
}
leaf owner {
type xos:owner;
}
leaf contents {
type string;
}
leaf output {
type string;
}
leaf messages {
type string;
}
leaf status {
type string;
}
}
grouping role {
leaf role-type {
type string;
}
leaf role {
type string;
}
leaf description {
type string;
}
leaf content-type {
type xos:content-type;
}
}
grouping usable-object {
}
grouping node-label {
}
grouping slice-credential {
leaf slice {
type xos:slice;
}
leaf key-id {
type string;
}
leaf enc-value {
type xos:encrypted-string;
}
}
grouping node {
leaf site-deployment {
type xos:site-deployment;
}
leaf site {
type xos:site;
}
}
grouping address-pool {
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 xos:service;
}
}
grouping dashboard-view {
leaf url {
type string;
}
leaf enabled {
type boolean;
}
}
grouping network-parameter {
leaf parameter {
type xos:parameter;
}
leaf value {
type string;
}
leaf content-type {
type xos:content-type;
}
leaf object-id {
type uint32;
}
}
grouping image-deployments {
leaf image {
type xos:image;
}
leaf deployment {
type xos:deployment;
}
}
grouping controller-user {
leaf user {
type xos:user;
}
leaf controller {
type xos:controller;
}
container synchronizer {
if-feature synchronizer {
leaf kuser-id {
type string;
}
}
}
}
grouping reserved-resource {
leaf instance {
type xos:instance;
}
leaf resource {
type xos:resource;
}
leaf quantity {
type uint32;
}
leaf reservationSet {
type xos:reservationSet;
}
}
grouping network-template {
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 {
leaf controller {
type xos:controller;
}
leaf dashboardView {
type xos:dashboardView;
}
leaf enabled {
type boolean;
}
leaf url {
type string;
}
}
grouping user-dashboard-view {
leaf user {
type xos:user;
}
leaf dashboardView {
type xos:dashboardView;
}
leaf order {
type uint32;
}
}
grouping controller {
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 xos:deployment;
}
}
grouping user {
leaf password {
type string;
}
leaf last-login {
type xos: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 xos:url-field;
}
leaf site {
type xos: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 xos:time-zone-field;
}
}
grouping deployment {
leaf access-control {
type string;
}
}
grouping reservation {
leaf startTime {
type xos:datetime;
}
leaf slice {
type xos:slice;
}
leaf duration {
type uint32;
}
}
grouping site-privilege {
leaf user {
type xos:user;
}
leaf site {
type xos:site;
}
leaf role {
type xos:role;
}
}
grouping payment {
leaf account {
type xos:account;
}
leaf amount {
type decimal64;
}
leaf date {
type xos:datetime;
}
}
grouping network-slice {
leaf network {
type xos:network;
}
leaf slice {
type xos:slice;
}
}
grouping account {
leaf site {
type xos:site;
}
}
grouping controller-slice-privilege {
leaf controller {
type xos:controller;
}
leaf slice-privilege {
type xos:slice-privilege;
}
container synchronizer {
if-feature synchronizer {
leaf role-id {
type string;
}
}
}
}
grouping site-credential {
leaf site {
type xos:site;
}
leaf key-id {
type string;
}
leaf enc-value {
type xos:encrypted-string;
}
}
grouping deployment-privilege {
leaf user {
type xos:user;
}
leaf deployment {
type xos:deployment;
}
leaf role {
type xos:role;
}
}
grouping network-parameter-type {
leaf description {
type string;
}
}
grouping deployment-role {
leaf role {
type string;
}
}
grouping project {
}
grouping slice-tag {
leaf slice {
type xos:slice;
}
leaf value {
type string;
}
}
grouping router {
leaf owner {
type xos:owner;
}
}
grouping service-resource {
leaf service-class {
type xos: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 {
leaf user {
type xos:user;
}
leaf service {
type xos:service;
}
leaf role {
type xos: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";
}
}
}