From ba6ca246f542b49e59d51692231a59abdaf6290b Mon Sep 17 00:00:00 2001 From: Vladyslav Drok Date: Fri, 15 May 2020 19:10:33 +0200 Subject: [PATCH] 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 --- ironic_python_agent/config.py | 6 ++++++ ironic_python_agent/ironic_api_client.py | 2 ++ ironic_python_agent/tests/unit/test_ironic_api_client.py | 8 +++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/ironic_python_agent/config.py b/ironic_python_agent/config.py index 7d8adaccf..9079d1545 100644 --- a/ironic_python_agent/config.py +++ b/ironic_python_agent/config.py @@ -36,6 +36,12 @@ cli_opts = [ 'A special value "mdns" can be specified to fetch the ' '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-".'), + cfg.StrOpt('listen_host', default=APARAMS.get('ipa-listen-host', netutils.get_wildcard_address()), diff --git a/ironic_python_agent/ironic_api_client.py b/ironic_python_agent/ironic_api_client.py index 7a3a15785..747b133d2 100644 --- a/ironic_python_agent/ironic_api_client.py +++ b/ironic_python_agent/ironic_api_client.py @@ -68,6 +68,8 @@ class APIClient(object): 'Content-Type': '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) return self.session.request(method, diff --git a/ironic_python_agent/tests/unit/test_ironic_api_client.py b/ironic_python_agent/tests/unit/test_ironic_api_client.py index cd9ac14ee..562f06be2 100644 --- a/ironic_python_agent/tests/unit/test_ironic_api_client.py +++ b/ironic_python_agent/tests/unit/test_ironic_api_client.py @@ -109,6 +109,8 @@ class TestBaseIronicPythonAgent(base.IronicAgentTest): def test_successful_heartbeat(self): 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.return_value = response @@ -122,8 +124,12 @@ class TestBaseIronicPythonAgent(base.IronicAgentTest): heartbeat_path = 'v1/heartbeat/deadbeef-dabb-ad00-b105-f00d00bab10c' 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]) + request_headers = request_kwargs["headers"] + self.assertEqual( + req_id, request_headers["X-OpenStack-Request-ID"]) self.assertEqual(API_URL + heartbeat_path, request_args[1]) expected_data = { 'callback_url': 'http://192.0.2.1:9999',