add lv:a and lv:s flags for permissions
authorDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 25 Jun 2014 22:57:40 +0000 (00:57 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 25 Jun 2014 22:57:40 +0000 (00:57 +0200)
bin/list
bin/node
etc/defaults.sh
remove
sbin/lvcreate
sbin/lvremove
sbin/lvs
t/lvs

index fd85c4a..0b6cfde 100755 (executable)
--- a/bin/list
+++ b/bin/list
@@ -2,4 +2,4 @@
 
 . /usr/share/ganeti/extstorage/zfs/defaults.sh
 
-zfs list -r $EXTP_ZFS -o name,volsize,logicalused,used,available,refer,lv:a,ganeti:originstname
+zfs list -r $EXTP_ZFS -o name,volsize,logicalused,used,available,refer,lv:a,lv:s,ganeti:originstname
index 09a9d3a..b340634 100755 (executable)
--- a/bin/node
+++ b/bin/node
@@ -1,2 +1,4 @@
+#!/bin/sh -e
+
 ssh `gnt-cluster getmaster` gnt-node list `hostname -s`
 ssh `gnt-cluster getmaster` gnt-node list-storage `hostname -s`
index f9d9144..a593da7 100644 (file)
@@ -13,8 +13,17 @@ test -e $host_config && . $host_config
 # lz4  compression with low cpu operhead which always helps
 test -z "$EXTP_CREATE" && EXTP_CREATE="-s -b 4k -o compression=lz4"
 
-# on zfs destroy remove snapshots of instance disks
-test -z "$EXTP_DESTROY" && EXTP_DESTROY="-r"
+# on zfs destroy remove dependent snapshots
+test -z "$EXTP_DESTROY" && EXTP_DESTROY="-R"
 
 # emulate VG configured in cluster for wrapper scripts in sbin
 test -z "$EXTP_VG" && EXTP_VG='ffzgvg'
+
+# zfs pool and file system (existing) where to create block devices
+test -z "$EXTP_ZFS" && EXTP_ZFS=tmp500g/$EXTP_VG
+
+export VOL_NAME
+
+zfs_get() {
+zfs get $1 -o value -p -H $EXTP_ZFS/$VOL_NAME
+}
diff --git a/remove b/remove
index e641286..784d9f1 100755 (executable)
--- a/remove
+++ b/remove
@@ -2,4 +2,5 @@
 
 . /usr/share/ganeti/extstorage/zfs/defaults.sh
 
+rm -f /dev/$EXTP_VG/$VOL_NAME
 zfs destroy $EXTP_DESTROY $EXTP_ZFS/$VOL_NAME
index 127767d..9e48c73 100755 (executable)
@@ -5,31 +5,34 @@
 # gnt-instance move --node arh-hw bbb
 # lvcreate -L5120m -ne4bf0e9d-2c6e-4e1c-8bc4-342ee94724a5.disk0 -i1 ffzgvg tmp500g/block
 if echo $* | grep -q $EXTP_VG ; then
-       SNAP=0
+       SNAP='-'
        while [ ! -z "$1" ] ; do
                case $1 in 
 
                -L*) VOL_SIZE=`echo $1 | sed 's/-L//'` ;;
                -n*) VOL_NAME=`echo $1 | sed 's/-n//'` ;;
-               -s)  SNAP=1 ;;
+               -s)  SNAP='s' ;;
                /dev/$EXTP_VG/*) VOL_ORIGIN=`echo $1 | cut -d/ -f4`
 
                esac
                shift
        done
 
-       if [ $SNAP = 0 ] ; then
+       if [ $SNAP = '-' ] ; then
 
                test -e /dev/zvol/$EXTP_ZFS/$VOL_NAME || \
                zfs create -V ${VOL_SIZE} $EXTP_CREATE $EXTP_ZFS/$VOL_NAME
 
        else
 
-               zfs snap $EXTP_ZFS/$VOL_ORIGIN@snap
-               sleep 1
-               zfs clone $EXTP_ZFS/$VOL_ORIGIN@snap $EXTP_ZFS/$VOL_NAME
-               sleep 1
-               ln -sfv `readlink -f /dev/zvol/$EXTP_ZFS/$VOL_NAME` /dev/$EXTP_VG/$VOL_NAME
+               zfs snap $EXTP_ZFS/$VOL_ORIGIN@snap || true
+               zfs set lv:s='o' $EXTP_ZFS/$VOL_ORIGIN
+               zfs clone $EXTP_ZFS/$VOL_ORIGIN@snap $EXTP_ZFS/$VOL_NAME || true
+               zfs set lv:s='s' $EXTP_ZFS/$VOL_NAME
+               zfs set ganeti:originstname=$(VOL_NAME=$VOL_ORIGIN zfs_get ganeti:originstname) $EXTP_ZFS/$VOL_NAME
+               export VOL_NAME
+               echo $VOL_NAME
+               $dir/attach
 
        fi
 
index 356305c..1c19c25 100755 (executable)
@@ -7,16 +7,14 @@
 if echo $* | grep -q $EXTP_VG ; then
        while [ ! -z "$1" ] ; do
                if echo $1 | grep -q $EXTP_VG ; then
-                       VOL_NAME=`echo $1 | sed -e "s:$EXTP_VG/::" -e 's/\.snap$/@snap/'`
+                       VOL_NAME=`echo $1 | sed -e "s:$EXTP_VG/::"` # FIXME -e 's/\.snap$/@snap/'`
                fi
                shift;
        done
 
        # destroy snapshot and clone
-       if [ /dev/zvol/$EXTP_ZFS/$VOL_NAME ] ; then
-               zfs destroy -R $EXTP_ZFS/$VOL_NAME || exit 0 # FIXME
-               rm -f /dev/$EXTP_VG/$VOL_NAME
-       fi
+       export VOL_NAME
+       $dir/remove 
 else
        /sbin/lvm lvrename $*
 fi
index 2774f05..013d8d0 100755 (executable)
--- a/sbin/lvs
+++ b/sbin/lvs
@@ -2,46 +2,38 @@
 
 . /usr/share/ganeti/extstorage/zfs/defaults.sh
 
-export VOL_NAME
-
 VOL() {
+       echo "VOL $@" >&2
        while [ ! -z "$1" ] ; do
+               echo "XXX $1" >&2
                case $1 in 
                *$EXTP_VG*) VOL=`echo $1 | cut -d/ -f4` ;;
-               *) echo "# ignore $1" >&2
                esac
                shift
        done
-       echo "# $VOL" >&2
        export VOL_NAME=$VOL
-               
+       echo "VOL_NAME $VOL_NAME" >&2
 }
 
 # lvs --noheadings --units=m --nosuffix '--separator=|' -ovg_name,lv_name,lv_size,lv_attr
 if echo $* | grep -q vg_name,lv_name,lv_size,lv_attr ; then
-       zfs list -o name,volsize,lv:a -t volume -r $EXTP_ZFS -H -p | sed "s:$EXTP_ZFS/*::" | \
-       awk '{ print "  '$EXTP_VG'|"$1"|" $2 / 1024 / 1024 "|-wi-a"$3"--" }'
+       zfs list -o name,volsize,lv:s,lv:a -t volume -r $EXTP_ZFS -H -p | sed "s:$EXTP_ZFS/*::" | \
+       awk '{ print "  '$EXTP_VG'|"$1"|" $2 / 1024 / 1024 "|"$3"wi-a"$4"--" }'
        /sbin/lvm lvs $* 2>/dev/null || exit 0 # local, might fail
 
 # gnt-instance modify -t drbd -n box02 zfs
 # lvs --noheadings '--separator=|' --units=k --nosuffix -olv_attr,lv_kernel_major,lv_kernel_minor,vg_extent_size,stripes,devices /dev/ffzgvg/c72d9ea7-f396-4104-b4ee-8b613da32051.disk1
 elif echo $* | grep -q lv_attr,lv_kernel_major,lv_kernel_minor,vg_extent_size,stripes,devices ; then
 
-       VOL_NAME=VOL $*
-       volblocksize=`zfs get volblocksize -o value -p -H $EXTP_ZFS/$VOL_NAME`
-       perm=`zfs get lv:attr -o value -p -H $EXTP_ZFS/$VOL_NAME`
-       if [ -e /dev/zvol/$EXTP_ZFS/$VOL_NAME.snap ] ; then
-               perm="owi-aos-" # snapshot origin
-       elif echo $VOL_NAME | grep -q '.snap$' ; then
-               perm="swi-a-s-" # snapshot
-       fi
-       ls -al `readlink -f /dev/zvol/$EXTP_ZFS/$VOL_NAME` | sed 's/,//' | awk '{ print "  -wi-ao--|" $5 "|" $6 "|'$volblocksize'|1|" $10 "(" $6 * 1280 + $6 ")" }' # FIXME what is number after device?
+       VOL $5 $6
+       a=$(zfs_get lv:a)
+       s=$(zfs_get lv:s)
+       ls -al `readlink -f /dev/zvol/$EXTP_ZFS/$VOL_NAME` | sed 's/,//' | awk '{ print "  '$s'-wi-a'$a'--|" $5 "|" $6 "|'$(zfs_get volblocksize)'|1|" $10 "(" $6 * 1280 + $6 ")" }' # FIXME what is number after device?
 
 # lvs -o tags --noheadings --nosuffix /dev/ffzgvg/88c6b19f-7b3f-4041-bb9c-d2a0716e459c.disk0
 elif [ "$1" = "-o" ] ; then
        VOL $@
-       tag=`zfs get lv:tag  -o value -p -H $EXTP_ZFS/$VOL_NAME`
-       echo $tag
+       echo $(zfs_get lv:tag)
 else
 
        /sbin/lvm lvs $*
diff --git a/t/lvs b/t/lvs
index 4390a5c..c0505d3 100644 (file)
--- a/t/lvs
+++ b/t/lvs
@@ -1,5 +1,6 @@
 #lvs --noheadings '--separator=|' --units=k --nosuffix -olv_attr,lv_kernel_major,lv_kernel_minor,vg_extent_size,stripes,devices /dev/ffzgvg/c72d9ea7-f396-4104-b4ee-8b613da32051.disk1
 #lvs --noheadings '--separator=|' --units=k --nosuffix -olv_attr,lv_kernel_major,lv_kernel_minor,vg_extent_size,stripes,devices /dev/ffzgvg/3e6746a9-cb99-4584-a219-af7e4b5cb5f5.disk0_data
-#lvs --noheadings --units=m --nosuffix '--separator=|' -ovg_name,lv_name,lv_size,lv_attr
+lvs --noheadings --units=m --nosuffix '--separator=|' -ovg_name,lv_name,lv_size,lv_attr
 lvs --noheadings --units=m --nosuffix '--separator=|' -ovg_name,lv_name,lv_size,lv_attr ffzgvg
-lvs -o tags --noheadings --nosuffix /dev/ffzgvg/88c6b19f-7b3f-4041-bb9c-d2a0716e459c.disk0
+#lvs -o tags --noheadings --nosuffix /dev/ffzgvg/88c6b19f-7b3f-4041-bb9c-d2a0716e459c.disk0
+lvs --noheadings '--separator=|' --units=k --nosuffix -olv_attr,lv_kernel_major,lv_kernel_minor,vg_extent_size,stripes,devices /dev/ffzgvg/d501d86b-f421-4811-bcbe-1370da3e3a74.disk0