.I "-z, --zpool LABEL"
Print zpool containing LABEL.
.TP
+.I "-R, --role ROLE"
+Filter output based on role, i.e. mdt, ost, mgs.
+.TP
.I "CMD [ARGS...]"
Run one instance of \fICMD [ARGS]\fR for each label in parallel.
Only the local labels are used by default, but foreign, all, or file system
-r, --raidtab LABEL Print raidtab of LABEL if it exists.
-t, --type LABEL Print device type of LABEL, i.e. "zfs" or "md".
-z, --zpool LABEL Print zpool containing LABEL.
+ -R, --role ROLE Filter output based on role, i.e. mdt, ost, mgs.
CMD [ARGS] ... Run CMD in parallel for each device substituting:
%f=fsname %d=device %i=dec-index %n=main-nid %l=label
%t=srvtype %j=journal %I=hex-index %N=fail-nid %m=mgs-nid
$conf{sanity} = 0;
$conf{execcmd} = "";
$conf{journal} = "";
+ $conf{role} = "";
$conf{fsname} = "";
my $rc = GetOptions (
"raidtab|r=s" => \$conf{raidtab},
"type|t=s" => \$conf{type},
"zpool|z=s" => \$conf{zpool},
+ "role|R=s" => \$conf{role},
"filesys|F=s" => \$conf{fsname},
);
eparse_line ($line, "elabel_uniq") if (exists $label2dev{$label}
|| exists $label2local{$label});
- /(\w+)-(OST|MDT|MGT|MGS)([0-9a-fA-F]{4})/, $label;
+ /(\w+)-(OST|MDT|MGS)([0-9a-fA-F]{4})/, $label;
my $filesys = $1;
my $nodetype = $2;
$label2dev{$label} = $dev;
}
}
$label2hostname{$label}=$local;
- if ($nodetype eq "MGS" or $nodetype eq "MGT") {
+
+ if ($nodetype eq "MGS") {
$filesys2mgs{$filesys} = $label;
}
+ next if $conf{role} and lc $conf{role} ne lc $nodetype;
+
if ($local eq $conf{hostname}) {
push @local_labels, $label;
} elsif ($foreign eq $conf{hostname}) {
}
foreach (@labels) {
- /(\w+)-(OST|MDT|MGT|MGS)([0-9a-fA-F]{4})/;
+ /(\w+)-(OST|MDT|MGS)([0-9a-fA-F]{4})/;
my $fsname = $1;
my $type = $2; $type =~ tr/A-Z/a-z/;
}
run_test 96 "ldev returns hostname and backend fs correctly in command sub"
+test_97() {
+ if [ -z "$LDEV" ]; then
+ error "ldev is missing!"
+ fi
+
+ local LDEVCONFPATH=$TMP/ldev.conf
+ local NIDSPATH=$TMP/nids
+
+ generate_ldev_conf $LDEVCONFPATH
+ generate_nids $NIDSPATH
+
+ local LDEV_OUTPUT=$TMP/ldev-output.txt
+ local EXPECTED_OUTPUT=$TMP/ldev-expected-output.txt
+
+ echo -e "\nMDT role"
+ $LDEV -c $LDEVCONFPATH -n $NIDSPATH -F $FSNAME -R mdt > $LDEV_OUTPUT
+
+ if [ $? -ne 0 ]; then
+ rm $LDEVCONFPATH $NIDSPATH $LDEV_OUTPUT
+ error "ldev failed to execute for mdt role!"
+ fi
+
+ for num in $(seq $MDSCOUNT); do
+ printf "%s-MDT%04d\n" $FSNAME $num >> $EXPECTED_OUTPUT
+ done
+
+ compare_ldev_output $LDEV_OUTPUT $EXPECTED_OUTPUT
+
+ if [ $? -ne 0 ]; then
+ rm $LDEVCONFPATH $NIDSPATH $EXPECTED_OUTPUT $LDEV_OUTPUT
+ error "ldev failed to produce the correct output for mdt role!"
+ fi
+
+ echo -e "\nOST role"
+ $LDEV -c $LDEVCONFPATH -n $NIDSPATH -F $FSNAME -R ost > $LDEV_OUTPUT
+
+ if [ $? -ne 0 ]; then
+ rm $LDEVCONFPATH $NIDSPATH $LDEV_OUTPUT $EXPECTED_OUTPUT
+ error "ldev failed to execute for ost role!"
+ fi
+
+ rm $EXPECTED_OUTPUT
+ for num in $(seq $OSTCOUNT); do
+ printf "%s-OST%04d\n" $FSNAME $num >> $EXPECTED_OUTPUT
+ done
+
+ compare_ldev_output $LDEV_OUTPUT $EXPECTED_OUTPUT
+
+ if [ $? -ne 0 ]; then
+ rm $LDEVCONFPATH $NIDSPATH $EXPECTED_OUTPUT $LDEV_OUTPUT
+ error "ldev failed to produce the correct output for ost role!"
+ fi
+
+ echo -e "\nMGS role"
+ $LDEV -c $LDEVCONFPATH -n $NIDSPATH -F $FSNAME -R mgs > $LDEV_OUTPUT
+
+ if [ $? -ne 0 ]; then
+ rm $LDEVCONFPATH $NIDSPATH $LDEV_OUTPUT $EXPECTED_OUTPUT
+ error "ldev failed to execute for mgs role!"
+ fi
+
+ printf "%s-MGS0000\n" $FSNAME > $EXPECTED_OUTPUT
+
+ compare_ldev_output $LDEV_OUTPUT $EXPECTED_OUTPUT
+
+ if [ $? -ne 0 ]; then
+ rm $LDEVCONFPATH $NIDSPATH $EXPECTED_OUTPUT $LDEV_OUTPUT
+ error "ldev failed to produce the correct output for mgs role!"
+ fi
+
+ rm $LDEVCONFPATH $NIDSPATH $EXPECTED_OUTPUT $LDEV_OUTPUT
+}
+run_test 97 "ldev returns correct ouput when querying based on role"
+
if ! combined_mgs_mds ; then
stop mgs
fi