1
0
mirror of https://git.yoctoproject.org/meta-arm synced 2026-05-31 00:39:57 +00:00

arm-autonomy/xenguest-manager: Allow guests with substring names

Created new function for determining guest running state such that
two guests with names such as "myguest" and "myguest2" report
correctly, by searching for exact guestname instead of contains.

Also modified the status command to use the same function to avoid
duplication, and added a new nested function for testing status for
a particular guest, instead of recursively calling the whole bash
script.

Using the nested function speeds up "xenguest-manager status" from
~7.5s to ~1.5s my machine.

Change-Id: Ie6fc08cacc55f623c44b08478f76031510a59126
Issue-Id: SCM-1517
Signed-off-by: Nathan Dunne <Nathan.Dunne@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
This commit is contained in:
Nathan Dunne
2020-10-30 10:03:38 +00:00
committed by Jon Mason
parent 5f8eabe68f
commit acac8ed6ce
@@ -597,11 +597,22 @@ function check_guest_exist()
fi
}
function xl_list_contains()
{
guestname="${1}"
# Select first column of xl list, and find guestname exactly using regex
running=$(xl list | awk 'NR > 1 {print $1}' | grep "^${guestname}$" || echo)
if [ "${running}" = "${guestname}" ]; then
return 0
fi
return 1
}
function check_guest_running()
{
guestname="${1}"
running=$(xl list | awk 'NR > 1 {print $1}' | grep "${guestname}" || echo)
if [ ! "${running}" = "${guestname}" ]; then
if ! xl_list_contains $guestname; then
echo "${PREF} Guest ${guestname} is not running"
exit 1
fi
@@ -610,8 +621,7 @@ function check_guest_running()
function check_guest_not_running()
{
guestname="${1}"
running=$(xl list | awk 'NR > 1 {print $1}' | grep "${guestname}" || echo)
if [ "${running}" = "${guestname}" ]; then
if xl_list_contains $guestname; then
echo "${PREF} Guest ${guestname} is running"
exit 1
fi
@@ -668,10 +678,8 @@ case ${cmd} in
guestname="${arg1:-}"
check_guest_arg ${cmd} ${guestname}
check_guest_exist ${guestname}
# We need to stop the guest first
running=$(xl list | awk 'NR > 1 {print $1}' | grep "${guestname}" \
|| echo)
if [ "${running}" = "${guestname}" ]; then
# We need to stop the guest first if it is running
if xl_list_contains $guestname; then
echo "xl destroy ${guestname}" >> ${LOGFILE} 2>&1
xl destroy ${guestname} >> ${LOGFILE} 2>&1
if [ $? -ne 0 ]; then
@@ -719,20 +727,25 @@ case ${cmd} in
fi
;;
status)
guestname="${arg1}"
if [ -n "${guestname}" ]; then
single_status() (
guestname="${1}"
check_guest_exist ${guestname}
if xl list | awk 'NR > 1 {print $1}' | grep "${guestname}" > \
/dev/null 2>&1; then
if xl_list_contains $guestname; then
echo "${guestname}: Running"
else
echo "${guestname}: Stopped"
fi
)
guestname="${arg1}"
if [ -n "${guestname}" ]; then
single_status ${guestname}
else
guestlist=$($this list)
if [ -n "${guestlist}" ]; then
for f in ${guestlist}; do
$this status $f
single_status $f
done
fi
fi