Merge "Fix pre-upgrade check to verify FS allocation"
This commit is contained in:
commit
985630c9f0
@ -1267,7 +1267,10 @@ TIS_STD_BUILD = 'Standard'
|
||||
TIS_AIO_BUILD = 'All-in-one'
|
||||
|
||||
# Free space needed on CentOS for Debian upgrade
|
||||
UPGRADE_FREE_SPACE_NEEDED_IN_GIB = 51
|
||||
WORKER_UPGRADE_FREE_SPACE_NEEDED_IN_GIB = 23.5
|
||||
# Total disk space needed on CentOS for Debian upgrade
|
||||
STORAGE_UPGRADE_SPACE_NEEDED_IN_GIB = 118
|
||||
CONTROLLER_UPGRADE_SPACE_NEEDED_IN_GIB = 220
|
||||
|
||||
# Platform Upgrade states
|
||||
UPGRADE_STARTING = 'starting'
|
||||
|
@ -22,7 +22,6 @@ from sysinv.api.controllers.v1 import patch_api
|
||||
from sysinv.api.controllers.v1 import vim_api
|
||||
|
||||
import tsconfig.tsconfig as tsc
|
||||
from sysinv.agent import disk
|
||||
|
||||
import cgcs_patch.constants as patch_constants
|
||||
|
||||
@ -38,7 +37,6 @@ class Health(object):
|
||||
self._dbapi = dbapi
|
||||
self._ceph = ceph.CephApiOperator()
|
||||
self._kube_operator = kubernetes.KubeOperator()
|
||||
self._idisk_operator = disk.DiskOperator()
|
||||
|
||||
def _check_hosts_provisioned(self, hosts):
|
||||
"""Checks that each host is provisioned"""
|
||||
@ -440,29 +438,43 @@ class Health(object):
|
||||
|
||||
return health_ok, output
|
||||
|
||||
def _check_disk_space_on_host(self, host, hostname, min_space_needed, check_free_space):
|
||||
if check_free_space:
|
||||
available_gib = utils.get_available_gib_in_disk(host, host.rootfs_device, self._dbapi)
|
||||
msg = _("Insufficient unallocated disk space on rootdisk for %s. Current\n"
|
||||
"partitions have allocated disk space such that only %.2fGiB is "
|
||||
"available\nbut %.2fGiB unallocated disk space is needed.\n") % (hostname,
|
||||
available_gib,
|
||||
min_space_needed)
|
||||
else:
|
||||
available_gib = utils.get_size_gib_in_disk(host, host.rootfs_device, self._dbapi)
|
||||
msg = _("Insufficient total disk space on rootdisk for %s, %.2fGiB needed, "
|
||||
"%.2fGiB available.\n") % (hostname,
|
||||
min_space_needed,
|
||||
available_gib)
|
||||
if available_gib < min_space_needed:
|
||||
return msg
|
||||
|
||||
def _check_free_space_for_upgrade(self):
|
||||
output = ""
|
||||
success = True
|
||||
for ihost in self._dbapi.ihost_get_list():
|
||||
min_space_needed = 0
|
||||
check_free_space = False
|
||||
host = self._dbapi.ihost_get_by_hostname(ihost.hostname)
|
||||
host_subfunctions = host.subfunctions.split(",")
|
||||
if constants.WORKER in host_subfunctions:
|
||||
available_mib = self._idisk_operator.get_disk_available_mib(host.rootfs_device)
|
||||
available_gib = available_mib / 1024
|
||||
if available_gib < constants.UPGRADE_FREE_SPACE_NEEDED_IN_GIB:
|
||||
output += _("Insufficient free diskspace on rootdisk for %s, %iGiB needed, "
|
||||
"%.2fGiB available\n") % (ihost.hostname,
|
||||
constants.UPGRADE_FREE_SPACE_NEEDED_IN_GIB,
|
||||
available_gib)
|
||||
success = False
|
||||
elif constants.STORAGE in host_subfunctions or constants.WORKER not in host_subfunctions:
|
||||
cgtsvg_max_free_gib = utils.get_cgtsvg_available_gib(host, self._dbapi)
|
||||
if cgtsvg_max_free_gib < constants.UPGRADE_FREE_SPACE_NEEDED_IN_GIB:
|
||||
output += _("Insufficient free diskspace on cgts-vg for %s, %iGiB needed, "
|
||||
"%.2fGiB available \n") % (ihost.hostname,
|
||||
constants.UPGRADE_FREE_SPACE_NEEDED_IN_GIB,
|
||||
cgtsvg_max_free_gib)
|
||||
success = False
|
||||
min_space_needed = constants.WORKER_UPGRADE_FREE_SPACE_NEEDED_IN_GIB
|
||||
check_free_space = True
|
||||
elif constants.STORAGE in host_subfunctions:
|
||||
min_space_needed = constants.STORAGE_UPGRADE_SPACE_NEEDED_IN_GIB
|
||||
elif constants.CONTROLLER in host_subfunctions:
|
||||
min_space_needed = constants.CONTROLLER_UPGRADE_SPACE_NEEDED_IN_GIB
|
||||
msg = self._check_disk_space_on_host(
|
||||
host, ihost.hostname, min_space_needed, check_free_space)
|
||||
if msg:
|
||||
output += msg
|
||||
success = False
|
||||
return output, success
|
||||
|
||||
def get_system_health_upgrade(self,
|
||||
@ -572,10 +584,11 @@ class Health(object):
|
||||
% (Health.SUCCESS_MSG if success else Health.FAIL_MSG)
|
||||
|
||||
health_ok = health_ok and success
|
||||
# TODO (luisbonatti): remove when CentOS to Debian upgrade is deprecated
|
||||
if upgrade_version == tsc.SW_VERSION_22_12:
|
||||
msg, success = self._check_free_space_for_upgrade()
|
||||
output += \
|
||||
_('Free disk requirement: [%s]\n') \
|
||||
_('Disk space requirement: [%s]\n') \
|
||||
% (Health.SUCCESS_MSG if success else Health.FAIL_MSG)
|
||||
if not success:
|
||||
output += msg
|
||||
|
@ -1674,21 +1674,28 @@ def is_single_controller(dbapi):
|
||||
return False
|
||||
|
||||
|
||||
def get_cgtsvg_available_gib(host, dbapi):
|
||||
"""Calculate free space cgtsvg
|
||||
returns: cgtsvg free space in GiB
|
||||
def get_size_gib_in_disk(host, device_path, dbapi):
|
||||
"""Get the size for the device path
|
||||
returns: size space in GiB
|
||||
"""
|
||||
cgtsvg_free_mib = 0
|
||||
ilvgs = dbapi.ilvg_get_by_ihost(host.uuid)
|
||||
for ilvg in ilvgs:
|
||||
if (ilvg.lvm_vg_name == constants.LVG_CGTS_VG and
|
||||
ilvg.lvm_vg_size and ilvg.lvm_vg_total_pe):
|
||||
cgtsvg_free_mib = (int(ilvg.lvm_vg_size) * int(
|
||||
ilvg.lvm_vg_free_pe)
|
||||
/ int(ilvg.lvm_vg_total_pe)) / (1024 * 1024)
|
||||
break
|
||||
cgtsvg_free_gib = (cgtsvg_free_mib // 1024)
|
||||
return cgtsvg_free_gib
|
||||
size_gib = 0
|
||||
disks = dbapi.idisk_get_by_ihost(host.uuid)
|
||||
for disk in disks:
|
||||
if disk.device_path == device_path:
|
||||
size_gib = disk.size_mib / 1024
|
||||
return size_gib
|
||||
|
||||
|
||||
def get_available_gib_in_disk(host, device_path, dbapi):
|
||||
"""Get the free space for the device path
|
||||
returns: Free space in GiB
|
||||
"""
|
||||
available_gib = 0
|
||||
disks = dbapi.idisk_get_by_ihost(host.uuid)
|
||||
for disk in disks:
|
||||
if disk.device_path == device_path:
|
||||
available_gib = disk.available_mib / 1024
|
||||
return available_gib
|
||||
|
||||
|
||||
def is_partition_the_last(dbapi, partition):
|
||||
|
Loading…
x
Reference in New Issue
Block a user