def heartbeat(self, uuid, advertise_address, advertise_protocol='http'): path = self.heartbeat_api.format(uuid=uuid) data = { 'callback_url': self._get_agent_url(advertise_address, advertise_protocol) } api_ver = self._get_ironic_api_version() if api_ver >= AGENT_TOKEN_IRONIC_VERSION: data['agent_token'] = self.agent_token if api_ver >= AGENT_VERSION_IRONIC_VERSION: data['agent_version'] = version.version_info.release_string() api_ver = min(MAX_KNOWN_VERSION, api_ver) headers = self._get_ironic_api_version_header(api_ver) try: response = self._request('POST', path, data=data, headers=headers) except requests.exceptions.ConnectionError as e: raise errors.HeartbeatConnectionError(str(e)) except Exception as e: raise errors.HeartbeatError(str(e)) if response.status_code == requests.codes.CONFLICT: data = jsonutils.loads(response.content) raise errors.HeartbeatConflictError(data.get('faultstring')) elif response.status_code != requests.codes.ACCEPTED: msg = 'Invalid status code: {}'.format(response.status_code) raise errors.HeartbeatError(msg)
def heartbeat(self, uuid, advertise_address): path = '/{api_version}/nodes/{uuid}/vendor_passthru/heartbeat'.format( api_version=self.api_version, uuid=uuid) data = {'agent_url': self._get_agent_url(advertise_address)} try: response = self._request('POST', path, data=data) except Exception as e: raise errors.HeartbeatError(str(e)) if response.status_code != requests.codes.ACCEPTED: msg = 'Invalid status code: {0}'.format(response.status_code) raise errors.HeartbeatError(msg)
def heartbeat(self, uuid, advertise_address): agent_url = self._get_agent_url(advertise_address) try: response = self._heartbeat_request(uuid, agent_url) except Exception as e: raise errors.HeartbeatError(str(e)) if response.status_code == requests.codes.CONFLICT: data = json.loads(response.content) raise errors.HeartbeatConflictError(data.get('faultstring')) elif response.status_code != requests.codes.ACCEPTED: msg = 'Invalid status code: {0}'.format(response.status_code) raise errors.HeartbeatError(msg)
def heartbeat(self, uuid, advertise_address): path = self.heartbeat_api.format(uuid=uuid) data = {'callback_url': self._get_agent_url(advertise_address)} try: response = self._request('POST', path, data=data, headers=self.ramdisk_api_headers) except Exception as e: raise errors.HeartbeatError(str(e)) if response.status_code == requests.codes.CONFLICT: data = jsonutils.loads(response.content) raise errors.HeartbeatConflictError(data.get('faultstring')) elif response.status_code != requests.codes.ACCEPTED: msg = 'Invalid status code: {}'.format(response.status_code) raise errors.HeartbeatError(msg)
def heartbeat(self, uuid, advertise_address, advertise_protocol='http', generated_cert=None): path = self.heartbeat_api.format(uuid=uuid) data = { 'callback_url': self._get_agent_url(advertise_address, advertise_protocol) } api_ver = self._get_ironic_api_version() if api_ver >= AGENT_TOKEN_IRONIC_VERSION: data['agent_token'] = self.agent_token if api_ver >= AGENT_VERSION_IRONIC_VERSION: data['agent_version'] = version.__version__ if api_ver >= AGENT_VERIFY_CA_IRONIC_VERSION and generated_cert: data['agent_verify_ca'] = generated_cert api_ver = min(MAX_KNOWN_VERSION, api_ver) headers = self._get_ironic_api_version_header(api_ver) LOG.debug( 'Heartbeat: announcing callback URL %s, API version is ' '%d.%d', data['callback_url'], *api_ver) try: response = self._request('POST', path, data=data, headers=headers) except requests.exceptions.ConnectionError as e: raise errors.HeartbeatConnectionError(str(e)) except Exception as e: raise errors.HeartbeatError(str(e)) if response.status_code == requests.codes.CONFLICT: error = self._error_from_response(response) raise errors.HeartbeatConflictError(error) elif response.status_code != requests.codes.ACCEPTED: error = self._error_from_response(response) raise errors.HeartbeatError(error)
def heartbeat(self, uuid, advertise_address): path = self.heartbeat_api.format(uuid=uuid) data = {'callback_url': self._get_agent_url(advertise_address)} if self._get_ironic_api_version() >= AGENT_VERSION_IRONIC_VERSION: data['agent_version'] = version.version_info.release_string() headers = self._get_ironic_api_version_header( AGENT_VERSION_IRONIC_VERSION) else: headers = self._get_ironic_api_version_header() try: response = self._request('POST', path, data=data, headers=headers) except Exception as e: raise errors.HeartbeatError(str(e)) if response.status_code == requests.codes.CONFLICT: data = jsonutils.loads(response.content) raise errors.HeartbeatConflictError(data.get('faultstring')) elif response.status_code != requests.codes.ACCEPTED: msg = 'Invalid status code: {}'.format(response.status_code) raise errors.HeartbeatError(msg)
def test_error_classes(self): cases = [ (errors.InvalidContentError(DETAILS), SAME_DETAILS), (errors.NotFound(), SAME_CL_DETAILS), (errors.CommandExecutionError(DETAILS), SAME_DETAILS), (errors.InvalidCommandError(DETAILS), SAME_DETAILS), (errors.InvalidCommandParamsError(DETAILS), SAME_DETAILS), (errors.RequestedObjectNotFoundError('type_descr', 'obj_id'), DIFF_CL_DETAILS), (errors.IronicAPIError(DETAILS), SAME_DETAILS), (errors.HeartbeatError(DETAILS), SAME_DETAILS), (errors.LookupNodeError(DETAILS), SAME_DETAILS), (errors.LookupAgentIPError(DETAILS), SAME_DETAILS), (errors.LookupAgentInterfaceError(DETAILS), SAME_DETAILS), (errors.ImageDownloadError('image_id', DETAILS), DIFF_CL_DETAILS), (errors.ImageChecksumError('image_id', '/foo/image_id', 'incorrect', 'correct'), DIFF_CL_DETAILS), (errors.ImageWriteError('device', 'exit_code', 'stdout', 'stderr'), DIFF_CL_DETAILS), (errors.ConfigDriveTooLargeError('filename', 'filesize'), DIFF_CL_DETAILS), (errors.ConfigDriveWriteError('device', 'exit_code', 'stdout', 'stderr'), DIFF_CL_DETAILS), (errors.SystemRebootError('exit_code', 'stdout', 'stderr'), DIFF_CL_DETAILS), (errors.BlockDeviceEraseError(DETAILS), SAME_DETAILS), (errors.BlockDeviceError(DETAILS), SAME_DETAILS), (errors.VirtualMediaBootError(DETAILS), SAME_DETAILS), (errors.UnknownNodeError(), DEFAULT_DETAILS), (errors.UnknownNodeError(DETAILS), SAME_DETAILS), (errors.HardwareManagerNotFound(), DEFAULT_DETAILS), (errors.HardwareManagerNotFound(DETAILS), SAME_DETAILS), (errors.HardwareManagerMethodNotFound('method'), DIFF_CL_DETAILS), (errors.IncompatibleHardwareMethodError(), DEFAULT_DETAILS), (errors.IncompatibleHardwareMethodError(DETAILS), SAME_DETAILS), ] for (obj, check_details) in cases: self._test_class(obj, check_details)