devstack/lib/n-vol
Mate Lakat a39caacad3 Make sure tgt is using config.d approach
Fixes bug 1045358.

On ubuntu Oneiric, the tgt configuration was not using the config.d
approach. tgt was unable to find the config files, so no volumes could
be created. This fix makes sure, that the config.d directory is there,
and the configuration includes files from there.

Was Cinder only, added same fix for Nova volumes

Change-Id: I6752cb628dd22e91e640f0f584fafefa4cd6d0f1
2012-09-09 19:03:46 -05:00

121 lines
3.6 KiB
Plaintext

# lib/n-vol
# Install and start Nova volume service
# Dependencies:
# - functions
# - KEYSTONE_AUTH_* must be defined
# SERVICE_{TENANT_NAME|PASSWORD} must be defined
# _configure_tgt_for_config_d() from lib/cinder
# stack.sh
# ---------
# install_nvol
# configure_nvol
# init_nvol
# start_nvol
# stop_nvol
# cleanup_nvol
# Print the commands being run so that we can see the command that triggers
# an error. It is also useful for following along as the install occurs.
set -o xtrace
# Defaults
# --------
# Name of the LVM volume group to use/create for iscsi volumes
VOLUME_GROUP=${VOLUME_GROUP:-stack-volumes}
VOLUME_NAME_PREFIX=${VOLUME_NAME_PREFIX:-volume-}
# cleanup_nvol() - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up
function cleanup_nvol() {
# kill instances (nova)
# delete image files (glance)
# This function intentionally left blank
:
}
# configure_nvol() - Set config files, create data dirs, etc
function configure_nvol() {
# sudo python setup.py deploy
# iniset $XXX_CONF ...
# This function intentionally left blank
:
}
# init_nvol() - Initialize databases, etc.
function init_nvol() {
# Configure a default volume group called '`stack-volumes`' for the volume
# service if it does not yet exist. If you don't wish to use a file backed
# volume group, create your own volume group called ``stack-volumes`` before
# invoking ``stack.sh``.
#
# By default, the backing file is 5G in size, and is stored in ``/opt/stack/data``.
if ! sudo vgs $VOLUME_GROUP; then
VOLUME_BACKING_FILE=${VOLUME_BACKING_FILE:-$DATA_DIR/${VOLUME_GROUP}-backing-file}
# Only create if the file doesn't already exists
[[ -f $VOLUME_BACKING_FILE ]] || truncate -s $VOLUME_BACKING_FILE_SIZE $VOLUME_BACKING_FILE
DEV=`sudo losetup -f --show $VOLUME_BACKING_FILE`
# Only create if the loopback device doesn't contain $VOLUME_GROUP
if ! sudo vgs $VOLUME_GROUP; then sudo vgcreate $VOLUME_GROUP $DEV; fi
fi
mkdir -p $NOVA_DIR/volumes
if sudo vgs $VOLUME_GROUP; then
if [[ "$os_PACKAGE" = "rpm" ]]; then
# RPM doesn't start the service
start_service tgtd
fi
# Remove nova iscsi targets
sudo tgtadm --op show --mode target | grep $VOLUME_NAME_PREFIX | grep Target | cut -f3 -d ' ' | sudo xargs -n1 tgt-admin --delete || true
# Clean out existing volumes
for lv in `sudo lvs --noheadings -o lv_name $VOLUME_GROUP`; do
# ``VOLUME_NAME_PREFIX`` prefixes the LVs we want
if [[ "${lv#$VOLUME_NAME_PREFIX}" != "$lv" ]]; then
sudo lvremove -f $VOLUME_GROUP/$lv
fi
done
fi
}
# install_nvol() - Collect source and prepare
function install_nvol() {
# git clone xxx
# Install is handled when installing Nova
:
}
# start_nvol() - Start running processes, including screen
function start_nvol() {
# Setup the tgt configuration file
if [[ ! -f /etc/tgt/conf.d/nova.conf ]]; then
_configure_tgt_for_config_d
sudo mkdir -p /etc/tgt/conf.d
echo "include $NOVA_DIR/volumes/*" | sudo tee /etc/tgt/conf.d/nova.conf
fi
if [[ "$os_PACKAGE" = "deb" ]]; then
# tgt in oneiric doesn't restart properly if tgtd isn't running
# do it in two steps
sudo stop tgt || true
sudo start tgt
else
restart_service tgtd
fi
screen_it n-vol "cd $NOVA_DIR && $NOVA_DIR/bin/nova-volume"
}
# stop_nvol() - Stop running processes (non-screen)
function stop_nvol() {
# FIXME(dtroyer): stop only the n-vol screen window?
stop_service tgt
}