On subsequent runs of stack.sh clean out old volumes from $VOLUME_GROUP
(if it exists) and remove the iSCSI targets. Also clean up the handling
when using a backing file rather than a physical disk for the PV.
VOLUME_NAME_PREFIX is used to determine which volumes to delete and to
set volume_name_template in nova.conf.
Change-Id: Iaf9effcc7e0ea5cdfad7bb180e67089e7f8b3583
| ... | ... |
@@ -160,6 +160,7 @@ ENABLED_SERVICES=${ENABLED_SERVICES:-g-api,g-reg,key,n-api,n-cpu,n-net,n-sch,n-v
|
| 160 | 160 |
|
| 161 | 161 |
# Name of the lvm volume group to use/create for iscsi volumes |
| 162 | 162 |
VOLUME_GROUP=${VOLUME_GROUP:-nova-volumes}
|
| 163 |
+VOLUME_NAME_PREFIX=${VOLUME_NAME_PREFIX:-volume-}
|
|
| 163 | 164 |
|
| 164 | 165 |
# Nova hypervisor configuration. We default to libvirt whth **kvm** but will |
| 165 | 166 |
# drop back to **qemu** if we are unable to load the kvm module. Stack.sh can |
| ... | ... |
@@ -947,12 +948,29 @@ if [[ "$ENABLED_SERVICES" =~ "n-vol" ]]; then |
| 947 | 947 |
|
| 948 | 948 |
apt_get install iscsitarget-dkms iscsitarget |
| 949 | 949 |
|
| 950 |
- if ! sudo vgdisplay | grep -q $VOLUME_GROUP; then |
|
| 950 |
+ if ! sudo vgs $VOLUME_GROUP; then |
|
| 951 | 951 |
VOLUME_BACKING_FILE=${VOLUME_BACKING_FILE:-$DEST/nova-volumes-backing-file}
|
| 952 | 952 |
VOLUME_BACKING_FILE_SIZE=${VOLUME_BACKING_FILE_SIZE:-2052M}
|
| 953 |
- truncate -s $VOLUME_BACKING_FILE_SIZE $VOLUME_BACKING_FILE |
|
| 953 |
+ # Only create if the file doesn't already exists |
|
| 954 |
+ [[ -f $VOLUME_BACKING_FILE ]] || truncate -s $VOLUME_BACKING_FILE_SIZE $VOLUME_BACKING_FILE |
|
| 954 | 955 |
DEV=`sudo losetup -f --show $VOLUME_BACKING_FILE` |
| 955 |
- sudo vgcreate $VOLUME_GROUP $DEV |
|
| 956 |
+ # Only create if the loopback device doesn't contain $VOLUME_GROUP |
|
| 957 |
+ if ! sudo vgs $VOLUME_GROUP; then sudo vgcreate $VOLUME_GROUP $DEV; fi |
|
| 958 |
+ fi |
|
| 959 |
+ |
|
| 960 |
+ if sudo vgs $VOLUME_GROUP; then |
|
| 961 |
+ # Clean out existing volumes |
|
| 962 |
+ for lv in `sudo lvs --noheadings -o lv_name $VOLUME_GROUP`; do |
|
| 963 |
+ # VOLUME_NAME_PREFIX prefixes the LVs we want |
|
| 964 |
+ if [[ "${lv#$VOLUME_NAME_PREFIX}" != "$lv" ]]; then
|
|
| 965 |
+ tid=`egrep "^tid.+$lv" /proc/net/iet/volume | cut -f1 -d' ' | tr ':' '='` |
|
| 966 |
+ if [[ -n "$tid" ]]; then |
|
| 967 |
+ lun=`egrep "lun.+$lv" /proc/net/iet/volume | cut -f1 -d' ' | tr ':' '=' | tr -d '\t'` |
|
| 968 |
+ sudo ietadm --op delete --$tid --$lun |
|
| 969 |
+ fi |
|
| 970 |
+ sudo lvremove -f $VOLUME_GROUP/$lv |
|
| 971 |
+ fi |
|
| 972 |
+ done |
|
| 956 | 973 |
fi |
| 957 | 974 |
|
| 958 | 975 |
# Configure iscsitarget |
| ... | ... |
@@ -984,6 +1002,7 @@ else |
| 984 | 984 |
fi |
| 985 | 985 |
if [[ "$ENABLED_SERVICES" =~ "n-vol" ]]; then |
| 986 | 986 |
add_nova_flag "--volume_group=$VOLUME_GROUP" |
| 987 |
+ add_nova_flag "--volume_name_template=${VOLUME_NAME_PREFIX}%08x"
|
|
| 987 | 988 |
fi |
| 988 | 989 |
add_nova_flag "--my_ip=$HOST_IP" |
| 989 | 990 |
add_nova_flag "--public_interface=$PUBLIC_INTERFACE" |