Maintain ceph-osd package only on nodes hosting CephOSD service
The ceph-osd package is only required on nodes hosting the CephOSD service, but the package's presence on other nodes may interfere with software updates. That's because some distros distribute Ceph software in different channels, and not all nodes have access to the ceph-osd channel. There are two parts to the fix, and the first is an enhancement to the yum update process. The process detects when the ceph-osd package is not required, and removes the package from the node. The second part takes ceph-osd out of the default list of packages needed by puppet-ceph. The ceph-osd package is listed only on the nodes hosting the CephOSD service. Closes-Bug: #1713292 Change-Id: I7a581518ed25cf5f264abfaabfcf2041363a065b
This commit is contained in:
parent
5b968f58ae
commit
5a89ea21f2
@ -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
|
||||
}
|
||||
|
@ -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]*")
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user