Add possibility to pass global request ID

It can be done via ipa-global-request-id kernel commandline parameter.

Story: 2007681
Task: 39792
Change-Id: I6f544327d310c976a1625cfb411947591867882a
This commit is contained in:
Vladyslav Drok 2020-05-15 19:10:33 +02:00
parent c4a78862d3
commit ba6ca246f5
3 changed files with 15 additions and 1 deletions

View File

@ -36,6 +36,12 @@ cli_opts = [
'A special value "mdns" can be specified to fetch the ' 'A special value "mdns" can be specified to fetch the '
'URL using multicast DNS service discovery.'), 'URL using multicast DNS service discovery.'),
cfg.StrOpt('global_request_id',
default=APARAMS.get('ipa-global-request-id'),
help='Global request ID header to provide to Ironic API. '
'Can be supplied as "ipa-global-request-id" kernel '
'parameter. The value must be in form "req-<UUID>".'),
cfg.StrOpt('listen_host', cfg.StrOpt('listen_host',
default=APARAMS.get('ipa-listen-host', default=APARAMS.get('ipa-listen-host',
netutils.get_wildcard_address()), netutils.get_wildcard_address()),

View File

@ -68,6 +68,8 @@ class APIClient(object):
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'Accept': 'application/json', 'Accept': 'application/json',
}) })
if CONF.global_request_id:
headers["X-OpenStack-Request-ID"] = CONF.global_request_id
verify, cert = utils.get_ssl_client_options(CONF) verify, cert = utils.get_ssl_client_options(CONF)
return self.session.request(method, return self.session.request(method,

View File

@ -109,6 +109,8 @@ class TestBaseIronicPythonAgent(base.IronicAgentTest):
def test_successful_heartbeat(self): def test_successful_heartbeat(self):
response = FakeResponse(status_code=202) response = FakeResponse(status_code=202)
req_id = "req-14c99bd0-1bb5-4d74-972b-e282a50ce441"
self.config(global_request_id=req_id)
self.api_client.session.request = mock.Mock() self.api_client.session.request = mock.Mock()
self.api_client.session.request.return_value = response self.api_client.session.request.return_value = response
@ -122,8 +124,12 @@ class TestBaseIronicPythonAgent(base.IronicAgentTest):
heartbeat_path = 'v1/heartbeat/deadbeef-dabb-ad00-b105-f00d00bab10c' heartbeat_path = 'v1/heartbeat/deadbeef-dabb-ad00-b105-f00d00bab10c'
request_args = self.api_client.session.request.call_args[0] request_args = self.api_client.session.request.call_args[0]
data = self.api_client.session.request.call_args[1]['data'] request_kwargs = self.api_client.session.request.call_args[1]
data = request_kwargs["data"]
self.assertEqual('POST', request_args[0]) self.assertEqual('POST', request_args[0])
request_headers = request_kwargs["headers"]
self.assertEqual(
req_id, request_headers["X-OpenStack-Request-ID"])
self.assertEqual(API_URL + heartbeat_path, request_args[1]) self.assertEqual(API_URL + heartbeat_path, request_args[1])
expected_data = { expected_data = {
'callback_url': 'http://192.0.2.1:9999', 'callback_url': 'http://192.0.2.1:9999',