Add lioadm cinder iscsi helper support

The Linux-IO is a modern way of handling targets.
Per the IRC discussions lioadm as default
seams like a better default for everyone, for now it will be
optional, but the tgtadm admin support expected to be removed when
lioadm works well with all CI (including third party).

Change-Id: Ia54c59914c1d3ff2ef5f00ecf819426bc448d0a9
This commit is contained in:
Attila Fazekas 2015-01-26 15:44:47 +01:00
parent c9b24ffdf5
commit c70605d101
6 changed files with 63 additions and 51 deletions

View File

@ -1,4 +1,4 @@
tgt tgt # NOPRIME
lvm2 lvm2
qemu-utils qemu-utils
libpq-dev libpq-dev

View File

@ -1,5 +1,5 @@
lvm2 lvm2
tgt tgt # NOPRIME
qemu-tools qemu-tools
python-devel python-devel
postgresql-devel postgresql-devel

View File

@ -1,5 +1,5 @@
lvm2 lvm2
scsi-target-utils scsi-target-utils # NOPRIME
qemu-img qemu-img
postgresql-devel postgresql-devel
iscsi-initiator-utils iscsi-initiator-utils

View File

@ -88,6 +88,8 @@ CINDER_SECURE_DELETE=$(trueorfalse True CINDER_SECURE_DELETE)
# https://bugs.launchpad.net/cinder/+bug/1180976 # https://bugs.launchpad.net/cinder/+bug/1180976
CINDER_PERIODIC_INTERVAL=${CINDER_PERIODIC_INTERVAL:-60} CINDER_PERIODIC_INTERVAL=${CINDER_PERIODIC_INTERVAL:-60}
CINDER_ISCSI_HELPER=${CINDER_ISCSI_HELPER:-tgtadm}
# Tell Tempest this project is present # Tell Tempest this project is present
TEMPEST_SERVICES+=,cinder TEMPEST_SERVICES+=,cinder
@ -125,31 +127,35 @@ function is_cinder_enabled {
function cleanup_cinder { function cleanup_cinder {
# ensure the volume group is cleared up because fails might # ensure the volume group is cleared up because fails might
# leave dead volumes in the group # leave dead volumes in the group
local targets=$(sudo tgtadm --op show --mode target) if [ "$CINDER_ISCSI_HELPER" = "tgtadm" ]; then
if [ $? -ne 0 ]; then local targets=$(sudo tgtadm --op show --mode target)
# If tgt driver isn't running this won't work obviously if [ $? -ne 0 ]; then
# So check the response and restart if need be # If tgt driver isn't running this won't work obviously
echo "tgtd seems to be in a bad state, restarting..." # So check the response and restart if need be
if is_ubuntu; then echo "tgtd seems to be in a bad state, restarting..."
restart_service tgt if is_ubuntu; then
else restart_service tgt
restart_service tgtd else
restart_service tgtd
fi
targets=$(sudo tgtadm --op show --mode target)
fi fi
targets=$(sudo tgtadm --op show --mode target)
fi
if [[ -n "$targets" ]]; then if [[ -n "$targets" ]]; then
local iqn_list=( $(grep --no-filename -r iqn $SCSI_PERSIST_DIR | sed 's/<target //' | sed 's/>//') ) local iqn_list=( $(grep --no-filename -r iqn $SCSI_PERSIST_DIR | sed 's/<target //' | sed 's/>//') )
for i in "${iqn_list[@]}"; do for i in "${iqn_list[@]}"; do
echo removing iSCSI target: $i echo removing iSCSI target: $i
sudo tgt-admin --delete $i sudo tgt-admin --delete $i
done done
fi fi
if is_ubuntu; then if is_ubuntu; then
stop_service tgt stop_service tgt
else
stop_service tgtd
fi
else else
stop_service tgtd sudo cinder-rtstool get-targets | sudo xargs -rn 1 cinder-rtstool delete
fi fi
if is_service_enabled c-vol && [[ -n "$CINDER_ENABLED_BACKENDS" ]]; then if is_service_enabled c-vol && [[ -n "$CINDER_ENABLED_BACKENDS" ]]; then
@ -224,7 +230,7 @@ function configure_cinder {
iniset $CINDER_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL iniset $CINDER_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL
iniset $CINDER_CONF DEFAULT verbose True iniset $CINDER_CONF DEFAULT verbose True
iniset $CINDER_CONF DEFAULT iscsi_helper tgtadm iniset $CINDER_CONF DEFAULT iscsi_helper "$CINDER_ISCSI_HELPER"
iniset $CINDER_CONF database connection `database_connection_url cinder` iniset $CINDER_CONF database connection `database_connection_url cinder`
iniset $CINDER_CONF DEFAULT api_paste_config $CINDER_API_PASTE_INI iniset $CINDER_CONF DEFAULT api_paste_config $CINDER_API_PASTE_INI
iniset $CINDER_CONF DEFAULT rootwrap_config "$CINDER_CONF_DIR/rootwrap.conf" iniset $CINDER_CONF DEFAULT rootwrap_config "$CINDER_CONF_DIR/rootwrap.conf"
@ -388,6 +394,13 @@ function init_cinder {
function install_cinder { function install_cinder {
git_clone $CINDER_REPO $CINDER_DIR $CINDER_BRANCH git_clone $CINDER_REPO $CINDER_DIR $CINDER_BRANCH
setup_develop $CINDER_DIR setup_develop $CINDER_DIR
if [ "$CINDER_ISCSI_HELPER" = "tgtadm" ]; then
if is_fedora; then
install_package scsi-target-utils
else
install_package tgt
fi
fi
} }
# install_cinderclient() - Collect source and prepare # install_cinderclient() - Collect source and prepare
@ -415,21 +428,23 @@ function start_cinder {
service_port=$CINDER_SERVICE_PORT_INT service_port=$CINDER_SERVICE_PORT_INT
service_protocol="http" service_protocol="http"
fi fi
if is_service_enabled c-vol; then if [ "$CINDER_ISCSI_HELPER" = "tgtadm" ]; then
# Delete any old stack.conf if is_service_enabled c-vol; then
sudo rm -f /etc/tgt/conf.d/stack.conf # Delete any old stack.conf
_configure_tgt_for_config_d sudo rm -f /etc/tgt/conf.d/stack.conf
if is_ubuntu; then _configure_tgt_for_config_d
sudo service tgt restart if is_ubuntu; then
elif is_fedora || is_suse; then sudo service tgt restart
restart_service tgtd elif is_fedora || is_suse; then
else restart_service tgtd
# note for other distros: unstack.sh also uses the tgt/tgtd service else
# name, and would need to be adjusted too # note for other distros: unstack.sh also uses the tgt/tgtd service
exit_distro_not_supported "restarting tgt" # name, and would need to be adjusted too
exit_distro_not_supported "restarting tgt"
fi
# NOTE(gfidente): ensure tgtd is running in debug mode
sudo tgtadm --mode system --op update --name debug --value on
fi fi
# NOTE(gfidente): ensure tgtd is running in debug mode
sudo tgtadm --mode system --op update --name debug --value on
fi fi
run_process c-api "$CINDER_BIN_DIR/cinder-api --config-file $CINDER_CONF" run_process c-api "$CINDER_BIN_DIR/cinder-api --config-file $CINDER_CONF"
@ -459,14 +474,6 @@ function stop_cinder {
for serv in c-api c-bak c-sch c-vol; do for serv in c-api c-bak c-sch c-vol; do
stop_process $serv stop_process $serv
done done
if is_service_enabled c-vol; then
if is_ubuntu; then
stop_service tgt
else
stop_service tgtd
fi
fi
} }
# create_volume_types() - Create Cinder's configured volume types # create_volume_types() - Create Cinder's configured volume types

View File

@ -49,7 +49,7 @@ function configure_cinder_backend_lvm {
iniset $CINDER_CONF $be_name volume_backend_name $be_name iniset $CINDER_CONF $be_name volume_backend_name $be_name
iniset $CINDER_CONF $be_name volume_driver "cinder.volume.drivers.lvm.LVMVolumeDriver" iniset $CINDER_CONF $be_name volume_driver "cinder.volume.drivers.lvm.LVMVolumeDriver"
iniset $CINDER_CONF $be_name volume_group $VOLUME_GROUP_NAME-$be_name iniset $CINDER_CONF $be_name volume_group $VOLUME_GROUP_NAME-$be_name
iniset $CINDER_CONF $be_name iscsi_helper "tgtadm" iniset $CINDER_CONF $be_name iscsi_helper "$CINDER_ISCSI_HELPER"
if [[ "$CINDER_SECURE_DELETE" == "False" ]]; then if [[ "$CINDER_SECURE_DELETE" == "False" ]]; then
iniset $CINDER_CONF $be_name volume_clear none iniset $CINDER_CONF $be_name volume_clear none

11
lib/lvm
View File

@ -108,15 +108,20 @@ function init_lvm_volume_group {
if is_fedora || is_suse; then if is_fedora || is_suse; then
# services is not started by default # services is not started by default
start_service lvm2-lvmetad start_service lvm2-lvmetad
start_service tgtd if [ "$CINDER_ISCSI_HELPER" = "tgtadm" ]; then
start_service tgtd
fi
fi fi
# Start with a clean volume group # Start with a clean volume group
_create_lvm_volume_group $vg $size _create_lvm_volume_group $vg $size
# Remove iscsi targets # Remove iscsi targets
sudo tgtadm --op show --mode target | grep Target | cut -f3 -d ' ' | sudo xargs -n1 tgt-admin --delete || true if [ "$CINDER_ISCSI_HELPER" = "lioadm" ]; then
sudo cinder-rtstool get-targets | sudo xargs -rn 1 cinder-rtstool delete
else
sudo tgtadm --op show --mode target | grep Target | cut -f3 -d ' ' | sudo xargs -n1 tgt-admin --delete || true
fi
_clean_lvm_volume_group $vg _clean_lvm_volume_group $vg
} }