From 7dd4b9d9b650a505fec2fffe559f836d89fc7c55 Mon Sep 17 00:00:00 2001 From: Sebastien Buisson Date: Fri, 12 Apr 2024 11:21:18 +0200 Subject: [PATCH] LU-17431 tests: exercise dynamic nodemap on MDS Rename sanity-sec test_72 to test_72a to exercise dynamic nodemaps on OSS side. And add sanity-sec test_72b to exercise dynamic nodemaps on MDS side. This supports the case where the MDS runs on the same node as the MGS, and with a combo MGS/MDS as well. Test-Parameters: trivial Test-Parameters: testlist=sanity-sec env=ONLY=72 mdscount=2 mdtcount=4 osscount=1 ostcount=8 clientcount=2 Signed-off-by: Sebastien Buisson Change-Id: Idb32ee46f8809160ddc4c54960c10d565b3396d7 Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/55002 Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin Reviewed-by: Marc Vef Tested-by: jenkins Tested-by: Maloo --- lustre/tests/sanity-sec.sh | 201 +++++++++++++++++++++++++-------------------- 1 file changed, 111 insertions(+), 90 deletions(-) diff --git a/lustre/tests/sanity-sec.sh b/lustre/tests/sanity-sec.sh index 7e4f145..2abff1e 100755 --- a/lustre/tests/sanity-sec.sh +++ b/lustre/tests/sanity-sec.sh @@ -7099,13 +7099,14 @@ test_71() { } run_test 71 "encryption does not remove project flag" -test_72() { +dyn_nm_helper() { + local facet=$1 local mgsnm=mgsnm local mgsnids=1.1.0.[1-100]@tcp local mgsnids2=1.0.0.[1-100]@tcp local mgsclid=600 local mgsfsid=2000 - local nm=nm_test71 + local nm=nm_test71a local nids=1.1.1.[1-100]@tcp local startnid=1.1.1.1@tcp local endnid=1.1.1.100@tcp @@ -7123,12 +7124,6 @@ test_72() { local rbac_val local val - (( OST1_VERSION >= $(version_code 2.15.64) )) || - skip "Need MDS >= 2.15.64 dynamic nodemaps" - - [[ "$(facet_active_host mgs)" != "$(facet_active_host ost1)" ]] || - skip "Need servers on different hosts" - activedefault=$(do_facet mgs $LCTL get_param -n nodemap.active) if [[ "$activedefault" != "1" ]]; then do_facet mgs $LCTL nodemap_activate 1 @@ -7151,209 +7146,235 @@ test_72() { rbac_val=$(do_facet mgs $LCTL get_param -n nodemap.$mgsnm.rbac) - stack_trap "do_facet ost1 $LCTL nodemap_del $nm || true" EXIT - do_facet ost1 $LCTL nodemap_add $nm && - error "static nodemap on server should fail" - do_facet ost1 $LCTL nodemap_add -d $nm && + stack_trap "do_facet $facet $LCTL nodemap_del $nm || true" EXIT + if [[ "$(facet_active_host mgs)" != \ + "$(facet_active_host $facet)" ]]; then + do_facet $facet $LCTL nodemap_add $nm && + error "static nodemap on server should fail" + fi + do_facet $facet $LCTL nodemap_add -d $nm && error "dynamic nodemap without parent should fail" - do_facet ost1 $LCTL nodemap_add -d -p default $nm || + do_facet $facet $LCTL nodemap_add -d -p default $nm || error "dynamic nodemap on server failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.id) + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.id) if [[ -z "$val" || "$val" == "0" ]]; then error "dynamic nodemap wrong id $val" fi - do_facet ost1 $LCTL nodemap_add_range --name $nm --range $nids || + do_facet $facet $LCTL nodemap_add_range --name $nm --range $nids || error "dynamic add_range on server failed" - val=$(do_facet ost1 $LCTL get_param nodemap.$nm.ranges | + val=$(do_facet $facet $LCTL get_param nodemap.$nm.ranges | awk 'BEGIN{RS=", "} $1=="start_nid:"{print $2 ; exit}') [[ "$val" == "$startnid" ]] || error "dynamic nodemap wrong start nid range $val" - val=$(do_facet ost1 $LCTL get_param nodemap.$nm.ranges | + val=$(do_facet $facet $LCTL get_param nodemap.$nm.ranges | awk 'BEGIN{RS=", "} $1=="end_nid:"{print $2 ; exit}') [[ "$val" == "$endnid" ]] || error "dynamic nodemap wrong end nid range $val" - do_facet ost1 $LCTL nodemap_add_idmap --name $nm --idtype uid \ + do_facet $facet $LCTL nodemap_add_idmap --name $nm --idtype uid \ --idmap $clid:$fsid || error "dynamic add_idmap on server failed" - val=$(do_facet ost1 $LCTL get_param nodemap.$nm.idmap | + val=$(do_facet $facet $LCTL get_param nodemap.$nm.idmap | awk 'BEGIN{RS=", "} $1=="client_id:"{print $2 ; exit}') (( val == clid )) || error "dynamic nodemap wrong client id $val" - val=$(do_facet ost1 $LCTL get_param nodemap.$nm.idmap | + val=$(do_facet $facet $LCTL get_param nodemap.$nm.idmap | awk 'BEGIN{RS=", "} $1=="fs_id:"{print $2 ; exit}') (( val == fsid )) || error "dynamic nodemap wrong fs id $val" for prop in $properties; do - do_facet ost1 $LCTL nodemap_modify --name $nm \ + do_facet $facet $LCTL nodemap_modify --name $nm \ --property $prop --value 1 || error "dynamic modify of $prop failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.$prop) + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.$prop) (( val == 1 )) || error "incorrect $prop $val" done prop=admin - do_facet ost1 $LCTL nodemap_modify --name $nm \ + do_facet $facet $LCTL nodemap_modify --name $nm \ --property $prop --value 1 || error "dynamic modify of $prop failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.admin_nodemap) + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.admin_nodemap) (( val == 1 )) || error "incorrect $prop $val" prop=trusted - do_facet ost1 $LCTL nodemap_modify --name $nm \ + do_facet $facet $LCTL nodemap_modify --name $nm \ --property $prop --value 0 || error "dynamic modify of $prop failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.trusted_nodemap) + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.trusted_nodemap) (( val == 0 )) || error "incorrect $prop $val" prop=map_mode - do_facet ost1 $LCTL nodemap_modify --name $nm \ + do_facet $facet $LCTL nodemap_modify --name $nm \ --property $prop --value uid || error "dynamic modify of $prop failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.$prop) + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.$prop) [[ "$val" == "uid" ]] || error "incorrect $prop $val" prop=rbac - do_facet ost1 $LCTL nodemap_modify --name $nm \ + do_facet $facet $LCTL nodemap_modify --name $nm \ --property $prop --value file_perms || error "dynamic modify of $prop failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.$prop) + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.$prop) [[ "$val" == "file_perms" ]] || error "incorrect $prop $val" - do_facet ost1 $LCTL nodemap_modify --name $nm \ + do_facet $facet $LCTL nodemap_modify --name $nm \ --property $prop --value all || error "dynamic modify of $prop failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.$prop) + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.$prop) [[ "$val" == "$rbac_val" ]] || error "incorrect $prop $val" prop=squash_uid - do_facet ost1 $LCTL nodemap_modify --name $nm \ + do_facet $facet $LCTL nodemap_modify --name $nm \ --property $prop --value 77 || error "dynamic modify of $prop failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.$prop) + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.$prop) (( val == 77 )) || error "incorrect $prop $val" prop=squash_gid - do_facet ost1 $LCTL nodemap_modify --name $nm \ + do_facet $facet $LCTL nodemap_modify --name $nm \ --property $prop --value 77 || error "dynamic modify of $prop failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.$prop) + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.$prop) (( val == 77 )) || error "incorrect $prop $val" prop=squash_projid - do_facet ost1 $LCTL nodemap_modify --name $nm \ + do_facet $facet $LCTL nodemap_modify --name $nm \ --property $prop --value 77 || error "dynamic modify of $prop failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.$prop) + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.$prop) (( val == 77 )) || error "incorrect $prop $val" prop=fileset - do_facet ost1 $LCTL nodemap_set_fileset --name $nm \ + do_facet $facet $LCTL nodemap_set_fileset --name $nm \ --fileset "/tmp" && error "dynamic modify of $prop should fail" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.$prop) + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.$prop) [[ "$val" == "/deffset" ]] || error "incorrect $prop $val" prop=sepol - do_facet ost1 $LCTL nodemap_set_sepol --name $nm \ + do_facet $facet $LCTL nodemap_set_sepol --name $nm \ --sepol $sepol || error "dynamic modify of $prop failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.$prop) + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.$prop) [[ "$val" == "$sepol" ]] || error "incorrect $prop $val" prop=offset - do_facet ost1 $LCTL nodemap_add_offset --name $nm \ + do_facet $facet $LCTL nodemap_add_offset --name $nm \ --offset 100000 --limit 200000 || error "dynamic modify of $prop failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.$prop | + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.$prop | awk '$1 == "start_uid:" {print $2}' | sed s+,++) (( val == 100000 )) || error "incorrect $prop start_uid $val" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.$prop | + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.$prop | awk '$1 == "limit_uid:" {print $2}' | sed s+,++) (( val == 200000 )) || error "incorrect $prop limit_uid $val" - do_facet ost1 $LCTL nodemap_del_offset --name $nm || + do_facet $facet $LCTL nodemap_del_offset --name $nm || error "dynamic del of $prop failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.$prop | + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.$prop | awk '$1 == "start_uid:" {print $2}' | sed s+,++) (( val == 0 )) || error "incorrect $prop start_uid $val" - val=$(do_facet ost1 $LCTL get_param -n nodemap.$nm.$prop | + val=$(do_facet $facet $LCTL get_param -n nodemap.$nm.$prop | awk '$1 == "limit_uid:" {print $2}' | sed s+,++) (( val == 0 )) || error "incorrect $prop limit_uid $val" - val=$(do_facet ost1 $LCTL nodemap_test_id --nid $startnid \ + val=$(do_facet $facet $LCTL nodemap_test_id --nid $startnid \ --idtype uid --id $clid) (( val == fsid )) || error "dynamic test_id on server failed" - do_facet ost1 $LCTL nodemap_del_idmap --name $nm --idtype uid \ + do_facet $facet $LCTL nodemap_del_idmap --name $nm --idtype uid \ --idmap $clid:$fsid || error "dynamic del_idmap on server failed" - val=$(do_facet ost1 $LCTL get_param nodemap.$nm.idmap | + val=$(do_facet $facet $LCTL get_param nodemap.$nm.idmap | awk 'BEGIN{RS=", "} $1=="client_id:"{print $2 ; exit}') [[ -z "$val" ]] || error "idmap should be empty, got $val" - val=$(do_facet ost1 $LCTL nodemap_test_nid $startnid) + val=$(do_facet $facet $LCTL nodemap_test_nid $startnid) [[ "$val" == "$nm" ]] || error "dynamic test_nid on server failed" - do_facet ost1 $LCTL nodemap_add -d -p $nm ${nm}_1 || + do_facet $facet $LCTL nodemap_add -d -p $nm ${nm}_1 || error "nodemap add ${nm}_1 on server failed" - stack_trap "do_facet ost1 $LCTL nodemap_del ${nm}_1 || true" EXIT - do_facet ost1 $LCTL nodemap_add_range --name ${nm}_1 \ + stack_trap "do_facet $facet $LCTL nodemap_del ${nm}_1 || true" EXIT + do_facet $facet $LCTL nodemap_add_range --name ${nm}_1 \ --range $subnids1 || error "add_range for ${nm}_1 failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.${nm}_1.parent) + val=$(do_facet $facet $LCTL get_param -n nodemap.${nm}_1.parent) [[ "$val" == "$nm" ]] || error "parent of ${nm}_1 should be $nm, got $val" - do_facet ost1 $LCTL nodemap_add -d -p $nm ${nm}_2 || + do_facet $facet $LCTL nodemap_add -d -p $nm ${nm}_2 || error "nodemap add ${nm}_2 on server failed" - stack_trap "do_facet ost1 $LCTL nodemap_del ${nm}_2 || true" EXIT - do_facet ost1 $LCTL nodemap_add_range --name ${nm}_2 \ + stack_trap "do_facet $facet $LCTL nodemap_del ${nm}_2 || true" EXIT + do_facet $facet $LCTL nodemap_add_range --name ${nm}_2 \ --range $subnids2 || error "add_range for ${nm}_2 failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.${nm}_2.parent) + val=$(do_facet $facet $LCTL get_param -n nodemap.${nm}_2.parent) [[ "$val" == "$nm" ]] || error "parent of ${nm}_2 should be $nm, got $val" - do_facet ost1 $LCTL nodemap_add -d -p ${nm}_1 ${nm}_3 || + do_facet $facet $LCTL nodemap_add -d -p ${nm}_1 ${nm}_3 || error "nodemap add ${nm}_3 on server failed" - stack_trap "do_facet ost1 $LCTL nodemap_del ${nm}_3 || true" EXIT - do_facet ost1 $LCTL nodemap_add_range --name ${nm}_3 \ + stack_trap "do_facet $facet $LCTL nodemap_del ${nm}_3 || true" EXIT + do_facet $facet $LCTL nodemap_add_range --name ${nm}_3 \ --range $subnids4 && error "nodemap ${nm}_3 should not accept range $subnids4" - do_facet ost1 $LCTL nodemap_add_range --name ${nm}_3 \ + do_facet $facet $LCTL nodemap_add_range --name ${nm}_3 \ --range $subnids5 && error "nodemap ${nm}_3 should not accept range $subnids5" - do_facet ost1 $LCTL nodemap_add_range --name ${nm}_3 \ + do_facet $facet $LCTL nodemap_add_range --name ${nm}_3 \ --range $subnids6 && error "nodemap ${nm}_3 should not accept range $subnids6" - do_facet ost1 $LCTL nodemap_add_range --name ${nm}_3 \ + do_facet $facet $LCTL nodemap_add_range --name ${nm}_3 \ --range $subnids3 || error "add_range $subnids3 for ${nm}_3 failed" - val=$(do_facet ost1 $LCTL get_param -n nodemap.${nm}_3.parent) + val=$(do_facet $facet $LCTL get_param -n nodemap.${nm}_3.parent) [[ "$val" == "${nm}_1" ]] || error "parent of ${nm}_3 should be ${nm}_1, got $val" - val=$(do_facet ost1 $LCTL get_param -n nodemap.${nm}_3.squash_projid) + val=$(do_facet $facet $LCTL get_param -n nodemap.${nm}_3.squash_projid) (( val == 77 )) || error "squash_projid should be inherited, got $val" - do_facet ost1 $LCTL nodemap_del_range --name $nm --range $nids || + do_facet $facet $LCTL nodemap_del_range --name $nm --range $nids || error "dynamic del_range on server failed" - val=$(do_facet ost1 $LCTL get_param nodemap.$nm.ranges | + val=$(do_facet $facet $LCTL get_param nodemap.$nm.ranges | awk 'BEGIN{RS=", "} $1=="start_nid:"{print $2 ; exit}') [[ -z "$val" ]] || error "nid range should be empty, got $val" - do_facet ost1 $LCTL nodemap_del $nm || + do_facet $facet $LCTL nodemap_del $nm || error "dynamic nodemap del on server failed" - val=$(do_facet ost1 $LCTL get_param nodemap.$nm.id) + val=$(do_facet $facet $LCTL get_param nodemap.$nm.id) [[ -z "$val" ]] || error "nodemap should be gone, got $val" - do_facet ost1 $LCTL nodemap_add_range --name $mgsnm --range $mgsnids2 && - error "add_range $mgsnm on server should fail" - do_facet ost1 $LCTL nodemap_del_range --name $mgsnm --range $mgsnids && - error "del_range $mgsnm on server should fail" - do_facet ost1 $LCTL nodemap_add_idmap --name $mgsnm --idtype gid \ - --idmap $mgsclid:$mgsfsid && - error "add_idmap $mgsnm on server should fail" - do_facet ost1 $LCTL nodemap_del_idmap --name $mgsnm --idtype uid \ - --idmap $mgsclid:$mgsfsid && - error "del_idmap $mgsnm on server should fail" - do_facet ost1 $LCTL nodemap_modify --name $mgsnm \ - --property squash_projid --value 77 && - error "modify $mgsnm on server should fail" - do_facet ost1 $LCTL nodemap_del $mgsnm && - error "nodemap del $mgsnm on server should fail" - do_facet ost1 $LCTL get_param -R 'nodemap.*' -} -run_test 72 "dynamic nodemap properties" + if [[ "$(facet_active_host mgs)" != \ + "$(facet_active_host $facet)" ]]; then + do_facet $facet $LCTL nodemap_add_range --name $mgsnm \ + --range $mgsnids2 && + error "add_range $mgsnm on server should fail" + do_facet $facet $LCTL nodemap_del_range --name $mgsnm \ + --range $mgsnids && + error "del_range $mgsnm on server should fail" + do_facet $facet $LCTL nodemap_add_idmap --name $mgsnm \ + --idtype gid --idmap $mgsclid:$mgsfsid && + error "add_idmap $mgsnm on server should fail" + do_facet $facet $LCTL nodemap_del_idmap --name $mgsnm \ + --idtype uid --idmap $mgsclid:$mgsfsid && + error "del_idmap $mgsnm on server should fail" + do_facet $facet $LCTL nodemap_modify --name $mgsnm \ + --property squash_projid --value 77 && + error "modify $mgsnm on server should fail" + do_facet $facet $LCTL nodemap_del $mgsnm && + error "nodemap del $mgsnm on server should fail" + fi + do_facet $facet $LCTL get_param -R 'nodemap.*' +} + +test_72a() { + (( OST1_VERSION >= $(version_code 2.15.64) )) || + skip "Need MDS >= 2.15.64 dynamic nodemaps" + + [[ "$(facet_active_host mgs)" != "$(facet_active_host ost1)" ]] || + skip "Need servers on different hosts" + + dyn_nm_helper ost1 +} +run_test 72a "dynamic nodemap properties on OSS" + +test_72b() { + (( MDS1_VERSION >= $(version_code 2.15.64) )) || + skip "Need MDS >= 2.15.64 dynamic nodemaps" + + dyn_nm_helper mds1 +} +run_test 72b "dynamic nodemap properties on MDS" test_73() { local vaultdir1=$DIR/$tdir/vault1 -- 1.8.3.1