Adding support for Ceph storage during Simplex to Duplex migration
This change will allow users to migrate a simplex system with Ceph enabled to duplex via system modify command. During unlock it will get the cephfs filesystem pool names and generate the necessary hieradata. This file along with other puppet changes on stx-puppet will be used to perform necessary changes on the Ceph cluster to support a duplex configuration. Story: 2008587 Task: 42079 Signed-off-by: Pedro Linhares <PedroHenriqueLinhares.Silva@windriver.com> Depends-On: https://review.opendev.org/c/starlingx/stx-puppet/+/783727 Change-Id: Idaa7ebbf3a9c55658187e1d5ca6c357349659d43
This commit is contained in:
parent
6382ed7776
commit
dd71459015
@ -15,6 +15,7 @@ from sysinv.common.storage_backend_conf import StorageBackendConfig
|
|||||||
from sysinv.helm import common
|
from sysinv.helm import common
|
||||||
|
|
||||||
from sysinv.puppet import openstack
|
from sysinv.puppet import openstack
|
||||||
|
from eventlet.green import subprocess
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -93,6 +94,8 @@ class CephPuppet(openstack.OpenstackBasePuppet):
|
|||||||
(utils.is_std_system(self.dbapi) and
|
(utils.is_std_system(self.dbapi) and
|
||||||
ceph_backend.task == constants.SB_TASK_RESTORE)
|
ceph_backend.task == constants.SB_TASK_RESTORE)
|
||||||
|
|
||||||
|
is_sx_to_dx_migration = self._get_system_capability('simplex_to_duplex_migration')
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
'ceph::ms_bind_ipv6': ms_bind_ipv6,
|
'ceph::ms_bind_ipv6': ms_bind_ipv6,
|
||||||
|
|
||||||
@ -129,8 +132,15 @@ class CephPuppet(openstack.OpenstackBasePuppet):
|
|||||||
self._get_service_tenant_name(),
|
self._get_service_tenant_name(),
|
||||||
'platform::ceph::params::skip_osds_during_restore':
|
'platform::ceph::params::skip_osds_during_restore':
|
||||||
skip_osds_during_restore,
|
skip_osds_during_restore,
|
||||||
|
'platform::ceph::params::simplex_to_duplex_migration':
|
||||||
|
bool(is_sx_to_dx_migration),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if is_sx_to_dx_migration:
|
||||||
|
cephfs_filesystems = self._get_cephfs_filesystems()
|
||||||
|
if cephfs_filesystems:
|
||||||
|
config['platform::ceph::params::cephfs_filesystems'] = cephfs_filesystems
|
||||||
|
|
||||||
if (utils.is_openstack_applied(self.dbapi) and
|
if (utils.is_openstack_applied(self.dbapi) and
|
||||||
utils.is_chart_enabled(self.dbapi,
|
utils.is_chart_enabled(self.dbapi,
|
||||||
constants.HELM_APP_OPENSTACK,
|
constants.HELM_APP_OPENSTACK,
|
||||||
@ -301,6 +311,56 @@ class CephPuppet(openstack.OpenstackBasePuppet):
|
|||||||
return ceph_mons[0]
|
return ceph_mons[0]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def _get_cephfs_filesystems(self):
|
||||||
|
""" Returns cephfs filesystem pool names to be recovered when
|
||||||
|
transition from simplex to duplex is happening. Ceph monitor will
|
||||||
|
be recreated using a DRBD filesystem and cephfs need to be
|
||||||
|
recovered from the existing pools
|
||||||
|
:return dict with the filesystem names and its associated pools
|
||||||
|
"""
|
||||||
|
process = subprocess.Popen(args=["ceph", "fs", "ls"], stdout=subprocess.PIPE,
|
||||||
|
universal_newlines=True)
|
||||||
|
|
||||||
|
fs_pools = []
|
||||||
|
fs_name = "name"
|
||||||
|
fs_metadata_pool = "metadata pool"
|
||||||
|
fs_data_pool = "data pools"
|
||||||
|
|
||||||
|
while True:
|
||||||
|
output = process.stdout.readline()
|
||||||
|
if output == '' and process.poll() is not None:
|
||||||
|
break
|
||||||
|
if output:
|
||||||
|
fs = dict(f.strip().split(":") for f in output.split(","))
|
||||||
|
# trim values
|
||||||
|
for k in fs.keys():
|
||||||
|
fs[k] = fs[k].strip()
|
||||||
|
if fs[fs_data_pool]:
|
||||||
|
data_pools = fs[fs_data_pool].replace('[', '').replace(']', '')
|
||||||
|
fs[fs_data_pool] = data_pools.split(",")
|
||||||
|
|
||||||
|
fs_pools.append(fs)
|
||||||
|
return_code = process.poll()
|
||||||
|
|
||||||
|
if return_code != 0:
|
||||||
|
LOG.error("Error processing list of existing cephfs file systems")
|
||||||
|
return None
|
||||||
|
|
||||||
|
filesystems = {}
|
||||||
|
for fs in fs_pools:
|
||||||
|
pools = []
|
||||||
|
pools.append(fs[fs_metadata_pool])
|
||||||
|
for pool in fs[fs_data_pool]:
|
||||||
|
pools.append(pool.strip())
|
||||||
|
|
||||||
|
filesystems.update({fs[fs_name]: pools})
|
||||||
|
|
||||||
|
return filesystems
|
||||||
|
|
||||||
|
def _get_system_capability(self, capability):
|
||||||
|
system = self.dbapi.isystem_get_one()
|
||||||
|
return system.capabilities.get(capability)
|
||||||
|
|
||||||
def _is_radosgw_enabled(self):
|
def _is_radosgw_enabled(self):
|
||||||
enabled = False
|
enabled = False
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user