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"; | |
} | |
} | |
} |