CORD-1339: Recreate modeldefs API via xproto
Change-Id: Id362e0e3232ad1dbf396ddf682b261eb84e26b79
diff --git a/xos/core/models/core.xproto b/xos/core/models/core.xproto
index 7bdf6fe..f09ac28 100644
--- a/xos/core/models/core.xproto
+++ b/xos/core/models/core.xproto
@@ -1,5 +1,7 @@
+option app_name = "core";
+
message XOSBase {
- option skip = True;
+ option skip_init = True;
required string created = 1 [content_type = "date", auto_now_add = True];
required string updated = 2 [default = "now()", content_type = "date"];
optional string enacted = 3 [null = True, content_type = "date", blank = True, default = None];
@@ -15,13 +17,46 @@
required bool no_policy = 13 [default = False];
}
+message User (AbstractBaseUser,PlModelMixIn) {
+ option skip_django = True;
+ required string email = 1 [db_index = True, max_length = 255, null = False, blank = False];
+ required string username = 2 [default = "Something", max_length = 255, content_type = "stripped", blank = False, null = False, db_index = False];
+ required string firstname = 3 [max_length = 200, content_type = "stripped", blank = False, help_text = "person's given name", null = False, db_index = False];
+ required string lastname = 4 [max_length = 200, content_type = "stripped", blank = False, help_text = "person's surname", null = False, db_index = False];
+ optional string phone = 5 [max_length = 100, content_type = "stripped", blank = True, help_text = "phone number contact", null = True, db_index = False];
+ optional string user_url = 6 [db_index = False, max_length = 200, null = True, content_type = "url", blank = True];
+ required manytoone site->Site:users = 7 [help_text = "Site this user will be homed too", null = False, db_index = True, blank = False];
+ optional string public_key = 8 [help_text = "Public key string", max_length = 1024, null = True, db_index = False, blank = True, varchar = True];
+ required bool is_active = 9 [default = True, null = False, db_index = False, blank = True];
+ required bool is_admin = 10 [default = False, null = False, db_index = False, blank = True];
+ required bool is_staff = 11 [default = True, null = False, db_index = False, blank = True];
+ required bool is_readonly = 12 [default = False, null = False, db_index = False, blank = True];
+ required bool is_registering = 13 [default = False, null = False, db_index = False, blank = True];
+ required bool is_appuser = 14 [default = False, null = False, db_index = False, blank = True];
+ optional string login_page = 15 [max_length = 200, content_type = "stripped", blank = True, help_text = "send this user to a specific page on login", null = True, db_index = False];
+ required string created = 16 [db_index = False, null = False, content_type = "date", blank = True];
+ required string updated = 17 [db_index = False, null = False, content_type = "date", blank = True];
+ optional string enacted = 18 [db_index = False, null = True, content_type = "date", blank = False];
+ optional string policed = 19 [db_index = False, null = True, content_type = "date", blank = False];
+ required string backend_status = 20 [default = "Provisioning in progress", max_length = 1024, content_type = "stripped", blank = False, null = False, db_index = False];
+ required bool backend_need_delete = 21 [default = False, null = False, db_index = False, blank = True];
+ required bool backend_need_reap = 22 [default = False, null = False, db_index = False, blank = True];
+ required bool deleted = 23 [default = False, null = False, db_index = False, blank = True];
+ required bool write_protect = 24 [default = False, null = False, db_index = False, blank = True];
+ required bool lazy_blocked = 25 [default = False, null = False, db_index = False, blank = True];
+ required bool no_sync = 26 [default = False, null = False, db_index = False, blank = True];
+ required bool no_policy = 27 [default = False, null = False, db_index = False, blank = True];
+ required string timezone = 28 [default = "America/New_York", max_length = 100, blank = False, null = False, db_index = False];
+ required manytomany dashboards->DashboardView/UserDashboardView:user = 29 [db_index = False, null = False, blank = True];
+}
+
message AddressPool (XOSBase) {
required string name = 1 [db_index = False, max_length = 32, null = False, blank = False];
- optional string addresses = 2 [db_index = False, null = True, blank = True];
+ optional string addresses = 2 [db_index = False, null = True, blank = True, varchar = True];
optional string gateway_ip = 3 [db_index = False, max_length = 32, null = True, blank = False];
optional string gateway_mac = 4 [db_index = False, max_length = 32, null = True, blank = False];
optional string cidr = 5 [db_index = False, max_length = 32, null = True, blank = False];
- optional string inuse = 6 [db_index = False, null = True, blank = True];
+ optional string inuse = 6 [db_index = False, null = True, blank = True, varchar = True];
optional manytoone service->Service:addresspools = 7 [db_index = True, null = True, blank = True];
}
@@ -124,7 +159,7 @@
message Deployment (XOSBase) {
required string name = 1 [max_length = 200, content_type = "stripped", blank = False, help_text = "Name of the Deployment", null = False, db_index = False];
- required string accessControl = 2 [default = "allow all", max_length = 200, blank = False, help_text = "Access control list that specifies which sites/users may use nodes in this deployment", null = False, db_index = False];
+ required string accessControl = 2 [default = "allow all", max_length = 200, blank = False, help_text = "Access control list that specifies which sites/users may use nodes in this deployment", null = False, db_index = False, varchar = True];
}
@@ -183,7 +218,7 @@
required manytoone node->Node:instances = 10 [db_index = True, null = False, blank = False];
required int32 numberCores = 11 [help_text = "Number of cores for instance", default = 0, null = False, db_index = False, blank = False];
required manytoone flavor->Flavor:instance = 12 [help_text = "Flavor of this instance", null = False, db_index = True, blank = False];
- optional string userData = 13 [help_text = "user_data passed to instance during creation", null = True, db_index = False, blank = True];
+ optional string userData = 13 [help_text = "user_data passed to instance during creation", null = True, db_index = False, blank = True, varchar = True];
required string isolation = 14 [default = "vm", choices = "(('vm', 'Virtual Machine'), ('container', 'Container'), ('container_vm', 'Container In VM'))", max_length = 30, blank = False, null = False, db_index = False];
optional string volumes = 15 [help_text = "Comma-separated list of directories to expose to parent context", null = True, db_index = False, blank = True];
optional manytoone parent->Instance:instance = 16 [help_text = "Parent Instance for containers nested inside of VMs", null = True, db_index = True, blank = True];
@@ -261,7 +296,7 @@
message Service (XOSBase,AttributeMixin) {
- optional string description = 1 [help_text = "Description of Service", max_length = 254, null = True, db_index = False, blank = True];
+ optional string description = 1 [help_text = "Description of Service", max_length = 254, null = True, db_index = False, blank = True, varchar = True];
required bool enabled = 2 [default = True, null = False, db_index = False, blank = True];
required string kind = 3 [default = "generic", max_length = 30, content_type = "stripped", blank = False, help_text = "Kind of service", null = False, db_index = False];
required string name = 4 [max_length = 30, content_type = "stripped", blank = False, help_text = "Service Name", null = False, db_index = False];
@@ -269,16 +304,16 @@
required bool published = 6 [default = True, null = False, db_index = False, blank = True];
optional string view_url = 7 [db_index = False, max_length = 1024, null = True, content_type = "stripped", blank = True];
optional string icon_url = 8 [db_index = False, max_length = 1024, null = True, content_type = "stripped", blank = True];
- optional string public_key = 9 [help_text = "Public key string", max_length = 4096, null = True, db_index = False, blank = True];
+ optional string public_key = 9 [help_text = "Public key string", max_length = 4096, null = True, db_index = False, blank = True, varchar = True];
optional string private_key_fn = 10 [db_index = False, max_length = 4096, null = True, content_type = "stripped", blank = True];
optional string service_specific_id = 11 [db_index = False, max_length = 30, null = True, content_type = "stripped", blank = True];
- optional string service_specific_attribute = 12 [db_index = False, null = True, blank = True];
+ optional string service_specific_attribute = 12 [db_index = False, null = True, blank = True, varchar = True];
}
message ServiceAttribute (XOSBase) {
required string name = 1 [help_text = "Attribute Name", max_length = 128, null = False, db_index = False, blank = False];
- required string value = 2 [help_text = "Attribute Value", null = False, db_index = False, blank = False];
+ required string value = 2 [help_text = "Attribute Value", null = False, db_index = False, blank = False, varchar = True];
required manytoone service->Service:serviceattributes = 3 [help_text = "The Service this attribute is associated with", null = False, db_index = True, blank = False];
}
@@ -290,7 +325,7 @@
message ServiceMonitoringAgentInfo (XOSBase) {
required string name = 1 [help_text = "Monitoring Agent Name", max_length = 128, null = False, db_index = False, blank = False];
optional manytoone service->Service:servicemonitoringagents = 2 [help_text = "The Service this attribute is associated with", null = True, db_index = True, blank = True];
- required string target_uri = 3 [help_text = "Monitoring collector URI to be used by agents to publish the data", null = False, db_index = False, blank = False];
+ required string target_uri = 3 [help_text = "Monitoring collector URI to be used by agents to publish the data", null = False, db_index = False, blank = False, varchar = True];
}
@@ -342,7 +377,7 @@
message Slice (XOSBase) {
required string name = 1 [max_length = 80, content_type = "stripped", blank = False, help_text = "The Name of the Slice", null = False, db_index = False];
required bool enabled = 2 [help_text = "Status for this Slice", default = True, null = False, db_index = False, blank = True];
- required string description = 4 [help_text = "High level description of the slice and expected activities", max_length = 1024, null = False, db_index = False, blank = True];
+ required string description = 4 [help_text = "High level description of the slice and expected activities", max_length = 1024, null = False, db_index = False, blank = True, varchar = True];
required string slice_url = 5 [db_index = False, max_length = 512, null = False, content_type = "url", blank = True];
required manytoone site->Site:slices = 6 [help_text = "The Site this Slice belongs to", null = False, db_index = True, blank = False];
required int32 max_instances = 7 [default = 10, null = False, db_index = False, blank = False];
@@ -389,7 +424,7 @@
optional manytoone subscriber_root->TenantRoot:subscribed_tenants = 7 [db_index = True, null = True, blank = True];
optional manytoone subscriber_network->Network:subscribed_tenants = 8 [db_index = True, null = True, blank = True];
optional string service_specific_id = 9 [db_index = False, max_length = 30, null = True, content_type = "stripped", blank = True];
- optional string service_specific_attribute = 10 [db_index = False, null = True, blank = True];
+ optional string service_specific_attribute = 10 [db_index = False, null = True, blank = True, varchar = True];
required string connect_method = 11 [default = "na", choices = "(('public', 'Public'), ('private', 'Private'), ('private-unidirectional', 'Private Unidirectional'), ('na', 'Not Applicable'))", max_length = 30, blank = False, null = False, db_index = False];
}
@@ -416,7 +451,7 @@
message TenantRoot (XOSBase,AttributeMixin) {
required string kind = 1 [default = "generic", max_length = 30, content_type = "stripped", blank = False, null = False, db_index = False];
optional string name = 2 [max_length = 255, content_type = "stripped", blank = True, help_text = "name", null = True, db_index = False];
- optional string service_specific_attribute = 3 [db_index = False, null = True, blank = True];
+ optional string service_specific_attribute = 3 [db_index = False, null = True, blank = True, varchar = True];
optional string service_specific_id = 4 [db_index = False, max_length = 30, null = True, content_type = "stripped", blank = True];
}
diff --git a/xos/genx/reference/modeldefs.yaml b/xos/genx/reference/modeldefs.yaml
new file mode 100644
index 0000000..855b400
--- /dev/null
+++ b/xos/genx/reference/modeldefs.yaml
@@ -0,0 +1,5049 @@
+items:
+- app: core
+ fields:
+ - hint: ''
+ name: addresses
+ type: text
+ validators: []
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: cidr
+ type: string
+ validators:
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: gateway_ip
+ type: string
+ validators:
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: gateway_mac
+ type: string
+ validators:
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: inuse
+ type: text
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: service_id
+ relation: {model: Service, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: AddressPool
+ relations:
+ - {model: Service, type: manytoone}
+- app: core
+ fields:
+ - hint: Password of theadmin user at this controller
+ name: admin_password
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: Name of the tenant the admin user belongs to
+ name: admin_tenant
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: Username of an admin user at this controller
+ name: admin_user
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: Auth url for the compute controller
+ name: auth_url
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: Type of compute controller, e.g. EC2, OpenStack, or OpenStack version
+ name: backend_type
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: deployment_id
+ relation: {model: Deployment, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: Name of the domain this controller belongs to
+ name: domain
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: Name of the Controller
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: IP address of rabbitmq server at this controller
+ name: rabbit_host
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: Password of rabbitmq server at this controller
+ name: rabbit_password
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: Username of rabbitmq server at this controller
+ name: rabbit_user
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: Controller version
+ name: version
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: Controller
+ relations:
+ - {model: Deployment, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: controller_id
+ relation: {model: Controller, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: dashboardView_id
+ relation: {model: DashboardView, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enabled
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: URL of Dashboard
+ name: url
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ControllerDashboardView
+ relations:
+ - {model: Controller, type: manytoone}
+ - {model: DashboardView, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: controller_id
+ relation: {model: Controller, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: Glance image id
+ name: glance_image_id
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: image_id
+ relation: {model: Image, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ControllerImages
+ relations:
+ - {model: Image, type: manytoone}
+ - {model: Controller, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: controller_id
+ relation: {model: Controller, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: gateway
+ type: string
+ validators:
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: Neutron network
+ name: net_id
+ type: string
+ validators:
+ - {int_value: '256', name: maxlength}
+ - hint: ''
+ name: network_id
+ relation: {model: Network, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: Neutron router id
+ name: router_id
+ type: string
+ validators:
+ - {int_value: '256', name: maxlength}
+ - hint: ''
+ name: segmentation_id
+ type: string
+ validators:
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: start_ip
+ type: string
+ validators:
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: stop_ip
+ type: string
+ validators:
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: subnet
+ type: string
+ validators:
+ - {int_value: '32', name: maxlength}
+ - hint: Neutron subnet id
+ name: subnet_id
+ type: string
+ validators:
+ - {int_value: '256', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ControllerNetwork
+ relations:
+ - {model: Network, type: manytoone}
+ - {model: Controller, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: role
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ControllerRole
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: controller_id
+ relation: {model: Controller, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: site_id
+ relation: {model: Site, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: Keystone tenant id
+ name: tenant_id
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ControllerSite
+ relations:
+ - {model: Site, type: manytoone}
+ - {model: Controller, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: controller_id
+ relation: {model: Controller, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: Keystone id
+ name: role_id
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: site_privilege_id
+ relation: {model: SitePrivilege, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ControllerSitePrivilege
+ relations:
+ - {model: Controller, type: manytoone}
+ - {model: SitePrivilege, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: controller_id
+ relation: {model: Controller, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: slice_id
+ relation: {model: Slice, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: Keystone tenant id
+ name: tenant_id
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ControllerSlice
+ relations:
+ - {model: Controller, type: manytoone}
+ - {model: Slice, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: controller_id
+ relation: {model: Controller, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: Keystone id
+ name: role_id
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: slice_privilege_id
+ relation: {model: SlicePrivilege, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ControllerSlicePrivilege
+ relations:
+ - {model: Controller, type: manytoone}
+ - {model: SlicePrivilege, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: controller_id
+ relation: {model: Controller, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: Keystone user id
+ name: kuser_id
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: user_id
+ relation: {model: User, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ControllerUser
+ relations:
+ - {model: User, type: manytoone}
+ - {model: Controller, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enabled
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: Icon for Dashboard
+ name: icon
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: Icon for active Dashboard
+ name: icon_active
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: Name of the View
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: URL of Dashboard
+ name: url
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: DashboardView
+ relations: []
+- app: core
+ fields:
+ - hint: Access control list that specifies which sites/users may use nodes in this deployment
+ name: accessControl
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: Name of the Deployment
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: Deployment
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: deployment_id
+ relation: {model: Deployment, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: role_id
+ relation: {model: DeploymentRole, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: user_id
+ relation: {model: User, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: DeploymentPrivilege
+ relations:
+ - {model: User, type: manytoone}
+ - {model: Deployment, type: manytoone}
+ - {model: DeploymentRole, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: role
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: DeploymentRole
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: Name of the synchronizer
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: Diag
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: description
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: flavor string used to configure deployments
+ name: flavor
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: name of this flavor, as displayed to users
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: Flavor
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: container_format
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '256', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: disk_format
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '256', name: maxlength}
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: kind
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '256', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: Path to image on local disk
+ name: path
+ type: string
+ validators:
+ - {int_value: '256', name: maxlength}
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: For Docker Images, tag of image
+ name: tag
+ type: string
+ validators:
+ - {int_value: '256', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: Image
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: deployment_id
+ relation: {model: Deployment, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: image_id
+ relation: {model: Image, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ImageDeployments
+ relations:
+ - {model: Image, type: manytoone}
+ - {model: Deployment, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: creator_id
+ relation: {model: User, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: deployment_id
+ relation: {model: Deployment, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: Flavor of this instance
+ name: flavor_id
+ relation: {model: Flavor, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: image_id
+ relation: {model: Image, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: Nova instance id
+ name: instance_id
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: OpenStack generated name
+ name: instance_name
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: Nova instance uuid
+ name: instance_uuid
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: Instance ip address
+ name: ip
+ type: string
+ validators:
+ - {int_value: '39', name: maxlength}
+ - {bool_value: true, name: ip}
+ - hint: ''
+ name: isolation
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: Instance name
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: node_id
+ relation: {model: Node, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: Number of cores for instance
+ name: numberCores
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: Parent Instance for containers nested inside of VMs
+ name: parent_id
+ relation: {model: Instance, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: slice_id
+ relation: {model: Slice, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: user_data passed to instance during creation
+ name: userData
+ type: text
+ validators: []
+ - hint: Comma-separated list of directories to expose to parent context
+ name: volumes
+ type: text
+ validators: []
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: Instance
+ relations:
+ - {model: Image, type: manytoone}
+ - {model: User, type: manytoone}
+ - {model: Slice, type: manytoone}
+ - {model: Deployment, type: manytoone}
+ - {model: Node, type: manytoone}
+ - {model: Flavor, type: manytoone}
+ - {model: Instance, type: manytoone}
+- app: core
+ fields:
+ - hint: This network can be autoconnected to the slice that owns it
+ name: autoconnect
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: end_ip
+ type: string
+ validators:
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: labels
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: Slice that owns control of this Network
+ name: owner_id
+ relation: {model: Slice, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: permit_all_slices
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: ports
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: start_ip
+ type: string
+ validators:
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: subnet
+ type: string
+ validators:
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: template_id
+ relation: {model: NetworkTemplate, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: Network
+ relations:
+ - {model: NetworkTemplate, type: manytoone}
+ - {model: Slice, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: Content type id linked to this network parameter
+ name: content_type
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: Object linked to this NetworkParameter
+ name: object_id
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: The type of the parameter
+ name: parameter_id
+ relation: {model: NetworkParameterType, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: The value of this parameter
+ name: value
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: NetworkParameter
+ relations:
+ - {model: NetworkParameterType, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: description
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: The name of this parameter
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '128', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: NetworkParameterType
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: network_id
+ relation: {model: Network, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: slice_id
+ relation: {model: Slice, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: NetworkSlice
+ relations:
+ - {model: Network, type: manytoone}
+ - {model: Slice, type: manytoone}
+- app: core
+ fields:
+ - hint: Advertise this network as a means for other slices to contact this slice
+ name: access
+ type: string
+ validators:
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: controller_kind
+ type: string
+ validators:
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: description
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '32', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: Quantum network
+ name: shared_network_id
+ type: string
+ validators:
+ - {int_value: '256', name: maxlength}
+ - hint: ''
+ name: shared_network_name
+ type: string
+ validators:
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: topology_kind
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: translation
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: visibility
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: vtn_kind
+ type: string
+ validators:
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: NetworkTemplate
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: Name of the Node
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: site_deployment_id
+ relation: {model: SiteDeployment, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: Node
+ relations:
+ - {model: SiteDeployment, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: label name
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: NodeLabel
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: instance_id
+ relation: {model: Instance, type: manytoone}
+ type: number
+ validators: []
+ - hint: Instance ip address
+ name: ip
+ type: string
+ validators:
+ - {int_value: '39', name: maxlength}
+ - {bool_value: true, name: ip}
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: MAC address associated with this port
+ name: mac
+ type: string
+ validators:
+ - {int_value: '256', name: maxlength}
+ - hint: ''
+ name: network_id
+ relation: {model: Network, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: Neutron port id
+ name: port_id
+ type: string
+ validators:
+ - {int_value: '256', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ - hint: ''
+ name: xos_created
+ type: boolean
+ validators: []
+ name: Port
+ relations:
+ - {model: Network, type: manytoone}
+ - {model: Instance, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: description
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '120', name: maxlength}
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: role
+ type: string
+ validators:
+ - {int_value: '80', name: maxlength}
+ - hint: ''
+ name: role_type
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '80', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: Role
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: Description of Service
+ name: description
+ type: text
+ validators:
+ - {int_value: '254', name: maxlength}
+ - hint: ''
+ name: enabled
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: icon_url
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: Kind of service
+ name: kind
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: Service Name
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: private_key_fn
+ type: string
+ validators:
+ - {int_value: '4096', name: maxlength}
+ - hint: Public key string
+ name: public_key
+ type: text
+ validators:
+ - {int_value: '4096', name: maxlength}
+ - hint: ''
+ name: published
+ type: boolean
+ validators: []
+ - hint: ''
+ name: service_specific_attribute
+ type: text
+ validators: []
+ - hint: ''
+ name: service_specific_id
+ type: string
+ validators:
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: Version of Service Definition
+ name: versionNumber
+ type: string
+ validators:
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: view_url
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: Service
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: Attribute Name
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '128', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: The Service this attribute is associated with
+ name: service_id
+ relation: {model: Service, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: Attribute Value
+ name: value
+ type: text
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ServiceAttribute
+ relations:
+ - {model: Service, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: connect_method
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: kind
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: name
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: provider_service_id
+ relation: {model: Service, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: service_specific_attribute
+ type: text
+ validators: []
+ - hint: ''
+ name: service_specific_id
+ type: string
+ validators:
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: subscriber_network_id
+ relation: {model: Network, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: subscriber_root_id
+ relation: {model: TenantRoot, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: subscriber_service_id
+ relation: {model: Service, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: subscriber_tenant_id
+ relation: {model: Tenant, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: subscriber_user_id
+ relation: {model: User, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ServiceDependency
+ relations:
+ - {model: Service, type: manytoone}
+ - {model: Tenant, type: manytoone}
+ - {model: User, type: manytoone}
+ - {model: TenantRoot, type: manytoone}
+ - {model: Network, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: Monitoring Agent Name
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '128', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: The Service this attribute is associated with
+ name: service_id
+ relation: {model: Service, type: manytoone}
+ type: number
+ validators: []
+ - hint: Monitoring collector URI to be used by agents to publish the data
+ name: target_uri
+ type: text
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ServiceMonitoringAgentInfo
+ relations:
+ - {model: Service, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: role_id
+ relation: {model: ServiceRole, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: service_id
+ relation: {model: Service, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: user_id
+ relation: {model: User, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ServicePrivilege
+ relations:
+ - {model: User, type: manytoone}
+ - {model: Service, type: manytoone}
+ - {model: ServiceRole, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: role
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: ServiceRole
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: abbreviated_name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '80', name: maxlength}
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: Status for this Site
+ name: enabled
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: Indicates whether or not the site host nodes
+ name: hosts_nodes
+ type: boolean
+ validators: []
+ - hint: Indicates whether or not the site manages user accounts
+ name: hosts_users
+ type: boolean
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: Indicates the visibility of this site to other members
+ name: is_public
+ type: boolean
+ validators: []
+ - hint: ''
+ name: latitude
+ type: string
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: Prefix for Slices associated with this Site
+ name: login_base
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '50', name: maxlength}
+ - hint: ''
+ name: longitude
+ type: string
+ validators: []
+ - hint: Name for this Site
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: Site's Home URL Page
+ name: site_url
+ type: string
+ validators:
+ - {bool_value: true, name: url}
+ - {int_value: '512', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: Site
+ relations: []
+- app: core
+ fields:
+ - hint: OpenStack availability zone
+ name: availability_zone
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: controller_id
+ relation: {model: Controller, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: deployment_id
+ relation: {model: Deployment, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: site_id
+ relation: {model: Site, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: SiteDeployment
+ relations:
+ - {model: Site, type: manytoone}
+ - {model: Deployment, type: manytoone}
+ - {model: Controller, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: role_id
+ relation: {model: SiteRole, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: site_id
+ relation: {model: Site, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: user_id
+ relation: {model: User, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: SitePrivilege
+ relations:
+ - {model: User, type: manytoone}
+ - {model: Site, type: manytoone}
+ - {model: SiteRole, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: role
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: SiteRole
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: creator_id
+ relation: {model: User, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: default_flavor_id
+ relation: {model: Flavor, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: default_image_id
+ relation: {model: Image, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: default_isolation
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: default_node_id
+ relation: {model: Node, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: High level description of the slice and expected activities
+ name: description
+ type: text
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: Status for this Slice
+ name: enabled
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: exposed_ports
+ type: string
+ validators:
+ - {int_value: '256', name: maxlength}
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: max_instances
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: mount_data_sets
+ type: string
+ validators:
+ - {int_value: '256', name: maxlength}
+ - hint: The Name of the Slice
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '80', name: maxlength}
+ - hint: ''
+ name: network
+ type: string
+ validators:
+ - {int_value: '256', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: service_id
+ relation: {model: Service, type: manytoone}
+ type: number
+ validators: []
+ - hint: The Site this Slice belongs to
+ name: site_id
+ relation: {model: Site, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: slice_url
+ type: string
+ validators:
+ - {bool_value: true, name: url}
+ - {int_value: '512', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: Slice
+ relations:
+ - {model: Site, type: manytoone}
+ - {model: Service, type: manytoone}
+ - {model: User, type: manytoone}
+ - {model: Flavor, type: manytoone}
+ - {model: Image, type: manytoone}
+ - {model: Node, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: role_id
+ relation: {model: SliceRole, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: slice_id
+ relation: {model: Slice, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: user_id
+ relation: {model: User, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: SlicePrivilege
+ relations:
+ - {model: User, type: manytoone}
+ - {model: Slice, type: manytoone}
+ - {model: SliceRole, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: role
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: SliceRole
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: Content type id linked to this tag
+ name: content_type
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: The name of this tag
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '128', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: Object linked to this tag
+ name: object_id
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: The Service this Tag is associated with
+ name: service_id
+ relation: {model: Service, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: The value of this tag
+ name: value
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: Tag
+ relations:
+ - {model: Service, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: connect_method
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: kind
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: name
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: provider_service_id
+ relation: {model: Service, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: service_specific_attribute
+ type: text
+ validators: []
+ - hint: ''
+ name: service_specific_id
+ type: string
+ validators:
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: subscriber_network_id
+ relation: {model: Network, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: subscriber_root_id
+ relation: {model: TenantRoot, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: subscriber_service_id
+ relation: {model: Service, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: subscriber_tenant_id
+ relation: {model: Tenant, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: subscriber_user_id
+ relation: {model: User, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: Tenant
+ relations:
+ - {model: Service, type: manytoone}
+ - {model: Tenant, type: manytoone}
+ - {model: User, type: manytoone}
+ - {model: TenantRoot, type: manytoone}
+ - {model: Network, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: Attribute Name
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '128', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: The Tenant this attribute is associated with
+ name: tenant_id
+ relation: {model: Tenant, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: Attribute Value
+ name: value
+ type: text
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: TenantAttribute
+ relations:
+ - {model: Tenant, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: role_id
+ relation: {model: TenantRole, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: tenant_id
+ relation: {model: Tenant, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: user_id
+ relation: {model: User, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: TenantPrivilege
+ relations:
+ - {model: User, type: manytoone}
+ - {model: Tenant, type: manytoone}
+ - {model: TenantRole, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: role
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: TenantRole
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: kind
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: name
+ name: name
+ type: string
+ validators:
+ - {int_value: '255', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: service_specific_attribute
+ type: text
+ validators: []
+ - hint: ''
+ name: service_specific_id
+ type: string
+ validators:
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: TenantRoot
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: role_id
+ relation: {model: TenantRootRole, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: tenant_root_id
+ relation: {model: TenantRoot, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: user_id
+ relation: {model: User, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: TenantRootPrivilege
+ relations:
+ - {model: User, type: manytoone}
+ - {model: TenantRoot, type: manytoone}
+ - {model: TenantRootRole, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: role
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: TenantRootRole
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: connect_method
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: Creator of this Tenant
+ name: creator_id
+ relation: {model: User, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: External host name
+ name: external_container
+ type: string
+ validators:
+ - {int_value: '30', name: maxlength}
+ - hint: External host name
+ name: external_hostname
+ type: string
+ validators:
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: Instance used by this Tenant
+ name: instance_id
+ relation: {model: Instance, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: kind
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: name
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: provider_service_id
+ relation: {model: Service, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: service_specific_attribute
+ type: text
+ validators: []
+ - hint: ''
+ name: service_specific_id
+ type: string
+ validators:
+ - {int_value: '30', name: maxlength}
+ - hint: ''
+ name: subscriber_network_id
+ relation: {model: Network, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: subscriber_root_id
+ relation: {model: TenantRoot, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: subscriber_service_id
+ relation: {model: Service, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: subscriber_tenant_id
+ relation: {model: Tenant, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: subscriber_user_id
+ relation: {model: User, type: manytoone}
+ type: number
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: TenantWithContainer
+ relations:
+ - {model: Service, type: manytoone}
+ - {model: Tenant, type: manytoone}
+ - {model: User, type: manytoone}
+ - {model: TenantRoot, type: manytoone}
+ - {model: Network, type: manytoone}
+ - {model: Instance, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: email
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '255', name: maxlength}
+ - {bool_value: true, name: email}
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: person's given name
+ name: firstname
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: is_active
+ type: boolean
+ validators: []
+ - hint: ''
+ name: is_admin
+ type: boolean
+ validators: []
+ - hint: ''
+ name: is_appuser
+ type: boolean
+ validators: []
+ - hint: ''
+ name: is_readonly
+ type: boolean
+ validators: []
+ - hint: ''
+ name: is_registering
+ type: boolean
+ validators: []
+ - hint: ''
+ name: is_staff
+ type: boolean
+ validators: []
+ - hint: person's surname
+ name: lastname
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: send this user to a specific page on login
+ name: login_page
+ type: string
+ validators:
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: phone number contact
+ name: phone
+ type: string
+ validators:
+ - {int_value: '100', name: maxlength}
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: Public key string
+ name: public_key
+ type: text
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: Site this user will be homed too
+ name: site_id
+ relation: {model: Site, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: timezone
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '100', name: maxlength}
+ - hint: ''
+ name: updated
+ type: date
+ validators: []
+ - hint: ''
+ name: user_url
+ type: string
+ validators:
+ - {bool_value: true, name: url}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: username
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '255', name: maxlength}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: User
+ relations:
+ - {model: Site, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: dashboardView_id
+ relation: {model: DashboardView, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: order
+ type: number
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: user_id
+ relation: {model: User, type: manytoone}
+ type: number
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: UserDashboardView
+ relations:
+ - {model: User, type: manytoone}
+ - {model: DashboardView, type: manytoone}
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: Name of XOS
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: XOS
+ relations: []
+- app: core
+ fields:
+ - hint: ''
+ name: backend_need_delete
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_need_reap
+ type: boolean
+ validators: []
+ - hint: ''
+ name: backend_register
+ type: string
+ validators:
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: backend_status
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: created
+ type: date
+ validators: []
+ - hint: ''
+ name: deleted
+ type: boolean
+ validators: []
+ - hint: ''
+ name: enacted
+ type: date
+ validators: []
+ - hint: List of comma separated file composing the view
+ name: files
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '1024', name: maxlength}
+ - hint: ''
+ name: id
+ type: number
+ validators: []
+ - hint: ''
+ name: lazy_blocked
+ type: boolean
+ validators: []
+ - hint: Name of the GUI Extensions
+ name: name
+ type: string
+ validators:
+ - {bool_value: true, name: required}
+ - {int_value: '200', name: maxlength}
+ - hint: ''
+ name: no_policy
+ type: boolean
+ validators: []
+ - hint: ''
+ name: no_sync
+ type: boolean
+ validators: []
+ - hint: ''
+ name: policed
+ type: date
+ validators: []
+ - hint: ''
+ name: updated
+ type: date
+ validators:
+ - {bool_value: true, name: required}
+ - hint: ''
+ name: write_protect
+ type: boolean
+ validators: []
+ name: XOSGuiExtension
+ relations: []
diff --git a/xos/genx/targets/django-split.xtarget b/xos/genx/targets/django-split.xtarget
index af3a8cc..4053d72 100644
--- a/xos/genx/targets/django-split.xtarget
+++ b/xos/genx/targets/django-split.xtarget
@@ -1,5 +1,5 @@
-{% for m in proto.messages %}
+{% for m in proto.messages %}{% if not m.options.skip_django -%}
{% if file_exists(xproto_base_name(m.name)|lower+'_header.py') -%}from {{xproto_base_name(m.name)|lower }}_header import *{%- else -%}from header import *{% endif %}
{% if file_exists(xproto_base_name(m.name)|lower+'_top.py') -%}{{ include_file(xproto_base_name(m.name)|lower+'_top.py') }} {% endif %}
@@ -35,4 +35,4 @@
{% if file_exists(xproto_base_name(m.name)|lower+'_bottom.py') -%}{{ include_file(xproto_base_name(m.name)|lower+'_bottom.py') }}{% endif %}
+++ {{m.name|lower}}.py
-{% endfor %}
+{% endif %}{% endfor %}
diff --git a/xos/genx/targets/init.xtarget b/xos/genx/targets/init.xtarget
index 78d0bdb..235a657 100644
--- a/xos/genx/targets/init.xtarget
+++ b/xos/genx/targets/init.xtarget
@@ -9,7 +9,7 @@
from .user import UserDashboardView
{% for m in proto.messages -%}
-{% if not m.options.skip -%}
+{% if not m.options.skip_init -%}
from .{{ m.name | lower }} import {{ m.name }}
{% endif -%}
{% endfor -%}
diff --git a/xos/genx/targets/modeldefs.xtarget b/xos/genx/targets/modeldefs.xtarget
new file mode 100644
index 0000000..b426b79
--- /dev/null
+++ b/xos/genx/targets/modeldefs.xtarget
@@ -0,0 +1,37 @@
+items:
+{%- for m in proto.messages | sort(attribute='name') %}
+{%- if m.name != 'XOSBase' %}
+- app: {{ xproto_unquote(xproto_first_non_empty([m.options.app_name, context.app_name, options.app_name])) }}
+ fields:
+ {%- set id_field = {'type':'int32', 'name':'id', 'options':{}} %}
+ {% for f in (xproto_base_fields(m, proto.message_table) + m.fields + [id_field]) | sort(attribute='name') -%}
+ {% if not f.link or f.options.link_type != 'manytomany' -%}
+ - hint: {% if f.options.help_text %}{{ xproto_unquote(f.options.help_text) }}{% else %}''{% endif %}
+ {% if not f.link -%}
+ name: {{ f.name }}
+ {%- else -%}
+ name: {{ f.name }}_id
+ relation: {model: {{ f.options.model }}, type: {{ f.options.link_type }}}
+ {% endif %}
+ type: {{ xproto_type_to_ui_type(f) }}
+ {% set validators = xproto_validators(f) -%}
+ {% if validators -%}
+ validators:
+ {% for v in validators | sort(attribute='name',reverse=True) -%}
+ - {{ v | yaml }}
+ {% endfor %}
+ {% else -%}
+ validators: []
+ {% endif %}
+ {% endif -%}
+ {% endfor %}
+ name: {{ m.name }}
+ {%- set goodlinks = xproto_links_to_modeldef_relations( xproto_base_links(m, proto.message_table) + m.links ) %}
+ {% if goodlinks %}
+ relations:
+ {{ goodlinks | join('\n') | indent(width=2)}}
+ {%- else %}
+ relations: []
+ {%- endif %}
+{%- endif %}
+{% endfor -%}
diff --git a/xos/genx/tool/generator.py b/xos/genx/tool/generator.py
index 2f4fc17..e6a6f2f 100755
--- a/xos/genx/tool/generator.py
+++ b/xos/genx/tool/generator.py
@@ -9,8 +9,7 @@
from proto2xproto import Proto2XProto
import lib
-
-
+import yaml
loader = jinja2.PackageLoader(__name__, 'templates')
env = jinja2.Environment(loader=loader)
@@ -61,6 +60,8 @@
os_template_env = jinja2.Environment(loader=os_template_loader)
os_template_env.globals['include_file'] = self.include_file() # Generates a function
os_template_env.globals['file_exists'] = self.file_exists() # Generates a function
+ os_template_env.filters['yaml'] = yaml.dump
+
for f in dir(lib):
if f.startswith('xproto'):
diff --git a/xos/genx/tool/lib.py b/xos/genx/tool/lib.py
index 54a2b08..82de5b1 100644
--- a/xos/genx/tool/lib.py
+++ b/xos/genx/tool/lib.py
@@ -34,6 +34,21 @@
s = s[1:-1]
return s
+def xproto_links_to_modeldef_relations(llst):
+ outlist = []
+ seen = []
+ for l in llst:
+ try:
+ t = l['link_type']
+ except KeyError, e:
+ raise e
+
+ if l['peer'] not in seen and t!='manytomany':
+ outlist.append('- {model: %s, type: %s}\n'%(l['peer'], l['link_type']))
+ seen.append(l['peer'])
+
+ return outlist
+
def django_content_type_string(xptags):
# Check possibility of KeyError in caller
content_type = xptags['content_type']
@@ -144,7 +159,7 @@
return ', '.join(lst)
def map_xproto_to_django(f):
- allowed_keys=['help_text','default','max_length','modifier','blank','choices','db_index','null','editable','on_delete','verbose_name', 'auto_now_add']
+ allowed_keys=['help_text','default','max_length','modifier','blank','choices','db_index','null','editable','on_delete','verbose_name', 'auto_now_add']
m = {'modifier':{'optional':True, 'required':False, '_target':'null'}}
out = {}
@@ -211,3 +226,83 @@
fields.extend(model_fields)
return fields
+
+def xproto_base_links(m, table):
+ links = []
+
+ for b in m['bases']:
+ if b in table:
+ base_links = xproto_base_links(table[b], table)
+
+ model_links = table[b]['links']
+ links.extend(base_links)
+ links.extend(model_links)
+ return links
+
+
+def xproto_validators(f):
+ # To be cleaned up when we formalize validation in xproto
+ validators = []
+
+ # bound-based validators
+ bound_validators = [('max_length','maxlength'), ('min', 'min'), ('max', 'max')]
+
+ for v0, v1 in bound_validators:
+ try:
+ validators.append({'name':v1, 'int_value':f['options'][v0]})
+ except KeyError:
+ pass
+
+ # validators based on content_type
+ content_type_validators = ['ip', 'url', 'email']
+
+ for v in content_type_validators:
+ #if f['name']=='ip': pdb.set_trace()
+ try:
+ val = unquote(f['options']['content_type'])==v
+ if not val:
+ raise KeyError
+
+ validators.append({'name':v, 'bool_value': True})
+ except KeyError:
+ pass
+
+ # required validator
+ try:
+ required = f['options']['blank']=='False' and f['options']['null']=='False'
+ if required:
+ validators.append({'name':'required', 'bool_value':required})
+ except KeyError:
+ pass
+
+ return validators
+
+def xproto_string_type(xptags):
+ try:
+ max_length = eval(xptags['max_length'])
+ except:
+ max_length = 1024
+
+ if ('varchar' not in xptags):
+ return 'string'
+ else:
+ return 'text'
+
+def xproto_type_to_ui_type(f):
+ try:
+ content_type = f['options']['content_type']
+ content_type = eval(content_type)
+ except:
+ content_type = None
+ pass
+
+ if content_type == 'date':
+ return 'date'
+ elif f['type'] == 'bool':
+ return 'boolean'
+ elif f['type'] == 'string':
+ return xproto_string_type(f['options'])
+ elif f['type'] in ['int','uint32','int32'] or 'link' in f:
+ return 'number'
+ elif f['type'] in ['double','float']:
+ return 'string'
diff --git a/xos/genx/tool/tests/proto_generator_test.py b/xos/genx/tool/tests/proto_generator_test.py
deleted file mode 100644
index 151edcc..0000000
--- a/xos/genx/tool/tests/proto_generator_test.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from xproto_test_base import *
-
-# Generate Protobuf from Xproto and then parse the resulting Protobuf
-class XProtoProtobufGeneratorTest(XProtoTest):
- def test_proto_generator(self):
- xproto = \
-"""
-message VRouterPort (XOSBase){
- optional string name = 1 [help_text = "port friendly name", max_length = 20, null = True, db_index = False, blank = True];
- required string openflow_id = 2 [help_text = "port identifier in ONOS", max_length = 21, null = False, db_index = False, blank = False];
- required manytoone vrouter_device->VRouterDevice:ports = 3 [db_index = True, null = False, blank = False];
- required manytoone vrouter_service->VRouterService:device_ports = 4 [db_index = True, null = False, blank = False];
-}
-"""
- target = \
-"""
-{% for m in proto.messages %}
-message {{ m.name }} {
- option bases = "{{ m.bases | join(",") }}";
- {%- for f in m.fields %}
- {{ f.modifier }} {{f.type}} {{f.name}} = {{ f.id }}{% if f.options %} [{% for k,v in f.options.iteritems() %} {{ k }} = "{{ xproto_unquote(v)}}"{% if not loop.last %},{% endif %} {% endfor %}]{% endif %};
- {%- endfor %}
-}
-{% endfor %}
-"""
-
- self.generate(xproto = xproto, target = target)
- self.generate(xproto = self.get_output(), target = "{{ proto }}")
- output = self.get_output()
- self.assertIn("VRouterService", output)
-
-if __name__ == '__main__':
- unittest.main()
-
-
diff --git a/xos/genx/tool/tests/translator_test.py b/xos/genx/tool/tests/translator_test.py
new file mode 100644
index 0000000..e88e59c
--- /dev/null
+++ b/xos/genx/tool/tests/translator_test.py
@@ -0,0 +1,162 @@
+from xproto_test_base import *
+import yaml
+
+# Generate other formats from xproto
+class XProtoTranslatorTest(XProtoTest):
+ def test_proto_generator(self):
+ xproto = \
+"""
+message VRouterPort (XOSBase){
+ optional string name = 1 [help_text = "port friendly name", max_length = 20, null = True, db_index = False, blank = True];
+ required string openflow_id = 2 [help_text = "port identifier in ONOS", max_length = 21, null = False, db_index = False, blank = False];
+ required manytoone vrouter_device->VRouterDevice:ports = 3 [db_index = True, null = False, blank = False];
+ required manytoone vrouter_service->VRouterService:device_ports = 4 [db_index = True, null = False, blank = False];
+}
+"""
+ target = \
+"""
+{% for m in proto.messages %}
+message {{ m.name }} {
+ option bases = "{{ m.bases | join(",") }}";
+ {%- for f in m.fields %}
+ {{ f.modifier }} {{f.type}} {{f.name}} = {{ f.id }}{% if f.options %} [{% for k,v in f.options.iteritems() %} {{ k }} = "{{ xproto_unquote(v)}}"{% if not loop.last %},{% endif %} {% endfor %}]{% endif %};
+ {%- endfor %}
+}
+{% endfor %}
+"""
+
+ self.generate(xproto = xproto, target = target)
+ self.generate(xproto = self.get_output(), target = "{{ proto }}")
+ output = self.get_output()
+ self.assertIn("VRouterService", output)
+
+ def test_yaml_generator(self):
+ xproto = \
+"""
+option app_name = "test";
+
+message Port (PlCoreBase,ParameterMixin){
+ required manytoone network->Network:links = 1 [db_index = True, null = False, blank = False];
+ optional manytoone instance->Instance:ports = 2 [db_index = True, null = True, blank = True];
+ optional string ip = 3 [max_length = 39, content_type = "ip", blank = True, help_text = "Instance ip address", null = True, db_index = False];
+ optional string port_id = 4 [help_text = "Neutron port id", max_length = 256, null = True, db_index = False, blank = True];
+ optional string mac = 5 [help_text = "MAC address associated with this port", max_length = 256, null = True, db_index = False, blank = True];
+ required bool xos_created = 6 [default = False, null = False, db_index = False, blank = True];
+}
+
+message Instance (PlCoreBase){
+ optional string instance_id = 1 [max_length = 200, content_type = "stripped", blank = True, help_text = "Nova instance id", null = True, db_index = False];
+ optional string instance_uuid = 2 [max_length = 200, content_type = "stripped", blank = True, help_text = "Nova instance uuid", null = True, db_index = False];
+ required string name = 3 [max_length = 200, content_type = "stripped", blank = False, help_text = "Instance name", null = False, db_index = False];
+ optional string instance_name = 4 [max_length = 200, content_type = "stripped", blank = True, help_text = "OpenStack generated name", null = True, db_index = False];
+ optional string ip = 5 [max_length = 39, content_type = "ip", blank = True, help_text = "Instance ip address", null = True, db_index = False];
+ required manytoone image->Image:instances = 6 [db_index = True, null = False, blank = False];
+ optional manytoone creator->User:instances = 7 [db_index = True, null = True, blank = True];
+ required manytoone slice->Slice:instances = 8 [db_index = True, null = False, blank = False];
+ required manytoone deployment->Deployment:instance_deployment = 9 [db_index = True, null = False, blank = False];
+ required manytoone node->Node:instances = 10 [db_index = True, null = False, blank = False];
+ required int32 numberCores = 11 [help_text = "Number of cores for instance", default = 0, null = False, db_index = False, blank = False];
+ required manytoone flavor->Flavor:instance = 12 [help_text = "Flavor of this instance", default = "get_default_flavor()", null = False, db_index = True, blank = False];
+ optional string userData = 13 [help_text = "user_data passed to instance during creation", null = True, db_index = False, blank = True];
+ required string isolation = 14 [default = "vm", choices = "(('vm', 'Virtual Machine'), ('container', 'Container'), ('container_vm', 'Container In VM'))", max_length = 30, blank = False, null = False, db_index = False];
+ optional string volumes = 15 [help_text = "Comma-separated list of directories to expose to parent context", null = True, db_index = False, blank = True];
+ optional manytoone parent->Instance:instance = 16 [help_text = "Parent Instance for containers nested inside of VMs", null = True, db_index = True, blank = True];
+ required manytomany tags->Tag = 17 [db_index = False, null = False, blank = True];
+}
+
+message Network (PlCoreBase,ParameterMixin) {
+ required string name = 1 [db_index = False, max_length = 32, null = False, blank = False];
+ required manytoone template->NetworkTemplate:network = 2 [db_index = True, null = False, blank = False];
+ required string subnet = 3 [db_index = False, max_length = 32, null = False, blank = True];
+ required string start_ip = 4 [db_index = False, max_length = 32, null = False, blank = True];
+ required string end_ip = 5 [db_index = False, max_length = 32, null = False, blank = True];
+ optional string ports = 6 [db_index = False, max_length = 1024, null = True, blank = True];
+ optional string labels = 7 [db_index = False, max_length = 1024, null = True, blank = True];
+ required manytoone owner->Slice:ownedNetworks = 8 [help_text = "Slice that owns control of this Network", null = False, db_index = True, blank = False];
+ required int32 guaranteed_bandwidth = 9 [default = 0, null = False, db_index = False, blank = False];
+ required bool permit_all_slices = 10 [default = False, null = False, db_index = False, blank = True];
+ optional string topology_parameters = 11 [db_index = False, null = True, blank = True];
+ optional string controller_url = 12 [db_index = False, max_length = 1024, null = True, blank = True];
+ optional string controller_parameters = 13 [db_index = False, null = True, blank = True];
+ optional string network_id = 14 [help_text = "Quantum network", max_length = 256, null = True, db_index = False, blank = True];
+ optional string router_id = 15 [help_text = "Quantum router id", max_length = 256, null = True, db_index = False, blank = True];
+ optional string subnet_id = 16 [help_text = "Quantum subnet id", max_length = 256, null = True, db_index = False, blank = True];
+ required bool autoconnect = 17 [help_text = "This network can be autoconnected to the slice that owns it", default = True, null = False, db_index = False, blank = True];
+ required manytomany permitted_slices->Slice/Network_permitted_slices:availableNetworks = 18 [db_index = False, null = False, blank = True];
+ required manytomany slices->Slice/NetworkSlice:networks = 19 [db_index = False, null = False, blank = True];
+ required manytomany instances->Instance/Port:networks = 20 [db_index = False, null = False, blank = True];
+}
+
+message Slice (PlCoreBase){
+ required string name = 1 [max_length = 80, content_type = "stripped", blank = False, help_text = "The Name of the Slice", null = False, db_index = False];
+ required bool enabled = 2 [help_text = "Status for this Slice", default = True, null = False, db_index = False, blank = True];
+ required bool omf_friendly = 3 [default = False, null = False, db_index = False, blank = True];
+ required string description = 4 [help_text = "High level description of the slice and expected activities", max_length = 1024, null = False, db_index = False, blank = True];
+ required string slice_url = 5 [db_index = False, max_length = 512, null = False, content_type = "url", blank = True];
+ required manytoone site->Site:slices = 6 [help_text = "The Site this Slice belongs to", null = False, db_index = True, blank = False];
+ required int32 max_instances = 7 [default = 10, null = False, db_index = False, blank = False];
+ optional manytoone service->Service:slices = 8 [db_index = True, null = True, blank = True];
+ optional string network = 9 [blank = True, max_length = 256, null = True, db_index = False, choices = "((None, 'Default'), ('host', 'Host'), ('bridged', 'Bridged'), ('noauto', 'No Automatic Networks'))"];
+ optional string exposed_ports = 10 [db_index = False, max_length = 256, null = True, blank = True];
+ optional manytoone serviceClass->ServiceClass:slices = 11 [db_index = True, null = True, blank = True];
+ optional manytoone creator->User:slices = 12 [db_index = True, null = True, blank = True];
+ optional manytoone default_flavor->Flavor:slices = 13 [db_index = True, null = True, blank = True];
+ optional manytoone default_image->Image:slices = 14 [db_index = True, null = True, blank = True];
+ optional manytoone default_node->Node:slices = 15 [db_index = True, null = True, blank = True];
+ optional string mount_data_sets = 16 [default = "GenBank", max_length = 256, content_type = "stripped", blank = True, null = True, db_index = False];
+ required string default_isolation = 17 [default = "vm", choices = "(('vm', 'Virtual Machine'), ('container', 'Container'), ('container_vm', 'Container In VM'))", max_length = 30, blank = False, null = False, db_index = False];
+ required manytomany tags->Tag = 18 [db_index = False, null = False, blank = True];
+}
+"""
+
+ # Update this to the contents of modeldefs.xtarget
+ target = \
+"""
+items:
+{%- for m in proto.messages | sort(attribute='name') %}
+{%- if m.name != 'XOSBase' %}
+- app: {{ xproto_unquote(xproto_first_non_empty([m.options.app_name, context.app_name, options.app_name])) }}
+ fields:
+ {%- set id_field = {'type':'int32', 'name':'id', 'options':{}} %}
+ {% for f in (xproto_base_fields(m, proto.message_table) + m.fields + [id_field]) | sort(attribute='name') -%}
+ {% if not f.link or f.options.link_type != 'manytomany' -%}
+ - hint: {% if f.options.help_text %}{{ xproto_unquote(f.options.help_text) }}{% else %}''{% endif %}
+ {% if not f.link -%}
+ name: {{ f.name }}
+ {%- else -%}
+ name: {{ f.name }}_id
+ relation: {model: {{ f.options.model }}, type: {{ f.options.link_type }}}
+ {% endif %}
+ type: {{ xproto_type_to_ui_type(f) }}
+ {% set validators = xproto_validators(f) -%}
+ {% if validators -%}
+ validators:
+ {% for v in validators | sort(attribute='name',reverse=True) -%}
+ - {{ v | yaml }}
+ {% endfor %}
+ {% else -%}
+ validators: []
+ {% endif %}
+ {% endif -%}
+ {% endfor %}
+ name: {{ m.name }}
+ {%- set goodlinks = xproto_links_to_modeldef_relations( xproto_base_links(m, proto.message_table) + m.links ) %}
+ {% if goodlinks %}
+ relations:
+ {{ goodlinks | join('\n') | indent(width=2)}}
+ {%- else %}
+ relations: []
+ {%- endif %}
+{%- endif %}
+{% endfor -%}
+"""
+
+ self.generate(xproto = xproto, target = target)
+ output = self.get_output()
+ yaml_ir = yaml.load(output)
+ self.assertEqual(len(yaml_ir['items']), 4)
+
+if __name__ == '__main__':
+ unittest.main()
+
+
diff --git a/xos/genx/tool/xos2jinja.py b/xos/genx/tool/xos2jinja.py
index 727c097..bd7edb6 100644
--- a/xos/genx/tool/xos2jinja.py
+++ b/xos/genx/tool/xos2jinja.py
@@ -142,7 +142,6 @@
except AttributeError:
s['dst_port'] = obj.dst_port
-
try:
s['through'] = obj.through.pval
except AttributeError:
@@ -231,8 +230,9 @@
for i in range(0,stack_num):
f = self.stack.pop()
if (f['_type']=='link'):
- f['options']={i:d[i] for d in [f['options'],last_field['options']] for i in d}
-
+ f['options']={i:d[i] for d in [f['options'], last_field['options']] for i in d}
+ assert(last_field == fields[0])
+ fields[0].setdefault('options', {})['link_type'] = f['link_type']
links.insert(0,f)
else:
fields.insert(0,f)