Skip to content

Commit

Permalink
Merge remote-tracking branch 'private/wip-mon-snap-caps'
Browse files Browse the repository at this point in the history
  • Loading branch information
liewegas committed Jul 9, 2018
2 parents dd413ad + 97e3f0a commit 975528f
Show file tree
Hide file tree
Showing 6 changed files with 464 additions and 22 deletions.
99 changes: 92 additions & 7 deletions qa/workunits/rados/test_pool_access.sh
Expand Up @@ -2,22 +2,107 @@

set -ex

expect_1()
KEYRING=$(mktemp)
trap cleanup EXIT ERR HUP INT QUIT

cleanup() {
(ceph auth del client.mon_read || true) >/dev/null 2>&1
(ceph auth del client.mon_write || true) >/dev/null 2>&1

rm -f $KEYRING
}

expect_false()
{
set -x
set +e
"$@"
if [ $? == 1 ]; then return 0; else return 1; fi
set -x
if "$@"; then return 1; else return 0; fi
}

create_pool_op() {
ID=$1
POOL=$2

cat << EOF | CEPH_ARGS="-k $KEYRING" python
import rados
cluster = rados.Rados(conffile="", rados_id="${ID}")
cluster.connect()
cluster.create_pool("${POOL}")
EOF
}

delete_pool_op() {
ID=$1
POOL=$2

cat << EOF | CEPH_ARGS="-k $KEYRING" python
import rados
cluster = rados.Rados(conffile="", rados_id="${ID}")
cluster.connect()
cluster.delete_pool("${POOL}")
EOF
}

create_pool_snap_op() {
ID=$1
POOL=$2
SNAP=$3

cat << EOF | CEPH_ARGS="-k $KEYRING" python
import rados
cluster = rados.Rados(conffile="", rados_id="${ID}")
cluster.connect()
ioctx = cluster.open_ioctx("${POOL}")
ioctx.create_snap("${SNAP}")
EOF
}

remove_pool_snap_op() {
ID=$1
POOL=$2
SNAP=$3

cat << EOF | CEPH_ARGS="-k $KEYRING" python
import rados
cluster = rados.Rados(conffile="", rados_id="${ID}")
cluster.connect()
ioctx = cluster.open_ioctx("${POOL}")
ioctx.remove_snap("${SNAP}")
EOF
}

test_pool_op()
{
ceph auth get-or-create client.mon_read mon 'allow r' >> $KEYRING
ceph auth get-or-create client.mon_write mon 'allow *' >> $KEYRING

expect_false create_pool_op mon_read pool1
create_pool_op mon_write pool1

expect_false create_pool_snap_op mon_read pool1 snap1
create_pool_snap_op mon_write pool1 snap1

expect_false remove_pool_snap_op mon_read pool1 snap1
remove_pool_snap_op mon_write pool1 snap1

expect_false delete_pool_op mon_read pool1
delete_pool_op mon_write pool1
}

key=`ceph auth get-or-create-key client.poolaccess1 mon 'allow r' osd 'allow *'`
rados --id poolaccess1 --key $key -p rbd ls

key=`ceph auth get-or-create-key client.poolaccess2 mon 'allow r' osd 'allow * pool=nopool'`
expect_1 rados --id poolaccess2 --key $key -p rbd ls
expect_false rados --id poolaccess2 --key $key -p rbd ls

key=`ceph auth get-or-create-key client.poolaccess3 mon 'allow r' osd 'allow rw pool=nopool'`
expect_1 rados --id poolaccess3 --key $key -p rbd ls
expect_false rados --id poolaccess3 --key $key -p rbd ls

test_pool_op

echo OK
92 changes: 92 additions & 0 deletions qa/workunits/rbd/permissions.sh
Expand Up @@ -29,11 +29,27 @@ recreate_pools() {
delete_users() {
(ceph auth del client.volumes || true) >/dev/null 2>&1
(ceph auth del client.images || true) >/dev/null 2>&1

(ceph auth del client.snap_none || true) >/dev/null 2>&1
(ceph auth del client.snap_all || true) >/dev/null 2>&1
(ceph auth del client.snap_pool || true) >/dev/null 2>&1
(ceph auth del client.snap_profile_all || true) >/dev/null 2>&1
(ceph auth del client.snap_profile_pool || true) >/dev/null 2>&1

(ceph auth del client.mon_write || true) >/dev/null 2>&1
}

create_users() {
ceph auth get-or-create client.volumes mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd-read-only pool=images' >> $KEYRING
ceph auth get-or-create client.images mon 'profile rbd' osd 'profile rbd pool=images' >> $KEYRING

ceph auth get-or-create client.snap_none mon 'allow r' >> $KEYRING
ceph auth get-or-create client.snap_all mon 'allow r' osd 'allow w' >> $KEYRING
ceph auth get-or-create client.snap_pool mon 'allow r' osd 'allow w pool=images' >> $KEYRING
ceph auth get-or-create client.snap_profile_all mon 'allow r' osd 'profile rbd' >> $KEYRING
ceph auth get-or-create client.snap_profile_pool mon 'allow r' osd 'profile rbd pool=images' >> $KEYRING

ceph auth get-or-create client.mon_write mon 'allow *' >> $KEYRING
}

expect() {
Expand Down Expand Up @@ -142,9 +158,83 @@ test_volumes_access() {
rbd -k $KEYRING --id volumes rm volumes/child
}

create_self_managed_snapshot() {
ID=$1
POOL=$2

cat << EOF | CEPH_ARGS="-k $KEYRING" python
import rados
cluster = rados.Rados(conffile="", rados_id="${ID}")
cluster.connect()
ioctx = cluster.open_ioctx("${POOL}")
snap_id = ioctx.create_self_managed_snap()
print ("Created snap id {}".format(snap_id))
EOF
}

remove_self_managed_snapshot() {
ID=$1
POOL=$2

cat << EOF | CEPH_ARGS="-k $KEYRING" python
import rados
cluster1 = rados.Rados(conffile="", rados_id="mon_write")
cluster1.connect()
ioctx1 = cluster1.open_ioctx("${POOL}")
snap_id = ioctx1.create_self_managed_snap()
print ("Created snap id {}".format(snap_id))
cluster2 = rados.Rados(conffile="", rados_id="${ID}")
cluster2.connect()
ioctx2 = cluster2.open_ioctx("${POOL}")
ioctx2.remove_self_managed_snap(snap_id)
print ("Removed snap id {}".format(snap_id))
EOF
}

test_remove_self_managed_snapshots() {
# Ensure users cannot create self-managed snapshots w/o permissions
expect 1 create_self_managed_snapshot snap_none images
expect 1 create_self_managed_snapshot snap_none volumes

create_self_managed_snapshot snap_all images
create_self_managed_snapshot snap_all volumes

create_self_managed_snapshot snap_pool images
expect 1 create_self_managed_snapshot snap_pool volumes

create_self_managed_snapshot snap_profile_all images
create_self_managed_snapshot snap_profile_all volumes

create_self_managed_snapshot snap_profile_pool images
expect 1 create_self_managed_snapshot snap_profile_pool volumes

# Ensure users cannot delete self-managed snapshots w/o permissions
expect 1 remove_self_managed_snapshot snap_none images
expect 1 remove_self_managed_snapshot snap_none volumes

remove_self_managed_snapshot snap_all images
remove_self_managed_snapshot snap_all volumes

remove_self_managed_snapshot snap_pool images
expect 1 remove_self_managed_snapshot snap_pool volumes

remove_self_managed_snapshot snap_profile_all images
remove_self_managed_snapshot snap_profile_all volumes

remove_self_managed_snapshot snap_profile_pool images
expect 1 remove_self_managed_snapshot snap_profile_pool volumes
}

cleanup() {
rm -f $KEYRING
}

KEYRING=$(mktemp)
trap cleanup EXIT ERR HUP INT QUIT

Expand All @@ -157,6 +247,8 @@ test_images_access
recreate_pools
test_volumes_access

test_remove_self_managed_snapshots

delete_pools
delete_users

Expand Down

0 comments on commit 975528f

Please sign in to comment.