Browse code

Add cinder multi backend support to devstack

* add CINDER_MULTI_LVM_BACKEND parameter
* if CINDER_MULTI_LVM_BACKEND = True, creates 2 LVM volumes
- Name : stack-volumes and stack-volumes2
- Size : 5GB for each of them

Change-Id: I6e03b96e6b2aed0f0c166472300139fba9eaa68b

Jérôme Gallard authored on 2013/02/23 01:28:10
Showing 1 changed files
... ...
@@ -50,8 +50,13 @@ else
50 50
     CINDER_BIN_DIR=$(get_python_exec_prefix)
51 51
 fi
52 52
 
53
-# Name of the lvm volume group to use/create for iscsi volumes
53
+# Support for multi lvm backend configuration (default is no support)
54
+CINDER_MULTI_LVM_BACKEND=$(trueorfalse False $CINDER_MULTI_LVM_BACKEND)
55
+
56
+# Name of the lvm volume groups to use/create for iscsi volumes
57
+# VOLUME_GROUP2 is used only if CINDER_MULTI_LVM_BACKEND = True
54 58
 VOLUME_GROUP=${VOLUME_GROUP:-stack-volumes}
59
+VOLUME_GROUP2=${VOLUME_GROUP2:-stack-volumes2}
55 60
 VOLUME_NAME_PREFIX=${VOLUME_NAME_PREFIX:-volume-}
56 61
 
57 62
 # _clean_volume_group removes all cinder volumes from the specified volume group
... ...
@@ -106,6 +111,9 @@ function cleanup_cinder() {
106 106
 
107 107
     # Campsite rule: leave behind a volume group at least as clean as we found it
108 108
     _clean_volume_group $VOLUME_GROUP $VOLUME_NAME_PREFIX
109
+    if [ "$CINDER_MULTI_LVM_BACKEND" = "True" ]; then
110
+        _clean_volume_group $VOLUME_GROUP2 $VOLUME_NAME_PREFIX
111
+    fi
109 112
 }
110 113
 
111 114
 # configure_cinder() - Set config files, create data dirs, etc
... ...
@@ -164,8 +172,18 @@ function configure_cinder() {
164 164
     cp $CINDER_DIR/etc/cinder/cinder.conf.sample $CINDER_CONF
165 165
     iniset $CINDER_CONF DEFAULT auth_strategy keystone
166 166
     iniset $CINDER_CONF DEFAULT verbose True
167
-    iniset $CINDER_CONF DEFAULT volume_group $VOLUME_GROUP
168
-    iniset $CINDER_CONF DEFAULT volume_name_template ${VOLUME_NAME_PREFIX}%s
167
+    if [ "$CINDER_MULTI_LVM_BACKEND" = "True" ]; then
168
+        iniset $CINDER_CONF DEFAULT enabled_backends lvmdriver-1,lvmdriver-2
169
+        iniset $CINDER_CONF lvmdriver-1 volume_group $VOLUME_GROUP
170
+        iniset $CINDER_CONF lvmdriver-1 volume_driver cinder.volume.drivers.lvm.LVMISCSIDriver
171
+        iniset $CINDER_CONF lvmdriver-1 volume_backend_name LVM_iSCSI
172
+        iniset $CINDER_CONF lvmdriver-2 volume_group $VOLUME_GROUP2
173
+        iniset $CINDER_CONF lvmdriver-2 volume_driver cinder.volume.drivers.lvm.LVMISCSIDriver
174
+        iniset $CINDER_CONF lvmdriver-2 volume_backend_name LVM_iSCSI
175
+    else
176
+        iniset $CINDER_CONF DEFAULT volume_group $VOLUME_GROUP
177
+        iniset $CINDER_CONF DEFAULT volume_name_template ${VOLUME_NAME_PREFIX}%s
178
+    fi
169 179
     iniset $CINDER_CONF DEFAULT iscsi_helper tgtadm
170 180
     local dburl
171 181
     database_connection_url dburl cinder
... ...
@@ -263,12 +281,14 @@ function create_cinder_cache_dir() {
263 263
 }
264 264
 
265 265
 create_cinder_volume_group() {
266
-    # Configure a default volume group called '`stack-volumes`' for the volume
267
-    # service if it does not yet exist.  If you don't wish to use a file backed
268
-    # volume group, create your own volume group called ``stack-volumes`` before
269
-    # invoking ``stack.sh``.
266
+    # According to the CINDER_MULTI_LVM_BACKEND value, configure one or two default volumes
267
+    # group called ``stack-volumes`` (and ``stack-volumes2``) for the volume
268
+    # service if it (they) does (do) not yet exist. If you don't wish to use a
269
+    # file backed volume group, create your own volume group called ``stack-volumes``
270
+    # and ``stack-volumes2`` before invoking ``stack.sh``.
270 271
     #
271
-    # By default, the backing file is 5G in size, and is stored in ``/opt/stack/data``.
272
+    # By default, the two backing files are 5G in size, and are stored in
273
+    # ``/opt/stack/data``.
272 274
 
273 275
     if ! sudo vgs $VOLUME_GROUP; then
274 276
         VOLUME_BACKING_FILE=${VOLUME_BACKING_FILE:-$DATA_DIR/${VOLUME_GROUP}-backing-file}
... ...
@@ -283,6 +303,23 @@ create_cinder_volume_group() {
283 283
             sudo vgcreate $VOLUME_GROUP $DEV
284 284
         fi
285 285
     fi
286
+    if [ "$CINDER_MULTI_LVM_BACKEND" = "True" ]; then
287
+        #set up the second volume if CINDER_MULTI_LVM_BACKEND is enabled
288
+
289
+        if ! sudo vgs $VOLUME_GROUP2; then
290
+            VOLUME_BACKING_FILE2=${VOLUME_BACKING_FILE2:-$DATA_DIR/${VOLUME_GROUP2}-backing-file}
291
+
292
+            # Only create if the file doesn't already exists
293
+            [[ -f $VOLUME_BACKING_FILE2 ]] || truncate -s $VOLUME_BACKING_FILE_SIZE $VOLUME_BACKING_FILE2
294
+
295
+            DEV=`sudo losetup -f --show $VOLUME_BACKING_FILE2`
296
+
297
+            # Only create if the loopback device doesn't contain $VOLUME_GROUP
298
+            if ! sudo vgs $VOLUME_GROUP2; then
299
+                sudo vgcreate $VOLUME_GROUP2 $DEV
300
+            fi
301
+        fi
302
+    fi
286 303
 
287 304
     mkdir -p $CINDER_STATE_PATH/volumes
288 305
 }
... ...
@@ -314,6 +351,9 @@ function init_cinder() {
314 314
             sudo tgtadm --op show --mode target | grep $VOLUME_NAME_PREFIX | grep Target | cut -f3 -d ' ' | sudo xargs -n1 tgt-admin --delete || true
315 315
             # Start with a clean volume group
316 316
             _clean_volume_group $VOLUME_GROUP $VOLUME_NAME_PREFIX
317
+            if [ "$CINDER_MULTI_LVM_BACKEND" = "True" ]; then
318
+                _clean_volume_group $VOLUME_GROUP2 $VOLUME_NAME_PREFIX
319
+            fi
317 320
         fi
318 321
     fi
319 322