python-oca/oca/datastore.py
2023-11-16 22:29:06 +09:00

71 lines
1.9 KiB
Python

# -*- coding: UTF-8 -*-
from .pool import Pool, PoolElement, Template, extractString
class Datastore(PoolElement):
METHODS = {
# 'info' : 'datastore.info',
'allocate': 'datastore.allocate',
'delete': 'datastore.delete',
# 'enable' : 'datastore.enable',
# 'update' : 'datastore.update'
}
XML_TYPES = {
'id': int,
'name': extractString,
'uid': int,
'gid': int,
'uname': extractString,
'gname': extractString,
# 'permissions' : Permissions,
'ds_mad': extractString,
'tm_mad': extractString,
'base_path': extractString,
'type': int,
'disk_type': int,
# 'state' : ???,
# 'cluster_id': int,
'cluster_ids': ['CLUSTERS', lambda clusters: [int(cluster_id.text) for cluster_id in clusters]],
# 'cluster': extractString,
'total_mb': int,
'free_mb': int,
'used_mb': int,
'image_ids': ['IMAGES', lambda images: [int(image_id.text) for image_id in images]],
'template': ['TEMPLATE', Template],
}
ELEMENT_NAME = 'DATASTORE'
@staticmethod
def allocate(client, datastore_template):
"""
Adds a datastore to the datastore list
Arguments
``datastore_template``
Template for the datastore to add
"""
datastore_id = client.call(Datastore.METHODS['allocate'], datastore_template)
return datastore_id
def __init__(self, xml, client):
super(Datastore, self).__init__(xml, client)
self._convert_types()
def __repr__(self):
return '<oca.Datastore("%s")>' % self.name
class DatastorePool(Pool):
METHODS = {
'info': 'datastorepool.info',
}
def __init__(self, client):
super(DatastorePool, self).__init__('DATASTORE_POOL', 'DATASTORE', client)
def _factory(self, xml):
c = Datastore(xml, self.client)
return c