Viewing: yaml.sh
#!/usr/bin/bash
#
# Shell routines for logging results to a yaml file.
#
split_output() {
while read -r line; do
host=${line%%:*};
printf '%s\n' "$line" | sed -E "s/^$host: ?//" >> "$logdir/node.$host.yml"
done
}
yml_nodes_file() {
export logdir=$1
if [[ -f $logdir/shared ]]; then
do_rpc_nodes $(all_nodes) \
"yml_node >> $logdir/node.\\\$(hostname -s).yml"
else
do_rpc_nodes $(all_nodes) yml_node | split_output
fi
yml_entities
}
yml_results_file() {
export logdir=$1
#TestGroup
yml_test_group
#CodeReview
yml_code_review
# Tests
printf "Tests:\n"
}
# Called on the node for which we the info is needed.
yml_node() {
logdir=$1
printf "Build:\n"
yml_build_info
printf "\n"
printf "Node:\n"
yml_node_info
printf "\n"
printf "LustreEntities:\n"
}
yml_test_group() {
TEST_GROUP=${TEST_GROUP:-"acc-sm-$(hostname -s)"}
TEST_HOST=${TEST_HOST:-$(hostname -s)}
TEST_USER=${TEST_USER:-$USER}
TEST_PROJECT=${TEST_PROJECT:-"LUSTRE"}
# TestGroup information
cat <<EOF
TestGroup:
test_group: $TEST_GROUP
testhost: $TEST_HOST
submission: $(date)
user_name: $TEST_USER
project: $TEST_PROJECT
EOF
}
yml_code_review() {
echo -e $CODE_REVIEW_YAML
}
release() {
rhel_pat=".*release \([[:digit:]]\+\.[[:digit:]]\+\).*"
if [[ -r /etc/centos-release ]]; then
name=$(sed -n -e "s/^\([A-Za-z]\+\).*/\1/p" /etc/centos-release)
version=$(sed -n -e "s/${rhel_pat}/\1/p" /etc/centos-release)
dist="${name} ${version}"
elif [[ -r /etc/os-release ]]; then
name=$(sed -n -e 's/"//g' -e 's/ [A-Za-z]*$//' \
-e 's/^NAME=//p' /etc/os-release)
version=$(sed -n -e 's/"//g' -e 's/^VERSION_ID=//p' \
/etc/os-release)
dist="${name} ${version}"
else
dist="UNKNOWN"
fi
echo $dist
}
yml_build_info() {
local TEST_DISTRO=$(release)
local LUSTRE_VERSION=$(lustre_build_version)
local LUSTRE_BUILD=${LUSTRE_BUILD_SOURCE:-$LUSTRE_VERSION}
local FILE_SYSTEM=$(node_fstypes $(hostname -s))
cat <<EOF
lbats_build_id: $LBATS_ID
lbats_build_name: $LBATS_NAME
architecture: $(uname -m)
os: $(uname -o)
os_distribution: $TEST_DISTRO
version: $LUSTRE_VERSION
build: $LUSTRE_BUILD
branch: $LUSTRE_BRANCH
revision: $LUSTRE_REVISION
kernel_version: $(uname -r)
file_system: ${FILE_SYSTEM:-"NA"}
EOF
}
yml_node_info()
{
mem=$(awk '/MemTotal:/ {print $2 " " $3}' /proc/meminfo)
cat <<EOF
node_name: $(hostname -s)
mem_size: $mem
architecture: $(uname -m)
networks:
EOF
for nid in $(lctl list_nids | grep -v @lo ); do
printf " - ${nid##*@}\n"
done | sort -u
echo " nids:"
for nid in $(lctl list_nids | grep -v @lo ); do
printf " - $nid\n"
done
}
yml_entity() {
cat<<EOF
-
node_type: $1
node_name: $2
EOF
}
yml_entities() {
local host
local f_host
local i
if ! combined_mgs_mds; then
host=$(short_hostname $(facet_active_host mgs))
f_host=$(short_hostname $(facet_passive_host mgs))
yml_entity "MGS" $host >> $logdir/node.$host.yml
[[ -n $f_host ]] &&
yml_entity "MGS" $f_host >> $logdir/node.$f_host.yml
fi
for ((i = 1; i <= $MDSCOUNT; i++)); do
host=$(short_hostname $(facet_active_host mds$i))
f_host=$(short_hostname $(facet_passive_host mds$i))
yml_entity "MDS $i" $host >> $logdir/node.$host.yml
[[ -n $f_host ]] &&
yml_entity "MDS $i" $f_host >> $logdir/node.$f_host.yml
done
for ((i = 1; i <= $OSTCOUNT; i++)); do
host=$(short_hostname $(facet_active_host ost$i))
f_host=$(short_hostname $(facet_passive_host ost$i))
yml_entity "OST $i" $host >> $logdir/node.$host.yml
[[ -n $f_host ]] &&
yml_entity "OST $i" $f_host >> $logdir/node.$f_host.yml
done
i=1
for host in ${CLIENTS//,/ }; do
host=$(short_hostname $host)
yml_entity "Client $i" $host >> $logdir/node.$host.yml
i=$((i+1))
done
}
yml_log_test() {
if [[ $1 != "FINISHED" ]]; then
cat <<EOF
-
name: $1
description: $TESTSUITE $1
submission: $(date)
report_version: 2
SubTests:
EOF
fi
}
yml_log_test_status() {
cat <<EOF
duration: $1
status: $2
EOF
}
yml_log_sub_test_begin() {
cat <<EOF
-
name: $1
EOF
}
yml_log_sub_test_end() {
cat <<EOF
status: $1
duration: $2
return_code: $3
EOF
shift 3
if [[ -z "$*" ]]; then
printf ' error:\n'
else
printf ' error: "%q"\n' "$*"
fi
}
yml_log_sub_test_log() {
cat <<EOF
-
name: $1
type: $2
location: $3
EOF
}