diff options
Diffstat (limited to 'extraconfig/tasks')
-rwxr-xr-x | extraconfig/tasks/pacemaker_common_functions.sh | 62 | ||||
-rwxr-xr-x | extraconfig/tasks/yum_update.sh | 3 |
2 files changed, 65 insertions, 0 deletions
diff --git a/extraconfig/tasks/pacemaker_common_functions.sh b/extraconfig/tasks/pacemaker_common_functions.sh index 367f50d7..eb004070 100755 --- a/extraconfig/tasks/pacemaker_common_functions.sh +++ b/extraconfig/tasks/pacemaker_common_functions.sh @@ -383,3 +383,65 @@ worfklow. Exiting." exit 1 fi } + +# This function tries to resolve an RPM dependency issue that can arise when +# updating ceph packages on nodes that do not run the ceph-osd service. These +# nodes do not require the ceph-osd package, and updates will fail if the +# ceph-osd package cannot be updated because it's not available in any enabled +# repo. The dependency issue is resolved by removing the ceph-osd package from +# nodes that don't require it. +# +# No change is made to nodes that use the ceph-osd service (e.g. ceph storage +# nodes, and hyperconverged nodes running ceph-osd and compute services). The +# ceph-osd package is left in place, and the currently enabled repos will be +# used to update all ceph packages. +function yum_pre_update { + echo "Checking for ceph-osd dependency issues" + + # No need to proceed if the ceph-osd package isn't installed + if ! rpm -q ceph-osd >/dev/null 2>&1; then + echo "ceph-osd package is not installed" + return + fi + + # Do not proceed if there's any sign that the ceph-osd package is in use: + # - Are there OSD entries in /var/lib/ceph/osd? + # - Are any ceph-osd processes running? + # - Are there any ceph data disks (as identified by 'ceph-disk') + if [ -n "$(ls -A /var/lib/ceph/osd 2>/dev/null)" ]; then + echo "ceph-osd package is required (there are OSD entries in /var/lib/ceph/osd)" + return + fi + + if [ "$(pgrep -xc ceph-osd)" != "0" ]; then + echo "ceph-osd package is required (there are ceph-osd processes running)" + return + fi + + if ceph-disk list |& grep -q "ceph data"; then + echo "ceph-osd package is required (ceph data disks detected)" + return + fi + + # Get a list of all ceph packages available from the currently enabled + # repos. Use "--showduplicates" to ensure the list includes installed + # packages that happen to be up to date. + local ceph_pkgs="$(yum list available --showduplicates 'ceph-*' |& awk '/^ceph/ {print $1}' | sort -u)" + + # No need to proceed if no ceph packages are available from the currently + # enabled repos. + if [ -z "$ceph_pkgs" ]; then + echo "ceph packages are not available from any enabled repo" + return + fi + + # No need to proceed if the ceph-osd package *is* available + if [[ $ceph_pkgs =~ ceph-osd ]]; then + echo "ceph-osd package is available from an enabled repo" + return + fi + + echo "ceph-osd package is not required, but is preventing updates to other ceph packages" + echo "Removing ceph-osd package to allow updates to other ceph packages" + yum -y remove ceph-osd +} diff --git a/extraconfig/tasks/yum_update.sh b/extraconfig/tasks/yum_update.sh index a2a04e8e..c0c92a60 100755 --- a/extraconfig/tasks/yum_update.sh +++ b/extraconfig/tasks/yum_update.sh @@ -85,6 +85,9 @@ fi # special case https://bugs.launchpad.net/tripleo/+bug/1635205 +bug/1669714 special_case_ovs_upgrade_if_needed +# Resolve any RPM dependency issues before attempting the update +yum_pre_update + if [[ "$pacemaker_status" == "active" ]] ; then echo "Pacemaker running, stopping cluster node and doing full package update" node_count=$(pcs status xml | grep -o "<nodes_configured.*/>" | grep -o 'number="[0-9]*"' | grep -o "[0-9]*") |