+generate_ldev_conf() {
+ # generate an ldev.conf file
+ local ldevconfpath=$1
+ touch $ldevconfpath
+ printf "%s\t-\t%s-MGS0000\t%s\n" \
+ $mgs_HOST \
+ $FSNAME \
+ $(mgsdevname) >> $ldevconfpath
+
+ local mdsfo_host=$mdsfailover_HOST;
+ if [ -z "$mdsfo_host" ]; then
+ mdsfo_host="-"
+ fi
+
+ for num in $(seq $MDSCOUNT); do
+ printf "%s\t%s\t%s-MDT%04d\t%s\n" \
+ $mds_HOST \
+ $mdsfo_host \
+ $FSNAME \
+ $num \
+ $(mdsdevname $num) >> $ldevconfpath
+ done
+
+ local ostfo_host=$ostfailover_HOST;
+ if [ -z "$ostfo_host" ]; then
+ ostfo_host="-"
+ fi
+
+ for num in $(seq $OSTCOUNT); do
+ printf "%s\t%s\t%s-OST%04d\t%s\n" \
+ $ost_HOST \
+ $ostfo_host \
+ $FSNAME \
+ $num \
+ $(ostdevname $num) >> $ldevconfpath
+ done
+}
+
+generate_nids() {
+ # generate a nids file (mapping between hostname to nid)
+ # looks like we only have the MGS nid available to us
+ # so just echo that to a file
+ local nidspath=$1
+ touch $nidspath
+ echo -e "${mgs_HOST}\t${MGSNID}" >> $nidspath
+}
+
+test_92() {
+ local LDEVCONFPATH=$TMP/ldev.conf
+ local NIDSPATH=$TMP/nids
+
+ echo "Host is $(hostname)"
+
+ generate_ldev_conf $LDEVCONFPATH
+ generate_nids $NIDSPATH
+
+ echo "----- ldev.conf -----"
+ cat $LDEVCONFPATH
+ echo "--- END ldev.conf ---"
+
+ echo "----- /etc/nids -----"
+ cat $NIDSPATH
+ echo "--- END /etc/nids ---"
+
+ # ldev can be in our build tree and if we aren't in a
+ # build tree, use 'which' to try and find it
+ local LDEV=$LUSTRE/scripts/ldev
+ [ ! -f "$LDEV" ] && local LDEV=$(which ldev 2> /dev/null)
+
+ echo "ldev path is $LDEV"
+
+ if [ ! -f "$LDEV" ]; then
+ rm $LDEVCONFPATH $NIDSPATH
+ error "failed to find ldev!"
+ fi
+
+ # echo the mgs nid and compare it to environment variable MGSNID
+ # also, ldev.conf and nids is a server side thing, use the OSS
+ # hostname
+ local output
+ output=$(perl $LDEV -c $LDEVCONFPATH -H \
+ $ost_HOST -n $NIDSPATH echo %m)
+
+ echo "-- START OF LDEV OUTPUT --"
+ echo -e "$output"
+ echo "--- END OF LDEV OUTPUT ---"
+
+ # ldev failed, error
+ if [ $? -ne 0 ]; then
+ rm $LDEVCONFPATH $NIDSPATH
+ error "ldev failed to execute!"
+ fi
+
+ # need to process multiple lines because of combined MGS and MDS
+ echo -e $output | awk '{ print $2 }' | while read -r line ; do
+ if [ "$line" != "$MGSNID" ]; then
+ rm $LDEVCONFPATH $NIDSPATH
+ error "ldev failed mgs nid '$line', expected '$MGSNID'"
+ fi
+ done
+
+ rm $LDEVCONFPATH $NIDSPATH
+}
+run_test 92 "ldev returns MGS NID correctly in command substitution"
+