Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / qa / rbd / common.sh
1 #!/bin/bash
2
3 die() {
4         echo "$*"
5         exit 1
6 }
7
8 cleanup() {
9     rm -rf $TDIR
10     TDIR=""
11 }
12
13 set_variables() {
14     # defaults
15     [ -z "$bindir" ] && bindir=$PWD       # location of init-ceph
16     if [ -z "$conf" ]; then
17         conf="$basedir/ceph.conf"
18         [ -e $conf ] || conf="/etc/ceph/ceph.conf"
19     fi
20     [ -e $conf ] || die "conf file not found"
21
22     CCONF="ceph-conf -c $conf"
23
24     [ -z "$mnt" ] && mnt="/c"
25     if [ -z "$monhost" ]; then
26         $CCONF -t mon -i 0 'mon addr' > $TDIR/cconf_mon
27         if [ $? -ne 0 ]; then
28             $CCONF -t mon.a -i 0 'mon addr' > $TDIR/cconf_mon
29             [ $? -ne 0 ] && die "can't figure out \$monhost"
30         fi
31         read monhost < $TDIR/cconf_mon
32     fi
33
34     [ -z "$imgsize" ] && imgsize=1024
35     [ -z "$user" ] && user=admin
36     [ -z "$keyring" ] && keyring="`$CCONF keyring`"
37     [ -z "$secret" ] && secret="`ceph-authtool $keyring -n client.$user -p`"
38
39     monip="`echo $monhost | sed 's/:/ /g' | awk '{print $1}'`"
40     monport="`echo $monhost | sed 's/:/ /g' | awk '{print $2}'`"
41
42     [ -z "$monip" ] && die "bad mon address"
43
44     [ -z "$monport" ] && monport=6789
45
46     set -e
47
48     mydir=`hostname`_`echo $0 | sed 's/\//_/g'`
49
50     img_name=test.`hostname`.$$
51 }
52
53 rbd_load() {
54         modprobe rbd
55 }
56
57 rbd_create_image() {
58         id=$1
59         rbd create $img_name.$id --size=$imgsize
60 }
61
62 rbd_add() {
63         id=$1
64         echo "$monip:$monport name=$user,secret=$secret rbd $img_name.$id" \
65             > /sys/bus/rbd/add
66
67         pushd /sys/bus/rbd/devices &> /dev/null
68         [ $? -eq 0 ] || die "failed to cd"
69         devid=""
70         rm -f "$TDIR/rbd_devs"
71         for f in *; do echo $f >> "$TDIR/rbd_devs"; done
72         sort -nr "$TDIR/rbd_devs" > "$TDIR/rev_rbd_devs"
73         while read f < "$TDIR/rev_rbd_devs"; do
74           read d_img_name < "$f/name"
75           if [ "x$d_img_name" == "x$img_name.$id" ]; then
76             devid=$f
77             break
78           fi
79         done
80         popd &> /dev/null
81
82         [ "x$devid" == "x" ] && die "failed to find $img_name.$id"
83
84         export rbd$id=$devid
85         while [ ! -e /dev/rbd$devid ]; do sleep 1; done
86 }
87
88 rbd_test_init() {
89         rbd_load
90 }
91
92 rbd_remove() {
93         echo $1 > /sys/bus/rbd/remove
94 }
95
96 rbd_rm_image() {
97         id=$1
98         rbd rm $imgname.$id
99 }
100
101 TDIR=`mktemp -d`
102 trap cleanup INT TERM EXIT
103 set_variables