示例#1
0
    def send_cmd(self, cmd, **kwargs):
        """Send command to VPSA Controller."""

        self.ensure_connection(cmd)

        (method, url, body) = self._generate_vpsa_cmd(cmd, **kwargs)
        LOG.debug('Invoking %(cmd)s using %(method)s request.', {
            'cmd': cmd,
            'method': method
        })

        if self.conf.zadara_vpsa_use_ssl:
            connection = (http_client.HTTPSConnection(
                self.conf.zadara_vpsa_host, self.conf.zadara_vpsa_port))
        else:
            connection = http_client.HTTPConnection(self.conf.zadara_vpsa_host,
                                                    self.conf.zadara_vpsa_port)
        connection.request(method, url, body)
        response = connection.getresponse()

        if response.status != 200:
            connection.close()
            raise exception.BadHTTPResponseStatus(status=response.status)
        data = response.read()
        connection.close()

        xml_tree = etree.fromstring(data)
        status = xml_tree.findtext('status')
        if status != '0':
            raise exception.FailedCmdWithDump(status=status, data=data)

        if method in ['POST', 'DELETE']:
            LOG.debug('Operation completed with status code %(status)s',
                      {'status': status})
        return xml_tree
示例#2
0
    def send_cmd(self, cmd, **kwargs):
        """Send command to VPSA Controller."""

        self.ensure_connection(cmd)

        (method, url, body) = self._generate_vpsa_cmd(cmd, **kwargs)
        LOG.debug('Sending %(method)s to %(url)s. Body "%(body)s"', {
            'method': method,
            'url': url,
            'body': body
        })

        if self.conf.zadara_vpsa_use_ssl:
            connection = httplib.HTTPSConnection(self.conf.zadara_vpsa_ip,
                                                 self.conf.zadara_vpsa_port)
        else:
            connection = httplib.HTTPConnection(self.conf.zadara_vpsa_ip,
                                                self.conf.zadara_vpsa_port)
        connection.request(method, url, body)
        response = connection.getresponse()

        if response.status != 200:
            connection.close()
            raise exception.BadHTTPResponseStatus(status=response.status)
        data = response.read()
        connection.close()

        xml_tree = etree.fromstring(data)
        status = xml_tree.findtext('status')
        if status != '0':
            raise exception.FailedCmdWithDump(status=status, data=data)

        if method in ['POST', 'DELETE']:
            LOG.debug('Operation completed. %(data)s', {'data': data})
        return xml_tree
示例#3
0
    def send_cmd(self, cmd, **kwargs):
        """Send command to VPSA Controller."""

        self.ensure_connection(cmd)

        method, url, params, body, headers = self._generate_vpsa_cmd(
            cmd, **kwargs)
        LOG.debug('Invoking %(cmd)s using %(method)s request.', {
            'cmd': cmd,
            'method': method
        })

        host = self.conf.zadara_vpsa_host
        port = int(self.conf.zadara_vpsa_port)

        protocol = "https" if self.conf.zadara_vpsa_use_ssl else "http"
        if protocol == "https":
            if not self.conf.zadara_ssl_cert_verify:
                verify = False
            else:
                cert = ((self.conf.driver_ssl_cert_path) or None)
                verify = cert if cert else True
        else:
            verify = False

        if port:
            api_url = "%s://%s:%d%s" % (protocol, host, port, url)
        else:
            api_url = "%s://%s%s" % (protocol, host, url)

        try:
            with requests.Session() as session:
                session.headers.update(headers)
                response = session.request(method,
                                           api_url,
                                           params=params,
                                           data=body,
                                           headers=headers,
                                           verify=verify)
        except requests.exceptions.RequestException as e:
            message = (_('Exception: %s') % six.text_type(e))
            raise exception.VolumeDriverException(message=message)

        if response.status_code != 200:
            raise exception.BadHTTPResponseStatus(status=response.status_code)

        data = response.content
        xml_tree = lxml.fromstring(data)
        status = xml_tree.findtext('status')
        if status == '5':
            # Invalid Credentials
            raise ZadaraInvalidAccessKey()

        if status != '0':
            raise exception.FailedCmdWithDump(status=status, data=data)

        if method in ['POST', 'DELETE']:
            LOG.debug('Operation completed with status code %(status)s',
                      {'status': status})
        return xml_tree
示例#4
0
 def vpsa_send_cmd(self, cmd, **kwargs):
     try:
         response = self.vpsa.send_cmd(cmd, **kwargs)
     except common.exception.UnknownCmd as e:
         raise cinder_exception.UnknownCmd(cmd=e.cmd)
     except common.exception.SessionRequestException as e:
         raise zadara_exception.ZadaraSessionRequestException(msg=e.msg)
     except common.exception.BadHTTPResponseStatus as e:
         raise cinder_exception.BadHTTPResponseStatus(status=e.status)
     except common.exception.FailedCmdWithDump as e:
         raise cinder_exception.FailedCmdWithDump(status=e.status,
                                                  data=e.data)
     except common.exception.ZadaraInvalidAccessKey:
         raise zadara_exception.ZadaraCinderInvalidAccessKey()
     return response