From e3d7eed27a0bda5c821491dcb858df7c20c1009b Mon Sep 17 00:00:00 2001 From: Zack Cerza Date: Wed, 17 May 2023 18:12:13 -0600 Subject: [PATCH] fog: Verify reimaged machine OS Signed-off-by: Zack Cerza --- teuthology/provision/fog.py | 14 ++++++++++++++ teuthology/provision/test/test_fog.py | 1 + 2 files changed, 15 insertions(+) diff --git a/teuthology/provision/fog.py b/teuthology/provision/fog.py index 09cf2346a5..04bfab5ea2 100644 --- a/teuthology/provision/fog.py +++ b/teuthology/provision/fog.py @@ -89,6 +89,7 @@ class FOG(object): raise self._wait_for_ready() self._fix_hostname() + self._verify_installed_os() self.log.info("Deploy complete!") def do_request(self, url_suffix, data=None, method='GET', verify=True): @@ -323,6 +324,19 @@ class FOG(object): check_status=False, ) + def _verify_installed_os(self): + # What we call "CentOS X.Stream", we will see as "CentOS X" + os_version = self.os_version.lower() + # When we drop support for python 3.8, str.removesuffix() is helpful + if os_version.endswith(".stream"): + os_version = os_version[:-len(".stream")] + if self.remote.os.name.lower() != self.os_type.lower() or \ + self.remote.os.version.lower() != os_version: + raise RuntimeError( + f"Expected {self.remote.shortname}'s OS to be {self.os_type} {os_version} but " + f"found {self.remote.os.name} {self.remote.os.version}" + ) + def destroy(self): """A no-op; we just leave idle nodes as-is""" pass diff --git a/teuthology/provision/test/test_fog.py b/teuthology/provision/test/test_fog.py index f4263d6575..2124d73909 100644 --- a/teuthology/provision/test/test_fog.py +++ b/teuthology/provision/test/test_fog.py @@ -98,6 +98,7 @@ class TestFOG(object): cancel_deploy_task=DEFAULT, _wait_for_ready=DEFAULT, _fix_hostname=DEFAULT, + _verify_installed_os=DEFAULT, ) as local_mocks: local_mocks['get_host_data'].return_value = dict(id=host_id) local_mocks['schedule_deploy_task'].return_value = task_id -- 2.39.5