From 94fde4b3b461ccd0283ed844e3785fb44d5562ae Mon Sep 17 00:00:00 2001 From: Julia Kreger <juliaashleykreger@gmail.com> Date: Thu, 13 Feb 2025 07:23:00 -0800 Subject: [PATCH] Remove agent_token_required upgrade knob To help ease upgrades to Victoria, IPA had a knob added to enable operators to express if agent tokens were required in their deployment. Since then, the feature is required, however we left the logic enabling the fun upgrade case handling. At this point, this knob serves no further use, and can be removed. Change-Id: I202f06e1b6598a802c9853fb99201c55e7a40cb1 --- ironic_python_agent/agent.py | 19 ++++++++++--------- ironic_python_agent/config.py | 6 ------ .../tests/unit/extensions/test_poll.py | 6 ++---- ironic_python_agent/tests/unit/test_agent.py | 4 +--- ...agent-token-required-808e99b83b4456a1.yaml | 9 +++++++++ 5 files changed, 22 insertions(+), 22 deletions(-) create mode 100644 releasenotes/notes/remove-agent-token-required-808e99b83b4456a1.yaml diff --git a/ironic_python_agent/agent.py b/ironic_python_agent/agent.py index ef74bd2b4..fbc616c61 100644 --- a/ironic_python_agent/agent.py +++ b/ironic_python_agent/agent.py @@ -253,7 +253,6 @@ class IronicPythonAgent(base.ExecuteCommandMixin): # Allows this to be turned on by the conductor while running, # in the event of long running ramdisks where the conductor # got upgraded somewhere along the way. - self.agent_token_required = cfg.CONF.agent_token_required self.generated_cert = None def get_status(self): @@ -470,8 +469,6 @@ class IronicPythonAgent(base.ExecuteCommandMixin): md5_allowed = config.get('agent_md5_checksum_enable') if md5_allowed is not None: cfg.CONF.set_override('md5_enabled', md5_allowed) - if config.get('agent_token_required'): - self.agent_token_required = True token = config.get('agent_token') if token: if len(token) >= 32: @@ -487,11 +484,15 @@ class IronicPythonAgent(base.ExecuteCommandMixin): 'intended and the deployment may fail ' 'depending on settings in the ironic ' 'deployment.') - if not self.agent_token and self.agent_token_required: - LOG.error('Ironic is signaling that agent tokens ' - 'are required, however we do not have ' - 'a token on file. ' - 'This is likely **FATAL**.') + if not self.agent_token: + LOG.error('We do not have a token on file ' + 'from the Ironic deployment, and ' + 'one should be on file. ' + 'Possible external agent restart ' + 'outside of Ironic\'s process. ' + 'This is **FATAL**.') + self.serve_api = False + self.lockdown = True else: LOG.info('An invalid token was received.') if self.agent_token and not self.standalone: @@ -558,7 +559,7 @@ class IronicPythonAgent(base.ExecuteCommandMixin): 'found, please check your pxe append parameters.') in_rescued_mode = os.path.exists('/etc/.rescued') - if not in_rescued_mode: + if not in_rescued_mode and self.serve_api: self.serve_ipa_api() else: # NOTE(cid): In rescued state, we don't call _lockdown_system() as diff --git a/ironic_python_agent/config.py b/ironic_python_agent/config.py index 1ce795bb7..395821601 100644 --- a/ironic_python_agent/config.py +++ b/ironic_python_agent/config.py @@ -292,12 +292,6 @@ cli_opts = [ 'This variable can be also configured via image_info.' 'Value coming from image_info takes precedence over' 'value coming from command line or configuration file.'), - cfg.BoolOpt('agent_token_required', - default=APARAMS.get('ipa-agent-token-required', False), - help='Control to enforce if API command requests should ' - 'enforce token validation. The configuration provided ' - 'by the conductor MAY override this and force this ' - 'setting to be changed to True in memory.'), cfg.IntOpt('image_download_connection_timeout', min=1, default=APARAMS.get( 'ipa-image-download-connection-timeout', 60), diff --git a/ironic_python_agent/tests/unit/extensions/test_poll.py b/ironic_python_agent/tests/unit/extensions/test_poll.py index b144d1047..757b8699a 100644 --- a/ironic_python_agent/tests/unit/extensions/test_poll.py +++ b/ironic_python_agent/tests/unit/extensions/test_poll.py @@ -42,8 +42,7 @@ class TestPollExtension(base.IronicAgentTest): def test_set_node_info_success(self): self.mock_agent.standalone = True node_info = {'node': {'uuid': 'fake-node', 'properties': {}}, - 'config': {'agent_token_required': True, - 'agent_token': 'blah' * 8}} + 'config': {'agent_token': 'blah' * 8}} result = self.agent_extension.set_node_info(node_info=node_info) self.mock_agent.process_lookup_data.assert_called_once_with(node_info) self.assertEqual('SUCCEEDED', result.command_status) @@ -51,8 +50,7 @@ class TestPollExtension(base.IronicAgentTest): def test_set_node_info_not_standalone(self): self.mock_agent.standalone = False node_info = {'node': {'uuid': 'fake-node', 'properties': {}}, - 'config': {'agent_token_required': True, - 'agent_token': 'blah' * 8}} + 'config': {'agent_token': 'blah' * 8}} self.assertRaises(errors.InvalidCommandError, self.agent_extension.set_node_info, node_info=node_info) diff --git a/ironic_python_agent/tests/unit/test_agent.py b/ironic_python_agent/tests/unit/test_agent.py index 113208a84..4e840ead5 100644 --- a/ironic_python_agent/tests/unit/test_agent.py +++ b/ironic_python_agent/tests/unit/test_agent.py @@ -465,7 +465,6 @@ class TestBaseAgent(ironic_agent_base.IronicAgentTest): 'config': { 'heartbeat_timeout': 300, 'agent_token': '1' * 128, - 'agent_token_required': True } } @@ -1323,7 +1322,6 @@ class TestBaseAgentVMediaToken(ironic_agent_base.IronicAgentTest): def test_run_agent_token_vmedia(self, mock_get_managers, mock_wsgi, mock_wait, mock_dispatch): CONF.set_override('inspection_callback_url', '') - wsgi_server = mock_wsgi.return_value def set_serve_api(): @@ -1339,11 +1337,11 @@ class TestBaseAgentVMediaToken(ironic_agent_base.IronicAgentTest): 'config': { 'heartbeat_timeout': 300, 'agent_token': '********', - 'agent_token_required': True } } self.agent.run() + self.assertFalse(self.agent.lockdown) mock_wsgi.assert_called_once_with(CONF, 'ironic-python-agent', app=self.agent.api, diff --git a/releasenotes/notes/remove-agent-token-required-808e99b83b4456a1.yaml b/releasenotes/notes/remove-agent-token-required-808e99b83b4456a1.yaml new file mode 100644 index 000000000..e727c831d --- /dev/null +++ b/releasenotes/notes/remove-agent-token-required-808e99b83b4456a1.yaml @@ -0,0 +1,9 @@ +--- +security: + - | + The ``agent_token_required`` configuration option has been removed. + This was a knob to help ease the upgrade process by enabling operators + to express if their environment was requiring an agent token. This was + key to help navigate possible upgrade cases, however that was for the + migration *to* the Victoria release, and such an upgrade is outside + of the version support matrix of Ironic.