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)