コード例 #1
0
    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)
コード例 #2
0
    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
コード例 #3
0
 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)
コード例 #4
0
    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
コード例 #5
0
    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
コード例 #6
0
    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)
コード例 #7
0
    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)
コード例 #8
0
    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
コード例 #9
0
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)