Browse code

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

Attila Fazekas authored on 2015/01/26 23:44:47
Showing 6 changed files
... ...
@@ -1,4 +1,4 @@
1
-tgt
1
+tgt # NOPRIME
2 2
 lvm2
3 3
 qemu-utils
4 4
 libpq-dev
... ...
@@ -1,5 +1,5 @@
1 1
 lvm2
2
-tgt
2
+tgt # NOPRIME
3 3
 qemu-tools
4 4
 python-devel
5 5
 postgresql-devel
... ...
@@ -1,5 +1,5 @@
1 1
 lvm2
2
-scsi-target-utils
2
+scsi-target-utils # NOPRIME
3 3
 qemu-img
4 4
 postgresql-devel
5 5
 iscsi-initiator-utils
... ...
@@ -88,6 +88,8 @@ CINDER_SECURE_DELETE=$(trueorfalse True CINDER_SECURE_DELETE)
88 88
 # https://bugs.launchpad.net/cinder/+bug/1180976
89 89
 CINDER_PERIODIC_INTERVAL=${CINDER_PERIODIC_INTERVAL:-60}
90 90
 
91
+CINDER_ISCSI_HELPER=${CINDER_ISCSI_HELPER:-tgtadm}
92
+
91 93
 # Tell Tempest this project is present
92 94
 TEMPEST_SERVICES+=,cinder
93 95
 
... ...
@@ -125,31 +127,35 @@ function is_cinder_enabled {
125 125
 function cleanup_cinder {
126 126
     # ensure the volume group is cleared up because fails might
127 127
     # leave dead volumes in the group
128
-    local targets=$(sudo tgtadm --op show --mode target)
129
-    if [ $? -ne 0 ]; then
130
-        # If tgt driver isn't running this won't work obviously
131
-        # So check the response and restart if need be
132
-        echo "tgtd seems to be in a bad state, restarting..."
133
-        if is_ubuntu; then
134
-            restart_service tgt
135
-        else
136
-            restart_service tgtd
128
+    if [ "$CINDER_ISCSI_HELPER" = "tgtadm" ]; then
129
+        local targets=$(sudo tgtadm --op show --mode target)
130
+        if [ $? -ne 0 ]; then
131
+            # If tgt driver isn't running this won't work obviously
132
+            # So check the response and restart if need be
133
+            echo "tgtd seems to be in a bad state, restarting..."
134
+            if is_ubuntu; then
135
+                restart_service tgt
136
+            else
137
+                restart_service tgtd
138
+            fi
139
+            targets=$(sudo tgtadm --op show --mode target)
137 140
         fi
138
-        targets=$(sudo tgtadm --op show --mode target)
139
-    fi
140 141
 
141
-    if [[ -n "$targets" ]]; then
142
-        local iqn_list=( $(grep --no-filename -r iqn $SCSI_PERSIST_DIR | sed 's/<target //' | sed 's/>//') )
143
-        for i in "${iqn_list[@]}"; do
144
-            echo removing iSCSI target: $i
145
-            sudo tgt-admin --delete $i
146
-        done
147
-    fi
142
+        if [[ -n "$targets" ]]; then
143
+            local iqn_list=( $(grep --no-filename -r iqn $SCSI_PERSIST_DIR | sed 's/<target //' | sed 's/>//') )
144
+            for i in "${iqn_list[@]}"; do
145
+                echo removing iSCSI target: $i
146
+                sudo tgt-admin --delete $i
147
+            done
148
+        fi
148 149
 
149
-    if is_ubuntu; then
150
-        stop_service tgt
150
+        if is_ubuntu; then
151
+            stop_service tgt
152
+        else
153
+            stop_service tgtd
154
+        fi
151 155
     else
152
-        stop_service tgtd
156
+        sudo cinder-rtstool get-targets | sudo xargs -rn 1 cinder-rtstool delete
153 157
     fi
154 158
 
155 159
     if is_service_enabled c-vol && [[ -n "$CINDER_ENABLED_BACKENDS" ]]; then
... ...
@@ -224,7 +230,7 @@ function configure_cinder {
224 224
     iniset $CINDER_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL
225 225
     iniset $CINDER_CONF DEFAULT verbose True
226 226
 
227
-    iniset $CINDER_CONF DEFAULT iscsi_helper tgtadm
227
+    iniset $CINDER_CONF DEFAULT iscsi_helper "$CINDER_ISCSI_HELPER"
228 228
     iniset $CINDER_CONF database connection `database_connection_url cinder`
229 229
     iniset $CINDER_CONF DEFAULT api_paste_config $CINDER_API_PASTE_INI
230 230
     iniset $CINDER_CONF DEFAULT rootwrap_config "$CINDER_CONF_DIR/rootwrap.conf"
... ...
@@ -388,6 +394,13 @@ function init_cinder {
388 388
 function install_cinder {
389 389
     git_clone $CINDER_REPO $CINDER_DIR $CINDER_BRANCH
390 390
     setup_develop $CINDER_DIR
391
+    if [ "$CINDER_ISCSI_HELPER" = "tgtadm" ]; then
392
+        if is_fedora; then
393
+            install_package scsi-target-utils
394
+        else
395
+            install_package tgt
396
+        fi
397
+    fi
391 398
 }
392 399
 
393 400
 # install_cinderclient() - Collect source and prepare
... ...
@@ -415,21 +428,23 @@ function start_cinder {
415 415
         service_port=$CINDER_SERVICE_PORT_INT
416 416
         service_protocol="http"
417 417
     fi
418
-    if is_service_enabled c-vol; then
419
-        # Delete any old stack.conf
420
-        sudo rm -f /etc/tgt/conf.d/stack.conf
421
-        _configure_tgt_for_config_d
422
-        if is_ubuntu; then
423
-            sudo service tgt restart
424
-        elif is_fedora || is_suse; then
425
-            restart_service tgtd
426
-        else
427
-            # note for other distros: unstack.sh also uses the tgt/tgtd service
428
-            # name, and would need to be adjusted too
429
-            exit_distro_not_supported "restarting tgt"
418
+    if [ "$CINDER_ISCSI_HELPER" = "tgtadm" ]; then
419
+        if is_service_enabled c-vol; then
420
+            # Delete any old stack.conf
421
+            sudo rm -f /etc/tgt/conf.d/stack.conf
422
+            _configure_tgt_for_config_d
423
+            if is_ubuntu; then
424
+                sudo service tgt restart
425
+            elif is_fedora || is_suse; then
426
+                restart_service tgtd
427
+            else
428
+                # note for other distros: unstack.sh also uses the tgt/tgtd service
429
+                # name, and would need to be adjusted too
430
+                exit_distro_not_supported "restarting tgt"
431
+            fi
432
+            # NOTE(gfidente): ensure tgtd is running in debug mode
433
+            sudo tgtadm --mode system --op update --name debug --value on
430 434
         fi
431
-        # NOTE(gfidente): ensure tgtd is running in debug mode
432
-        sudo tgtadm --mode system --op update --name debug --value on
433 435
     fi
434 436
 
435 437
     run_process c-api "$CINDER_BIN_DIR/cinder-api --config-file $CINDER_CONF"
... ...
@@ -459,14 +474,6 @@ function stop_cinder {
459 459
     for serv in c-api c-bak c-sch c-vol; do
460 460
         stop_process $serv
461 461
     done
462
-
463
-    if is_service_enabled c-vol; then
464
-        if is_ubuntu; then
465
-            stop_service tgt
466
-        else
467
-            stop_service tgtd
468
-        fi
469
-    fi
470 462
 }
471 463
 
472 464
 # create_volume_types() - Create Cinder's configured volume types
... ...
@@ -49,7 +49,7 @@ function configure_cinder_backend_lvm {
49 49
     iniset $CINDER_CONF $be_name volume_backend_name $be_name
50 50
     iniset $CINDER_CONF $be_name volume_driver "cinder.volume.drivers.lvm.LVMVolumeDriver"
51 51
     iniset $CINDER_CONF $be_name volume_group $VOLUME_GROUP_NAME-$be_name
52
-    iniset $CINDER_CONF $be_name iscsi_helper "tgtadm"
52
+    iniset $CINDER_CONF $be_name iscsi_helper "$CINDER_ISCSI_HELPER"
53 53
 
54 54
     if [[ "$CINDER_SECURE_DELETE" == "False" ]]; then
55 55
         iniset $CINDER_CONF $be_name volume_clear none
... ...
@@ -108,15 +108,20 @@ function init_lvm_volume_group {
108 108
     if is_fedora || is_suse; then
109 109
         # services is not started by default
110 110
         start_service lvm2-lvmetad
111
-        start_service tgtd
111
+        if [ "$CINDER_ISCSI_HELPER" = "tgtadm" ]; then
112
+            start_service tgtd
113
+        fi
112 114
     fi
113 115
 
114 116
     # Start with a clean volume group
115 117
     _create_lvm_volume_group $vg $size
116 118
 
117 119
     # Remove iscsi targets
118
-    sudo tgtadm --op show --mode target | grep Target | cut -f3 -d ' ' | sudo xargs -n1 tgt-admin --delete || true
119
-
120
+    if [ "$CINDER_ISCSI_HELPER" = "lioadm" ]; then
121
+        sudo cinder-rtstool get-targets | sudo xargs -rn 1 cinder-rtstool delete
122
+    else
123
+        sudo tgtadm --op show --mode target | grep Target | cut -f3 -d ' ' | sudo xargs -n1 tgt-admin --delete || true
124
+    fi
120 125
     _clean_lvm_volume_group $vg
121 126
 }
122 127