380d92cc7a
When the lvm package gets installed the meta service does not gets started automatically, but it becomes enabled so it would be running on the next reboot. The lvm commands are configured to use this service. In the past this issue just causes warnings in the cinder log, but now it can lead to a real issue. It is better to ensure it is really running, because it speeds up the lvm related commands. Change-Id: I17fe2c3bcf77a6505ed2b6c824c5b20807beb725
147 lines
4.1 KiB
Plaintext
147 lines
4.1 KiB
Plaintext
# lib/lvm
|
|
# Configure the default LVM volume group used by Cinder and Nova
|
|
|
|
# Dependencies:
|
|
#
|
|
# - ``functions`` file
|
|
# - ``cinder`` configurations
|
|
|
|
# DATA_DIR
|
|
|
|
# clean_default_volume_group - called from clean()
|
|
# configure_default_volume_group - called from configure()
|
|
# init_default_volume_group - called from init()
|
|
|
|
|
|
# Save trace setting
|
|
MY_XTRACE=$(set +o | grep xtrace)
|
|
set +o xtrace
|
|
|
|
|
|
# Defaults
|
|
# --------
|
|
# Name of the lvm volume groups to use/create for iscsi volumes
|
|
# This monkey-motion is for compatibility with icehouse-generation Grenade
|
|
# If ``VOLUME_GROUP`` is set, use it, otherwise we'll build a VG name based
|
|
# on ``VOLUME_GROUP_NAME`` that includes the backend name
|
|
# Grenade doesn't use ``VOLUME_GROUP2`` so it is left out
|
|
VOLUME_GROUP_NAME=${VOLUME_GROUP:-${VOLUME_GROUP_NAME:-stack-volumes}}
|
|
DEFAULT_VOLUME_GROUP_NAME=$VOLUME_GROUP_NAME-default
|
|
|
|
# Backing file name is of the form $VOLUME_GROUP$BACKING_FILE_SUFFIX
|
|
BACKING_FILE_SUFFIX=-backing-file
|
|
|
|
|
|
# Entry Points
|
|
# ------------
|
|
|
|
# _clean_lvm_volume_group removes all default LVM volumes
|
|
#
|
|
# Usage: clean_lvm_volume_group $vg
|
|
function _clean_lvm_volume_group {
|
|
local vg=$1
|
|
|
|
# Clean out existing volumes
|
|
sudo lvremove -f $vg
|
|
}
|
|
|
|
# _clean_lvm_backing_file() removes the backing file of the
|
|
# volume group
|
|
#
|
|
# Usage: _clean_lvm_backing_file() $backing_file
|
|
function _clean_lvm_backing_file {
|
|
local backing_file=$1
|
|
|
|
# if the backing physical device is a loop device, it was probably setup by devstack
|
|
if [[ -n "$backing_file" ]] && [[ -e "$backing_file" ]]; then
|
|
local vg_dev=$(sudo losetup -j $backing_file | awk -F':' '/'$BACKING_FILE_SUFFIX'/ { print $1}')
|
|
sudo losetup -d $vg_dev
|
|
rm -f $backing_file
|
|
fi
|
|
}
|
|
|
|
# clean_lvm_volume_group() cleans up the volume group and removes the
|
|
# backing file
|
|
#
|
|
# Usage: clean_lvm_volume_group $vg
|
|
function clean_lvm_volume_group {
|
|
local vg=$1
|
|
|
|
_clean_lvm_volume_group $vg
|
|
# if there is no logical volume left, it's safe to attempt a cleanup
|
|
# of the backing file
|
|
if [[ -z "$(sudo lvs --noheadings -o lv_name $vg 2>/dev/null)" ]]; then
|
|
_clean_lvm_backing_file $DATA_DIR/$vg$BACKING_FILE_SUFFIX
|
|
fi
|
|
}
|
|
|
|
|
|
# _create_volume_group creates default volume group
|
|
#
|
|
# Usage: _create_lvm_volume_group() $vg $size
|
|
function _create_lvm_volume_group {
|
|
local vg=$1
|
|
local size=$2
|
|
|
|
local backing_file=$DATA_DIR/$vg$BACKING_FILE_SUFFIX
|
|
if ! sudo vgs $vg; then
|
|
# Only create if the file doesn't already exists
|
|
[[ -f $backing_file ]] || truncate -s $size $backing_file
|
|
local vg_dev=`sudo losetup -f --show $backing_file`
|
|
|
|
# Only create volume group if it doesn't already exist
|
|
if ! sudo vgs $vg; then
|
|
sudo vgcreate $vg $vg_dev
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# init_lvm_volume_group() initializes the volume group creating the backing
|
|
# file if necessary
|
|
#
|
|
# Usage: init_lvm_volume_group() $vg
|
|
function init_lvm_volume_group {
|
|
local vg=$1
|
|
local size=$2
|
|
|
|
# Start the lvmetad and tgtd services
|
|
if is_fedora || is_suse; then
|
|
# services is not started by default
|
|
start_service lvm2-lvmetad
|
|
start_service tgtd
|
|
fi
|
|
|
|
# Start with a clean volume group
|
|
_create_lvm_volume_group $vg $size
|
|
|
|
# Remove iscsi targets
|
|
sudo tgtadm --op show --mode target | grep Target | cut -f3 -d ' ' | sudo xargs -n1 tgt-admin --delete || true
|
|
|
|
_clean_lvm_volume_group $vg
|
|
}
|
|
|
|
# Sentinal value to ensure that init of default lvm volume group is
|
|
# only performed once across calls of init_default_lvm_volume_group.
|
|
_DEFAULT_LVM_INIT=${_DEFAULT_LVM_INIT:-0}
|
|
|
|
# init_default_lvm_volume_group() initializes a default volume group
|
|
# intended to be shared between cinder and nova. It is idempotent;
|
|
# the init of the default volume group is guaranteed to be performed
|
|
# only once so that either or both of the dependent services can
|
|
# safely call this function.
|
|
#
|
|
# Usage: init_default_lvm_volume_group()
|
|
function init_default_lvm_volume_group {
|
|
if [[ "$_DEFAULT_LVM_INIT" = "0" ]]; then
|
|
init_lvm_volume_group $DEFAULT_VOLUME_GROUP_NAME $VOLUME_BACKING_FILE_SIZE
|
|
_DEFAULT_LVM_INIT=1
|
|
fi
|
|
}
|
|
|
|
|
|
# Restore xtrace
|
|
$MY_XTRACE
|
|
|
|
# mode: shell-script
|
|
# End:
|