nfv/nfv/nfv-tests/nfv_api_tests/vim_random_tests.script

392 lines
13 KiB
Bash

#!/bin/bash
#
# Copyright (c) 2016 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
export TMOUT=0
. /etc/nova/openrc
TEST_SCRIPT_TAG=${TEST_SCRIPT_TAG:-"TEST_SCRIPT"}
UUID_FORMAT=^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
NOVA_LIST_UUID=1
NOVA_LIST_HOST=2
NOVA_LIST_NAME=3
VM_UUID=1
VM_HOST=2
VM_NAME=3
VM_STATE=4
VM_TASK_STATE=5
VM_POWER_STATE=6
################################################################################
# Get raw results of nova list
################################################################################
function get_nova_list
{
NOVA_LIST_RESULT="$(nova list --all-tenants --field OS-EXT-SRV-ATTR:host,name,status,task_state,power_state 2>&1)"
RET=$?
if [ ${RET} -ne 0 ]
then
echo "Failed to get nova list, error=${RET}"
NOVA_LIST_RESULT=""
fi
}
################################################################################
################################################################################
# Get random VM
################################################################################
function get_random_vm
{
declare -a VM_LIST
declare VM_COUNT=0
get_nova_list
while read -r line
do
IFS='| ' read -a vm <<< "${line}"
if [[ ${vm[${NOVA_LIST_UUID}]} =~ ${UUID_FORMAT} ]]
then
VM_LIST[${VM_COUNT}]="${line}"
((VM_COUNT++))
fi
done <<< "${NOVA_LIST_RESULT}"
if [ ${VM_COUNT} -ne 0 ]
then
VM_INDEX=$((RANDOM % ${VM_COUNT}))
VM=${VM_LIST[${VM_INDEX}]}
else
VM=""
fi
# echo "${#VM_LIST[*]}"
}
################################################################################
################################################################################
# Get VM by name
################################################################################
function get_vm_by_name
{
vm_name=${1}
VM=""
get_nova_list
while read -r line
do
IFS='| ' read -a vm <<< "${line}"
if [[ ${vm[${NOVA_LIST_UUID}]} =~ ${UUID_FORMAT} ]]
then
if [ ${vm[${NOVA_LIST_NAME}]} == "${vm_name}" ]
then
VM="${line}"
break
fi
fi
done <<< "${NOVA_LIST_RESULT}"
}
################################################################################
################################################################################
# Wait for VM paused
################################################################################
function wait_for_vm_paused
{
vm_name=${1}
while [ True ]
do
get_vm_by_name ${vm_name}
if [ -z "${VM}" ]
then
echo "Failed to get instance ${vm_name}"
continue
fi
IFS='| ' read -a vm <<< "${VM}"
if [ "PAUSED" == "${vm[${VM_STATE}]}" ]
then
if [ "None" == "${vm[${VM_TASK_STATE}]}" ]
then
if [ "Paused" == "${vm[${VM_POWER_STATE}]}" ]
then
break
fi
fi
fi
sleep 5
done
}
################################################################################
################################################################################
# Wait for VM suspended
################################################################################
function wait_for_vm_suspended
{
vm_name=${1}
while [ True ]
do
get_vm_by_name ${vm_name}
if [ -z "${VM}" ]
then
echo "Failed to get instance ${vm_name}"
continue
fi
IFS='| ' read -a vm <<< "${VM}"
if [ "SUSPENDED" == "${vm[${VM_STATE}]}" ]
then
if [ "None" == "${vm[${VM_TASK_STATE}]}" ]
then
if [ "Shutdown" == "${vm[${VM_POWER_STATE}]}" ]
then
break
fi
fi
fi
sleep 5
done
}
################################################################################
################################################################################
# Wait for VM shutdown
################################################################################
function wait_for_vm_shutdown
{
vm_name=${1}
while [ True ]
do
get_vm_by_name ${vm_name}
if [ -z "${VM}" ]
then
echo "Failed to get instance ${vm_name}"
continue
fi
IFS='| ' read -a vm <<< "${VM}"
if [ "SHUTOFF" == "${vm[${VM_STATE}]}" ]
then
if [ "None" == "${vm[${VM_TASK_STATE}]}" ]
then
if [ "Shutdown" == "${vm[${VM_POWER_STATE}]}" ]
then
break
fi
fi
fi
sleep 5
done
}
################################################################################
################################################################################
# Wait for VM recovery
################################################################################
function wait_for_vm_recovery
{
vm_name=${1}
while [ True ]
do
get_vm_by_name ${vm_name}
if [ -z "${VM}" ]
then
echo "Failed to get instance ${vm_name}"
continue
fi
IFS='| ' read -a vm <<< "${VM}"
if [ "ACTIVE" == "${vm[${VM_STATE}]}" ]
then
if [ "None" == "${vm[${VM_TASK_STATE}]}" ]
then
if [ "Running" == "${vm[${VM_POWER_STATE}]}" ]
then
break
fi
fi
fi
sleep 5
done
}
################################################################################
################################################################################
# Main Entry
################################################################################
STATIC_CMD_INDEX=999
options=':c:'
while getopts $options option
do
case ${option} in
c) STATIC_CMD_INDEX=$OPTARG;;
esac
done
CMD_COUNT=0
while [ True ]
do
TODAY=$(date)
((CMD_COUNT++))
if [ ${STATIC_CMD_INDEX} -ne 999 ]
then
CMD_INDEX=${STATIC_CMD_INDEX}
else
CMD_INDEX=$((1 + RANDOM % 8))
fi
if [ ${CMD_INDEX} -lt 7 ]
then
get_random_vm
if [ -z "${VM}" ]
then
echo "Failed to get an instance"
continue
fi
IFS='| ' read -a vm <<< "${VM}"
fi
case ${CMD_INDEX} in
1)
echo "${TODAY}: ${CMD_COUNT}. Reboot (hard) ${vm[${VM_NAME}]}"
nova reboot --hard "${vm[${VM_NAME}]}" 2>&1 >/dev/null
sleep 10
wait_for_vm_recovery "${vm[${VM_NAME}]}"
echo "${TODAY}: ${CMD_COUNT}. Reboot (hard) ${vm_name} complete"
;;
2)
echo "${TODAY}: ${CMD_COUNT}. Reboot (soft) ${vm[${VM_NAME}]}"
nova reboot "${vm[${VM_NAME}]}" 2>&1 >/dev/null
sleep 10
wait_for_vm_recovery "${vm[${VM_NAME}]}"
echo "${TODAY}: ${CMD_COUNT}. Reboot (soft) ${vm_name} complete"
;;
3)
echo "${TODAY}: ${CMD_COUNT}. Live-Migrate ${vm[${VM_NAME}]}"
nova live-migration "${vm[${VM_NAME}]}" 2>&1 >/dev/null
sleep 10
wait_for_vm_recovery "${vm[${VM_NAME}]}"
echo "${TODAY}: ${CMD_COUNT}. Live-Migrate ${vm_name} complete"
;;
4)
echo "${TODAY}: ${CMD_COUNT}. Stop ${vm[${VM_NAME}]}"
nova stop "${vm[${VM_NAME}]}" 2>&1 >/dev/null
sleep 10
wait_for_vm_shutdown "${vm[${VM_NAME}]}"
echo "${TODAY}: ${CMD_COUNT}. Stop ${vm_name} complete"
sleep 5
echo "${TODAY}: ${CMD_COUNT}. Start ${vm[${VM_NAME}]}"
nova start "${vm[${VM_NAME}]}" 2>&1 >/dev/null
sleep 10
wait_for_vm_recovery "${vm[${VM_NAME}]}"
echo "${TODAY}: ${CMD_COUNT}. Start ${vm_name} complete"
;;
5)
echo "${TODAY}: ${CMD_COUNT}. Pause ${vm[${VM_NAME}]}"
nova pause "${vm[${VM_NAME}]}" 2>&1 >/dev/null
sleep 10
wait_for_vm_paused "${vm[${VM_NAME}]}"
echo "${TODAY}: ${CMD_COUNT}. Pause ${vm_name} complete"
sleep 5
echo "${TODAY}: ${CMD_COUNT}. Unpause ${vm[${VM_NAME}]}"
nova unpause "${vm[${VM_NAME}]}" 2>&1 >/dev/null
sleep 10
wait_for_vm_recovery "${vm[${VM_NAME}]}"
echo "${TODAY}: ${CMD_COUNT}. Unpause ${vm_name} complete"
;;
6)
echo "${TODAY}: ${CMD_COUNT}. Suspend ${vm[${VM_NAME}]}"
nova suspend "${vm[${VM_NAME}]}" 2>&1 >/dev/null
sleep 10
wait_for_vm_suspended "${vm[${VM_NAME}]}"
echo "${TODAY}: ${CMD_COUNT}. Suspend ${vm_name} complete"
sleep 5
echo "${TODAY}: ${CMD_COUNT}. Resume ${vm[${VM_NAME}]}"
nova resume "${vm[${VM_NAME}]}" 2>&1 >/dev/null
sleep 10
wait_for_vm_recovery "${vm[${VM_NAME}]}"
echo "${TODAY}: ${CMD_COUNT}. Resume ${vm_name} complete"
;;
7)
echo "${TODAY}: ${CMD_COUNT}. Add Hosts (compute40, compute41, compute42, compute43, compute44, compute45, compute46)"
system host-add --hostname compute40 --personality worker --mgmt_mac 5a:ec:8b:20:02:65 --bm_mac 58:20:B2:0A:6A:72 --bm_ip 10.32.254.71 --bm_type ilo4 --bm_username hpadmin --bm_password HPinvent2016 2>&1 >/dev/null
system host-add --hostname compute41 --personality worker --mgmt_mac 5a:ec:8b:20:02:66 --bm_mac 58:20:B2:0A:6A:73 --bm_ip 10.32.254.72 --bm_type ilo4 --bm_username hpadmin --bm_password HPinvent2016 2>&1 >/dev/null
system host-add --hostname compute42 --personality worker --mgmt_mac 5a:ec:8b:20:02:69 --bm_mac 58:20:b2:0b:73:30 --bm_ip 10.32.254.73 --bm_type ilo4 --bm_username hpadmin --bm_password HPinvent2016 2>&1 >/dev/null
system host-add --hostname compute43 --personality worker --mgmt_mac 5a:ec:8b:20:02:70 --bm_mac 58:20:b2:0b:73:31 --bm_ip 10.32.254.74 --bm_type ilo4 --bm_username hpadmin --bm_password HPinvent2016 2>&1 >/dev/null
system host-add --hostname compute44 --personality worker --mgmt_mac 5a:ec:8b:20:02:6d --bm_mac 58:20:b2:0b:9a:6a --bm_ip 10.32.254.75 --bm_type ilo4 --bm_username hpadmin --bm_password HPinvent2016 2>&1 >/dev/null
system host-add --hostname compute45 --personality worker --mgmt_mac 5a:ec:8b:20:02:6f --bm_mac 58:20:B2:0B:DA:06 --bm_ip 10.32.254.76 --bm_type ilo4 --bm_username hpadmin --bm_password HPinvent2016 2>&1 >/dev/null
system host-add --hostname compute46 --personality worker --mgmt_mac 5a:ec:8b:20:02:71 --bm_mac 58:20:B2:0A:68:38 --bm_ip 10.32.254.77 --bm_type ilo4 --bm_username hpadmin --bm_password HPinvent2016 2>&1 >/dev/null
echo "${TODAY}: ${CMD_COUNT}. Added Hosts (compute40, compute41, compute42, compute43, compute44, compute45, compute46)"
sleep 30
echo "${TODAY}: ${CMD_COUNT}. Delete Hosts (compute40, compute41, compute42, compute43, compute44, compute45, compute46)"
system host-delete compute40 2>&1 >/dev/null
system host-delete compute41 2>&1 >/dev/null
system host-delete compute42 2>&1 >/dev/null
system host-delete compute43 2>&1 >/dev/null
system host-delete compute44 2>&1 >/dev/null
system host-delete compute45 2>&1 >/dev/null
system host-delete compute46 2>&1 >/dev/null
echo "${TODAY}: ${CMD_COUNT}. Deleted Hosts (compute40, compute41, compute42, compute43, compute44, compute45, compute46)"
;;
8)
vm_array=( "my-vm-1" "my-vm-2" "my-vm-3" "my-vm-4" "my-vm-5" "my-vm-6" )
for vm_name in "${vm_array[@]}"
do
get_vm_by_name "${vm_name}"
if [ -z "${VM}" ]
then
echo "${TODAY}: ${CMD_COUNT}. Add VM ${vm_name}"
nova boot --image cirros --flavor tiny --nic net-id=aa83f540-d222-4957-aadf-a5e788f9b8f1 ${vm_name} 2>&1 >/dev/null
echo "${TODAY}: ${CMD_COUNT}. Added VM ${vm_name}"
else
echo "${TODAY}: ${CMD_COUNT}. Delete VM ${vm_name}"
nova delete ${vm_name} 2>&1 >/dev/null
echo "${TODAY}: ${CMD_COUNT}. Deleted VM ${vm_name}"
fi
done
sleep 30
;;
*)
;;
esac
done
################################################################################