From c70605d1013296d0127ad38d8c53a69ed982e647 Mon Sep 17 00:00:00 2001 From: Attila Fazekas Date: Mon, 26 Jan 2015 15:44:47 +0100 Subject: [PATCH] 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 --- files/debs/cinder | 2 +- files/rpms-suse/cinder | 2 +- files/rpms/cinder | 2 +- lib/cinder | 95 ++++++++++++++++++++++------------------- lib/cinder_backends/lvm | 2 +- lib/lvm | 11 +++-- 6 files changed, 63 insertions(+), 51 deletions(-) diff --git a/files/debs/cinder b/files/debs/cinder index 7819c31655..51908eb27b 100644 --- a/files/debs/cinder +++ b/files/debs/cinder @@ -1,4 +1,4 @@ -tgt +tgt # NOPRIME lvm2 qemu-utils libpq-dev diff --git a/files/rpms-suse/cinder b/files/rpms-suse/cinder index 55078da27c..3fd03cc9be 100644 --- a/files/rpms-suse/cinder +++ b/files/rpms-suse/cinder @@ -1,5 +1,5 @@ lvm2 -tgt +tgt # NOPRIME qemu-tools python-devel postgresql-devel diff --git a/files/rpms/cinder b/files/rpms/cinder index 9f1359f988..a88503b8bc 100644 --- a/files/rpms/cinder +++ b/files/rpms/cinder @@ -1,5 +1,5 @@ lvm2 -scsi-target-utils +scsi-target-utils # NOPRIME qemu-img postgresql-devel iscsi-initiator-utils diff --git a/lib/cinder b/lib/cinder index ef68d8d643..f257afcdb6 100644 --- a/lib/cinder +++ b/lib/cinder @@ -88,6 +88,8 @@ CINDER_SECURE_DELETE=$(trueorfalse True CINDER_SECURE_DELETE) # https://bugs.launchpad.net/cinder/+bug/1180976 CINDER_PERIODIC_INTERVAL=${CINDER_PERIODIC_INTERVAL:-60} +CINDER_ISCSI_HELPER=${CINDER_ISCSI_HELPER:-tgtadm} + # Tell Tempest this project is present TEMPEST_SERVICES+=,cinder @@ -125,31 +127,35 @@ function is_cinder_enabled { function cleanup_cinder { # ensure the volume group is cleared up because fails might # leave dead volumes in the group - local targets=$(sudo tgtadm --op show --mode target) - if [ $? -ne 0 ]; then - # If tgt driver isn't running this won't work obviously - # So check the response and restart if need be - echo "tgtd seems to be in a bad state, restarting..." - if is_ubuntu; then - restart_service tgt - else - restart_service tgtd + if [ "$CINDER_ISCSI_HELPER" = "tgtadm" ]; then + local targets=$(sudo tgtadm --op show --mode target) + if [ $? -ne 0 ]; then + # If tgt driver isn't running this won't work obviously + # So check the response and restart if need be + echo "tgtd seems to be in a bad state, restarting..." + if is_ubuntu; then + restart_service tgt + else + restart_service tgtd + fi + targets=$(sudo tgtadm --op show --mode target) fi - targets=$(sudo tgtadm --op show --mode target) - fi - if [[ -n "$targets" ]]; then - local iqn_list=( $(grep --no-filename -r iqn $SCSI_PERSIST_DIR | sed 's///') ) - for i in "${iqn_list[@]}"; do - echo removing iSCSI target: $i - sudo tgt-admin --delete $i - done - fi + if [[ -n "$targets" ]]; then + local iqn_list=( $(grep --no-filename -r iqn $SCSI_PERSIST_DIR | sed 's///') ) + for i in "${iqn_list[@]}"; do + echo removing iSCSI target: $i + sudo tgt-admin --delete $i + done + fi - if is_ubuntu; then - stop_service tgt + if is_ubuntu; then + stop_service tgt + else + stop_service tgtd + fi else - stop_service tgtd + sudo cinder-rtstool get-targets | sudo xargs -rn 1 cinder-rtstool delete fi 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 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 DEFAULT api_paste_config $CINDER_API_PASTE_INI iniset $CINDER_CONF DEFAULT rootwrap_config "$CINDER_CONF_DIR/rootwrap.conf" @@ -388,6 +394,13 @@ function init_cinder { function install_cinder { git_clone $CINDER_REPO $CINDER_DIR $CINDER_BRANCH 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 @@ -415,21 +428,23 @@ function start_cinder { service_port=$CINDER_SERVICE_PORT_INT service_protocol="http" fi - if is_service_enabled c-vol; then - # Delete any old stack.conf - sudo rm -f /etc/tgt/conf.d/stack.conf - _configure_tgt_for_config_d - if is_ubuntu; then - sudo service tgt restart - elif is_fedora || is_suse; then - restart_service tgtd - else - # note for other distros: unstack.sh also uses the tgt/tgtd service - # name, and would need to be adjusted too - exit_distro_not_supported "restarting tgt" + if [ "$CINDER_ISCSI_HELPER" = "tgtadm" ]; then + if is_service_enabled c-vol; then + # Delete any old stack.conf + sudo rm -f /etc/tgt/conf.d/stack.conf + _configure_tgt_for_config_d + if is_ubuntu; then + sudo service tgt restart + elif is_fedora || is_suse; then + restart_service tgtd + else + # note for other distros: unstack.sh also uses the tgt/tgtd service + # 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 - # NOTE(gfidente): ensure tgtd is running in debug mode - sudo tgtadm --mode system --op update --name debug --value on fi 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 stop_process $serv 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 diff --git a/lib/cinder_backends/lvm b/lib/cinder_backends/lvm index f210578339..d369c0c840 100644 --- a/lib/cinder_backends/lvm +++ b/lib/cinder_backends/lvm @@ -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_driver "cinder.volume.drivers.lvm.LVMVolumeDriver" 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 iniset $CINDER_CONF $be_name volume_clear none diff --git a/lib/lvm b/lib/lvm index d0322c76b3..519e82c806 100644 --- a/lib/lvm +++ b/lib/lvm @@ -108,15 +108,20 @@ function init_lvm_volume_group { if is_fedora || is_suse; then # services is not started by default start_service lvm2-lvmetad - start_service tgtd + if [ "$CINDER_ISCSI_HELPER" = "tgtadm" ]; then + start_service tgtd + fi 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 - + 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 }