Merge "Maintain ceph-osd package only on nodes hosting CephOSD service" into stable/pike

This commit is contained in:
Jenkins 2017-09-08 06:22:09 +00:00 committed by Gerrit Code Review
commit 896517755b
3 changed files with 71 additions and 1 deletions

View File

@ -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
}

View File

@ -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]*")

View File

@ -99,7 +99,6 @@ outputs:
ceph::params::packages:
- ceph-base
- ceph-mon
- ceph-osd
# NOTE: bind IP is found in Heat replacing the network name with the local node IP
# for the given network; replacement examples (eg. for internal_api):
# internal_api -> IP
@ -152,3 +151,9 @@ outputs:
list_join: ['.', ['client', {get_param: CephClientUserName}]]
MANILA_CLIENT_KEY:
list_join: ['.', ['client', {get_param: ManilaCephFSNativeCephFSAuthId}]]
service_config_settings:
ceph_osd:
ceph::params::packages:
- ceph-base
- ceph-mon
- ceph-osd