From b8549c9a64b94800081055aa30cdc29f1c913112 Mon Sep 17 00:00:00 2001 From: Charles Short Date: Tue, 31 Jan 2023 10:53:35 -0500 Subject: [PATCH] Add resize to / Add support to to modifying / logical volume group through the system host-fs-modify command Test Plan PASS - Install ISO and resized root logical volume. PASS - Perform Backup/Restore with optimized restore PASS - Extend root volume and reboot, verify that the size of the volume remains the same. PASS - Peform system host-lock/host-unlock, verify that the size of the volume remains the same. PASS - Verify Failure if user tries to extend beyond available space in the volume group Results - https://paste.openstack.org/show/bkpGGPEYkDZHQJkwS1Ca/ Story: 2009303 Task: 47231 Depends-On: https://review.opendev.org/c/starlingx/stx-puppet/+/872324 Signed-off-by: Charles Short Change-Id: I6912ad87789b59d26bce8c6eba152e1868a2750f --- sysinv/sysinv/sysinv/sysinv/agent/manager.py | 11 +++++ .../sysinv/sysinv/sysinv/common/constants.py | 5 ++ .../sysinv/sysinv/sysinv/conductor/manager.py | 2 + sysinv/sysinv/sysinv/sysinv/puppet/storage.py | 4 ++ .../sysinv/sysinv/tests/agent/test_manager.py | 48 +++++++++++++------ 5 files changed, 55 insertions(+), 15 deletions(-) diff --git a/sysinv/sysinv/sysinv/sysinv/agent/manager.py b/sysinv/sysinv/sysinv/sysinv/agent/manager.py index ed20be49dd..d2ae0d53f5 100644 --- a/sysinv/sysinv/sysinv/sysinv/agent/manager.py +++ b/sysinv/sysinv/sysinv/sysinv/agent/manager.py @@ -1234,6 +1234,17 @@ class AgentManager(service.PeriodicService): } filesystems.append(data) + if utils.is_filesystem_supported(constants.FILESYSTEM_NAME_ROOT, + self._ihost_personality): + root_lv_size = utils.get_current_fs_size("root") + data = { + 'name': constants.FILESYSTEM_NAME_ROOT, + 'size': root_lv_size, + 'logical_volume': constants.FILESYSTEM_LV_DICT[ + constants.FILESYSTEM_NAME_ROOT] + } + filesystems.append(data) + if filesystems: # Create the filesystems if they do not already exist. # This audit does not check if the fs size has changed. diff --git a/sysinv/sysinv/sysinv/sysinv/common/constants.py b/sysinv/sysinv/sysinv/sysinv/common/constants.py index 4e6a177234..bd2a872ffd 100644 --- a/sysinv/sysinv/sysinv/sysinv/common/constants.py +++ b/sysinv/sysinv/sysinv/sysinv/common/constants.py @@ -577,6 +577,7 @@ FILESYSTEM_NAME_IMAGE_CONVERSION = 'image-conversion' FILESYSTEM_NAME_INSTANCES = 'instances' FILESYSTEM_NAME_LOG = 'log' FILESYSTEM_NAME_VAR = 'var' +FILESYSTEM_NAME_ROOT = 'root' FILESYSTEM_LV_DICT = { FILESYSTEM_NAME_PLATFORM: 'platform-lv', @@ -593,6 +594,7 @@ FILESYSTEM_LV_DICT = { FILESYSTEM_NAME_KUBELET: 'kubelet-lv', FILESYSTEM_NAME_LOG: 'log-lv', FILESYSTEM_NAME_VAR: 'var-lv', + FILESYSTEM_NAME_ROOT: 'root-lv', } # Supported DRDB file system resizes (via controllerfs-modify) @@ -619,6 +621,7 @@ FILESYSTEM_CONTROLLER_SUPPORTED_LIST = [ FILESYSTEM_NAME_INSTANCES, FILESYSTEM_NAME_LOG, FILESYSTEM_NAME_VAR, + FILESYSTEM_NAME_ROOT, ] FILESYSTEM_WORKER_SUPPORTED_LIST = [ @@ -628,6 +631,7 @@ FILESYSTEM_WORKER_SUPPORTED_LIST = [ FILESYSTEM_NAME_INSTANCES, FILESYSTEM_NAME_LOG, FILESYSTEM_NAME_VAR, + FILESYSTEM_NAME_ROOT, ] FILESYSTEM_STORAGE_SUPPORTED_LIST = [ @@ -636,6 +640,7 @@ FILESYSTEM_STORAGE_SUPPORTED_LIST = [ FILESYSTEM_NAME_SCRATCH, FILESYSTEM_NAME_LOG, FILESYSTEM_NAME_VAR, + FILESYSTEM_NAME_ROOT, ] FILESYSTEM_HOSTS_SUPPORTED_LIST_DICT = { diff --git a/sysinv/sysinv/sysinv/sysinv/conductor/manager.py b/sysinv/sysinv/sysinv/sysinv/conductor/manager.py index b1c6d5e998..2dc29d7ed4 100644 --- a/sysinv/sysinv/sysinv/sysinv/conductor/manager.py +++ b/sysinv/sysinv/sysinv/sysinv/conductor/manager.py @@ -8133,6 +8133,8 @@ class ConductorManager(service.PeriodicService): 'platform::filesystem::log::runtime', constants.FILESYSTEM_NAME_VAR: 'platform::filesystem::var::runtime', + constants.FILESYSTEM_NAME_ROOT: + 'platform::filesystem::root::runtime', } puppet_class = [classmap.get(fs) for fs in filesystem_list] diff --git a/sysinv/sysinv/sysinv/sysinv/puppet/storage.py b/sysinv/sysinv/sysinv/sysinv/puppet/storage.py index d9882197f2..704b64fa57 100644 --- a/sysinv/sysinv/sysinv/sysinv/puppet/storage.py +++ b/sysinv/sysinv/sysinv/sysinv/puppet/storage.py @@ -300,6 +300,10 @@ class StoragePuppet(base.BasePuppet): config.update({ 'platform::filesystem::var::params::lv_size': fs.size }) + elif fs.name == constants.FILESYSTEM_NAME_ROOT: + config.update({ + 'platform::filesystem::root::params::lv_size': fs.size + }) return config def _get_worker_config(self, host): diff --git a/sysinv/sysinv/sysinv/sysinv/tests/agent/test_manager.py b/sysinv/sysinv/sysinv/sysinv/tests/agent/test_manager.py index e043136385..f41eda2115 100644 --- a/sysinv/sysinv/sysinv/sysinv/tests/agent/test_manager.py +++ b/sysinv/sysinv/sysinv/sysinv/tests/agent/test_manager.py @@ -69,6 +69,7 @@ class TestAgentManager(base.TestCase): self.kubelet_fs_size = 10 self.log_fs_size = 8 self.var_fs_size = 20 + self.root_fs_size = 20 def mock_get_current_fs_size(fs_name): if fs_name == constants.FILESYSTEM_NAME_SCRATCH: @@ -83,6 +84,8 @@ class TestAgentManager(base.TestCase): return self.log_fs_size elif fs_name == constants.FILESYSTEM_NAME_VAR: return self.var_fs_size + elif fs_name == constants.FILESYSTEM_NAME_ROOT: + return self.root_fs_size self.mocked_get_current_fs_size = mock.patch( 'sysinv.common.utils.get_current_fs_size', mock_get_current_fs_size) @@ -108,7 +111,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 30}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 10}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api.create_host_filesystems.assert_called_with( self.context, @@ -132,7 +136,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 30}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 10}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api.create_host_filesystems.assert_called_with( self.context, @@ -179,7 +184,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 20}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 2}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api.create_host_filesystems.assert_called_with( self.context, @@ -202,7 +208,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 30}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 10}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api.create_host_filesystems.assert_called_with( self.context, @@ -225,7 +232,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 30}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 10}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api.create_host_filesystems.assert_called_with( self.context, @@ -248,7 +256,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 30}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 10}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api.create_host_filesystems.assert_called_with( self.context, @@ -271,7 +280,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 30}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 10}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api.create_host_filesystems.assert_called_with( self.context, @@ -294,7 +304,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 30}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 10}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api.create_host_filesystems.assert_called_with( self.context, @@ -317,7 +328,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 30}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 10}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api.create_host_filesystems.assert_called_with( self.context, @@ -339,7 +351,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 30}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 10}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api_dc_aio.create_host_filesystems.assert_called_with( self.context, @@ -361,7 +374,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 30}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 10}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api_dc_aio.create_host_filesystems.assert_called_with( self.context, @@ -383,7 +397,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 30}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 10}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api_dc_std.create_host_filesystems.assert_called_with( self.context, @@ -405,7 +420,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 30}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 10}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api_dc_std.create_host_filesystems.assert_called_with( self.context, @@ -426,7 +442,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 30}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 10}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api_dc_std.create_host_filesystems.assert_called_with( self.context, @@ -447,7 +464,8 @@ class TestAgentManager(base.TestCase): {'logical_volume': 'docker-lv', 'name': 'docker', 'size': 30}, {'logical_volume': 'kubelet-lv', 'name': 'kubelet', 'size': 10}, {'logical_volume': 'log-lv', 'name': 'log', 'size': 8}, - {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}] + {'logical_volume': 'var-lv', 'name': 'var', 'size': 20}, + {'logical_volume': 'root-lv', 'name': 'root', 'size': 20}] self.fake_conductor_api_dc_std.create_host_filesystems.assert_called_with( self.context,