]> git.proxmox.com Git - ceph.git/blame - ceph/qa/workunits/rbd/permissions.sh
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / qa / workunits / rbd / permissions.sh
CommitLineData
7c673cae
FG
1#!/bin/bash -ex
2
3IMAGE_FEATURES="layering,exclusive-lock,object-map,fast-diff"
4
5create_pools() {
6 ceph osd pool create images 100
7 ceph osd pool create volumes 100
8}
9
10delete_pools() {
11 (ceph osd pool delete images images --yes-i-really-really-mean-it || true) >/dev/null 2>&1
12 (ceph osd pool delete volumes volumes --yes-i-really-really-mean-it || true) >/dev/null 2>&1
13
14}
15
16recreate_pools() {
17 delete_pools
18 create_pools
19}
20
21delete_users() {
22 (ceph auth del client.volumes || true) >/dev/null 2>&1
23 (ceph auth del client.images || true) >/dev/null 2>&1
24}
25
26create_users() {
27 ceph auth get-or-create client.volumes mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow r class-read pool images, allow rwx pool volumes' >> $KEYRING
28 ceph auth get-or-create client.images mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool images' >> $KEYRING
29}
30
31expect() {
32
33 set +e
34
35 local expected_ret=$1
36 local ret
37
38 shift
39 cmd=$@
40
41 eval $cmd
42 ret=$?
43
44 set -e
45
46 if [[ $ret -ne $expected_ret ]]; then
47 echo "ERROR: running \'$cmd\': expected $expected_ret got $ret"
48 return 1
49 fi
50
51 return 0
52}
53
54test_images_access() {
55 rbd -k $KEYRING --id images create --image-format 2 --image-feature $IMAGE_FEATURES -s 1 images/foo
56 rbd -k $KEYRING --id images snap create images/foo@snap
57 rbd -k $KEYRING --id images snap protect images/foo@snap
58 rbd -k $KEYRING --id images snap unprotect images/foo@snap
59 rbd -k $KEYRING --id images snap protect images/foo@snap
60 rbd -k $KEYRING --id images export images/foo@snap - >/dev/null
61 expect 16 rbd -k $KEYRING --id images snap rm images/foo@snap
62
63 rbd -k $KEYRING --id volumes clone --image-feature $IMAGE_FEATURES images/foo@snap volumes/child
64 expect 16 rbd -k $KEYRING --id images snap unprotect images/foo@snap
65 expect 1 rbd -k $KEYRING --id volumes snap unprotect images/foo@snap
66 expect 1 rbd -k $KEYRING --id images flatten volumes/child
67 rbd -k $KEYRING --id volumes flatten volumes/child
68 expect 1 rbd -k $KEYRING --id volumes snap unprotect images/foo@snap
69 rbd -k $KEYRING --id images snap unprotect images/foo@snap
70
71 expect 39 rbd -k $KEYRING --id images rm images/foo
72 rbd -k $KEYRING --id images snap rm images/foo@snap
73 rbd -k $KEYRING --id images rm images/foo
74 rbd -k $KEYRING --id volumes rm volumes/child
75}
76
77test_volumes_access() {
78 rbd -k $KEYRING --id images create --image-format 2 --image-feature $IMAGE_FEATURES -s 1 images/foo
79 rbd -k $KEYRING --id images snap create images/foo@snap
80 rbd -k $KEYRING --id images snap protect images/foo@snap
81
82 # commands that work with read-only access
83 rbd -k $KEYRING --id volumes info images/foo@snap
84 rbd -k $KEYRING --id volumes snap ls images/foo
85 rbd -k $KEYRING --id volumes export images/foo - >/dev/null
86 rbd -k $KEYRING --id volumes cp images/foo volumes/foo_copy
87 rbd -k $KEYRING --id volumes rm volumes/foo_copy
88 rbd -k $KEYRING --id volumes children images/foo@snap
89 rbd -k $KEYRING --id volumes lock list images/foo
90
91 # commands that fail with read-only access
92 expect 1 rbd -k $KEYRING --id volumes resize -s 2 images/foo --allow-shrink
93 expect 1 rbd -k $KEYRING --id volumes snap create images/foo@2
94 expect 1 rbd -k $KEYRING --id volumes snap rollback images/foo@snap
95 expect 1 rbd -k $KEYRING --id volumes snap remove images/foo@snap
96 expect 1 rbd -k $KEYRING --id volumes snap purge images/foo
97 expect 1 rbd -k $KEYRING --id volumes snap unprotect images/foo@snap
98 expect 1 rbd -k $KEYRING --id volumes flatten images/foo
99 expect 1 rbd -k $KEYRING --id volumes lock add images/foo test
100 expect 1 rbd -k $KEYRING --id volumes lock remove images/foo test locker
101 expect 1 rbd -k $KEYRING --id volumes ls rbd
102
103 # create clone and snapshot
104 rbd -k $KEYRING --id volumes clone --image-feature $IMAGE_FEATURES images/foo@snap volumes/child
105 rbd -k $KEYRING --id volumes snap create volumes/child@snap1
106 rbd -k $KEYRING --id volumes snap protect volumes/child@snap1
107 rbd -k $KEYRING --id volumes snap create volumes/child@snap2
108
109 # make sure original snapshot stays protected
110 expect 16 rbd -k $KEYRING --id images snap unprotect images/foo@snap
111 rbd -k $KEYRING --id volumes flatten volumes/child
112 expect 16 rbd -k $KEYRING --id images snap unprotect images/foo@snap
113 rbd -k $KEYRING --id volumes snap rm volumes/child@snap2
114 expect 16 rbd -k $KEYRING --id images snap unprotect images/foo@snap
115 expect 2 rbd -k $KEYRING --id volumes snap rm volumes/child@snap2
116 rbd -k $KEYRING --id volumes snap unprotect volumes/child@snap1
117 expect 16 rbd -k $KEYRING --id images snap unprotect images/foo@snap
118
119 # clean up
120 rbd -k $KEYRING --id volumes snap rm volumes/child@snap1
121 rbd -k $KEYRING --id images snap unprotect images/foo@snap
122 rbd -k $KEYRING --id images snap rm images/foo@snap
123 rbd -k $KEYRING --id images rm images/foo
124 rbd -k $KEYRING --id volumes rm volumes/child
125}
126
127cleanup() {
128 rm -f $KEYRING
129}
130KEYRING=$(mktemp)
131trap cleanup EXIT ERR HUP INT QUIT
132
133delete_users
134create_users
135
136recreate_pools
137test_images_access
138
139recreate_pools
140test_volumes_access
141
142delete_pools
143delete_users
144
145echo OK
146exit 0