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, 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)