def __init__(self, opts): super(OpenNebulaBaseProvider, self).__init__(opts) try: import defusedxml.ElementTree from defusedxml import xmlrpc import xmlrpclib # nosec # Protect the XMLRPC parser from various XML-based threats xmlrpc.monkey_patch() except ImportError: msg = 'Cannot import defusedxml ElementTree and/or xmlrpc.' raise exceptions.OpenNebulaProviderException(msg) self.opts = opts self.on_auth = opts.on_auth self.on_rpcxml_endpoint = opts.on_rpcxml_endpoint self.cloudkeeper_images = opts.cloudkeeper_images if not self.on_auth: msg = ('ERROR, You must provide a on_auth ' 'via either --on-auth or env[ON_AUTH]') raise exceptions.OpenNebulaProviderException(msg) if not self.on_rpcxml_endpoint: msg = ('You must provide an OpenNebula RPC-XML ' 'endpoint via either --on-rpcxml-endpoint or' ' env[ON_RPCXML_ENDPOINT]') raise exceptions.OpenNebulaProviderException(msg) self.static = providers.static.StaticProvider(opts) self.xml_parser = defusedxml.ElementTree self.server_proxy = xmlrpclib.ServerProxy(self.on_rpcxml_endpoint)
def local_templates(self, template): templates = {} for mxn_file in self._absolute_file_paths(self.rocci_template_dir): mxn = self._read_mixin(mxn_file) occi_attrs = self._traverse(mxn, 'attributes', 'occi', 'compute') if not occi_attrs: msg = 'Failed to get compute attributes' \ ' for mixin in %s' % (mxn_file) raise exceptions.OpenNebulaProviderException(msg) flid = '%s#%s' % (mxn['scheme'].rstrip('#'), mxn['term']) cores = self._traverse(occi_attrs, 'cores', 'Default') or 0 memory = self._traverse(occi_attrs, 'memory', 'Default') or 0 disk = self._traverse( occi_attrs, 'ephemeral_storage', 'size', 'Default') or 0 aux = template.copy() aux.update({ 'template_id': flid, 'template_cpu': cores, 'template_memory': int(memory * 1024), 'template_description': mxn['title'], 'template_disk': disk, }) templates[aux['template_id']] = aux return templates
def __init__(self, opts): self.rocci_template_dir = opts.rocci_template_dir if not self.rocci_template_dir: msg = ('ERROR, You must provide a rocci_template_dir ' 'via --rocci-template-dir') raise exceptions.OpenNebulaProviderException(msg) super(OpenNebulaROCCIProvider, self).__init__(opts)
def _handle_response(self, response): if not response: msg = 'Invalid response from OpenNebula\'s XML RPC endpoint' raise exceptions.OpenNebulaProviderException(msg) if not response[0]: raise exceptions.OpenNebulaProviderException(response[1]) doc = self.xml_parser.fromstring(response[1]) if doc is None: msg = 'Invalid XML in response from OpenNebula\'s XML RPC endpoint' raise exceptions.OpenNebulaProviderException(msg) objects = {} for obj in doc.getchildren(): objects[self._get_xml_string(obj, 'ID')] = \ self._recurse_dict(obj)[1] return objects
def _read_mixin(json_file): with open(json_file, 'r') as fd: jd = json.load(fd) first = jd.get('mixins', [])[0] if not first: msg = 'Failed to find a mixin in %s' % (json_file) raise exceptions.OpenNebulaProviderException(msg) return first
def __init__(self, opts): super(OpenNebulaBaseProvider, self).__init__(opts) self.on_auth = opts.on_auth self.on_rpcxml_endpoint = opts.on_rpcxml_endpoint if self.on_auth is None: msg = ('ERROR, You must provide a on_auth ' 'via either --on-auth or env[ON_AUTH]' 'or ON_AUTH file') raise exceptions.OpenNebulaProviderException(msg) if not self.on_rpcxml_endpoint: msg = ('You must provide an OpenNebula RPC-XML ' 'endpoint via either --on-rpcxml-endpoint or' ' env[ON_RPCXML_ENDPOINT] ') raise exceptions.OpenNebulaProviderException(msg) self.opts = opts self.static = providers.static.StaticProvider(opts)
def __init__(self, opts): super(OpenNebulaBaseProvider, self).__init__(opts) self.opts = opts self.on_auth = opts.on_auth self.on_rpcxml_endpoint = opts.on_rpcxml_endpoint self.cloudkeeper_images = opts.cloudkeeper_images if not self.on_auth: msg = ('ERROR, You must provide a on_auth ' 'via either --on-auth or env[ON_AUTH]') raise exceptions.OpenNebulaProviderException(msg) if not self.on_rpcxml_endpoint: msg = ('You must provide an OpenNebula RPC-XML ' 'endpoint via either --on-rpcxml-endpoint or' ' env[ON_RPCXML_ENDPOINT]') raise exceptions.OpenNebulaProviderException(msg) self.static = providers.static.StaticProvider(opts) self.xml_parser = defusedxml.ElementTree self.server_proxy = xmlrpclib.ServerProxy(self.on_rpcxml_endpoint)
def get_templates(self): """Get flavors from rOCCI-server configuration.""" template = { 'template_id': None, 'template_cpu': None, 'template_memory': None, 'template_description': None, 'template_disk': None, 'template_platform': 'amd64', 'template_network': 'private', } template.update(self.static.get_template_defaults(prefix=True)) templates = {} for mxn_file in self._absolute_file_paths(self.rocci_template_dir): mxn = self._read_mixin(mxn_file) occi_attrs = self._traverse(mxn, 'attributes', 'occi', 'compute') if not occi_attrs: msg = 'Failed to get compute attributes' \ ' for mixin in %s' % (mxn_file) raise exceptions.OpenNebulaProviderException(msg) flid = '%s#%s' % (mxn['scheme'].rstrip('#'), mxn['term']) cores = self._traverse(occi_attrs, 'cores', 'Default') or 0 memory = self._traverse(occi_attrs, 'memory', 'Default') or 0 disk = self._traverse(occi_attrs, 'ephemeral_storage', 'size', 'Default') or 0 aux = template.copy() aux.update({ 'template_id': flid, 'template_cpu': cores, 'template_memory': int(memory * 1024), 'template_description': mxn['title'], 'template_disk': disk, }) templates[flid] = aux return templates
import os import string from cloud_info import exceptions from cloud_info import providers from cloud_info import utils try: import defusedxml.ElementTree from defusedxml import xmlrpc from six.moves import xmlrpc_client as xmlrpclib # nosec # Protect the XMLRPC parser from various XML-based threats xmlrpc.monkey_patch() except ImportError: msg = 'Cannot import defusedxml ElementTree and/or xmlrpc.' raise exceptions.OpenNebulaProviderException(msg) class OpenNebulaBaseProvider(providers.BaseProvider): def __init__(self, opts): super(OpenNebulaBaseProvider, self).__init__(opts) self.opts = opts self.on_auth = opts.on_auth self.on_rpcxml_endpoint = opts.on_rpcxml_endpoint self.cloudkeeper_images = opts.cloudkeeper_images if not self.on_auth: msg = ('ERROR, You must provide a on_auth ' 'via either --on-auth or env[ON_AUTH]') raise exceptions.OpenNebulaProviderException(msg)