From acac8ed6cedbea00bee27b72a8f684012a52c9c0 Mon Sep 17 00:00:00 2001 From: Nathan Dunne Date: Fri, 30 Oct 2020 10:03:38 +0000 Subject: [PATCH] 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 Signed-off-by: Jon Mason --- .../xenguest/files/xenguest-manager | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/meta-arm-autonomy/recipes-extended/xenguest/files/xenguest-manager b/meta-arm-autonomy/recipes-extended/xenguest/files/xenguest-manager index 78ac55d3..4ea3a379 100755 --- a/meta-arm-autonomy/recipes-extended/xenguest/files/xenguest-manager +++ b/meta-arm-autonomy/recipes-extended/xenguest/files/xenguest-manager @@ -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