+ return dict(self)
+
+
+class UserRecord(GeniRecord):
+
+ fields = {
+ 'email': Parameter(str, 'email'),
+ 'first_name': Parameter(str, 'First name'),
+ 'last_name': Parameter(str, 'Last name'),
+ 'phone': Parameter(str, 'Phone Number'),
+ 'key': Parameter(str, 'Public key'),
+ 'slice': Parameter([str], 'List of slices this user belongs to'),
+ }
+ fields.update(GeniRecord.fields)
+
+ internal_fields = {
+ 'roles': Parameter([str], 'List of roles'),
+ 'title': Parameter(str, 'Title'),
+ 'sites': Parameter([str], 'List of sites this user belongs to'),
+ 'enabled': Parameter(bool, 'Is this person enabled'),
+ }
+ internal_fields.update(GeniRecord.internal_fields)
+
+class SliceRecord(GeniRecord):
+ fields = {
+ 'name': Parameter(str, 'Slice name'),
+ 'url': Parameter(str, 'Slice url'),
+ 'expires': Parameter(int, 'Date and time this slice exipres'),
+ 'researcher': Parameter([str], 'List of users for this slice'),
+ 'description': Parameter([str], 'Description of this slice'),
+ }
+ fields.update(GeniRecord.fields)
+
+ internal_fields = {
+ 'site': Parameter(str, 'Site this slice belongs to'),
+ 'instantiation': Parameter(str, 'Slice instantiation'),
+ 'nodes': Parameter([str], 'List of nodes this slice is instantiated on'),
+ 'max_nodes': Parameter(int, 'Maximum number of nodes this slice is allowed on')
+ }
+ internal_fields.update(GeniRecord.internal_fields)
+
+class NodeRecord(GeniRecord):
+ fields = {
+ 'hostname': Parameter(str, 'This nodes dns name'),
+ 'node_type': Parameter(str, 'Type of node this is'),
+ 'node_type': Parameter(str, 'Type of node this is'),
+ 'latitude': Parameter(str, 'latitude'),
+ 'longitude': Parameter(str, 'longitude'),
+ }
+ fields.update(GeniRecord.fields)
+
+ internal_fields = {
+ 'slice_ids_whitelist': Parameter([str], 'List of allowed slices on this node'),
+ 'site': Parameter(str, 'Site this node belongs to'),
+ 'slices': Parameter([str], 'List of instantiated slices on this node'),
+ 'boot_state': Parameter(str, 'This nodes boot state'),
+ 'session': Parameter(str, 'This nodes session key'),
+ 'ssh_rsa_key': Parameter(str, 'Last known ssh host key'),
+ 'verified': Parameter(str, 'Whether the node configuration is verified correct'),
+ 'last_contact': Parameter(int, 'Date and time this node last phoned home'),
+ 'run_level': Parameter(str, 'Run level'),
+ 'version': Parameter(str, 'Node software version'),
+ 'key': Parameter(str, 'Node key'),
+ 'boot_noonce': Parameter(str, 'Random value generate at nodes last boot'),
+ 'model': Parameter(str, 'Model of node'),
+ 'ports': Parameter([int], 'List of pcu ports this node is connected to')
+ }
+ internal_fields.update(GeniRecord.internal_fields)
+
+class AuthorityRecord(GeniRecord):
+ fields = {
+ 'name': Parameter(str, 'Name'),
+ 'login_base': Parameter(str, 'login base'),
+ 'enabled': Parameter(bool, 'Is this site enabled'),
+ 'url': Parameter(str, 'URL'),
+ 'nodes': Parameter([str], 'List of nodes at this site'),
+ 'operator': Parameter([str], 'List of operators'),
+ 'researcher': Parameter([str], 'List of researchers'),
+ 'PI': Parameter([str], 'List of Principal Investigators'),
+ }
+ fields.update(GeniRecord.fields)
+
+ internal_fields = {
+ 'nodes': Parameter([str], 'List of nodes at this site'),
+ 'slices': Parameter([str], 'List of slices instantiated by this site'),
+ 'abbreviated_name': Parameter(str, 'Abbreviated name'),
+ 'owners': Parameter([str], 'List of owners'),
+ 'max_slices': Parameter(int, 'Maximum number of slices this site can instantiate'),
+ 'max_slivers': Parameter(int, 'Maximum number of slivers this site can instantiate'),
+ 'pi': Parameter([str], 'List of pis'),
+ 'is_public': Parameter(bool, 'Is this site public'),
+
+ }
+ internal_fields.update(GeniRecord.internal_fields)