diff options
author | Peter Stachowski <peter@tesora.com> | 2016-09-01 16:21:07 +0000 |
---|---|---|
committer | Peter Stachowski <peter@tesora.com> | 2016-09-14 21:10:22 +0000 |
commit | 865c0aa754158fe8e43afd29b3c46e0c27d3b568 (patch) | |
tree | b79c009c9e040b788f4fa7f44d006c8e68a3ea77 | |
parent | bca4b2880bc3d0da326f6938b0e983752bd71d3e (diff) | |
download | trove-integration-865c0aa754158fe8e43afd29b3c46e0c27d3b568.tar.gz |
Enhance 'redstack clean' regarding modules
Adds a sql command to make sure the modules are not marked
as having been applied to an instance so that they can be
deleted (otherwise an error may occur if the instance hasn't
gone away yet).
Enhanced the logic to only sleep if objects are found
and to keep trying until the objects are gone (up to 10 times).
This makes runs with nothing to delete faster and negates having
to run the script multiple times if objects delete slower than
expected.
Added a check for server-groups to delete them if they exist.
Fixed security group delete to look for the 'default' name instead
of an id of '1' (which could be incorrect). Also switched it to
use the OpenStack client, since Nova was reporting a deprecation
warning:
WARNING: Command secgroup-delete is deprecated and will be removed
after Nova 15.0.0 is released. Use python-neutronclient or
python-openstackclient instead.
Unfortunately python-openstackclient has a warning of its own:
WARNING: openstackclient.common.utils is deprecated and will be
removed after Jun 2017. Please use osc_lib.utils
Hopefully this warning will go away once the 'openstack' client is
updated.
Change-Id: If429b2d04111a6e8adbb90c001002215a927d1da
-rwxr-xr-x | scripts/redstack | 57 |
1 files changed, 43 insertions, 14 deletions
diff --git a/scripts/redstack b/scripts/redstack index 3b5f691..79e8177 100755 --- a/scripts/redstack +++ b/scripts/redstack @@ -1131,13 +1131,42 @@ function cmd_clear() { function exec_cmd_on_output() { local output_cmd=$1 local exec_cmd=$2 - local skip_id=${3:-""} + local delete_sleep_time=${3:-0} + local skip_pattern=${4:-""} echo "Cleaning up objects from '${output_cmd}'" - exec $output_cmd|awk -vexec_cmd="$exec_cmd" -vskip_id="$skip_id" '{if (NR>3 && $2!="" && $2!=skip_id && $2!="|") { cmd = exec_cmd " " $2; print "Executing " cmd; system(cmd) } }' + local skip_cmd="cat" + if [[ -n "${skip_pattern}" ]]; then + local temp_skip_cmd=(grep -v "${skip_pattern}") + skip_cmd=${temp_skip_cmd[*]} + fi + local max_retry=10 + local count=1 + local again= + while true; do + ids=$($output_cmd | ${skip_cmd} | grep -v -e'---' | grep -iv ' id ' | cut -d'|' -f2) + if [[ -n $ids ]]; then + for id in $ids; do + echo -e "Executing: ${exec_cmd} ${id} ${again}" + # don't stop if we get an error executing the delete, and don't print + # out anything from stderr + set +e + ${exec_cmd} "${id}" &> /dev/null + set -e + done + sleep "${delete_sleep_time}" + else + break + fi + ((count++)) + if [[ "$count" -gt "$max_retry" ]]; then + exclaim "${COLOR_RED}WARNING: '$output_cmd' still returning output after ${max_retry} delete attempts${COLOR_NONE}" + break + fi + again="${COLOR_BLUE}(again)${COLOR_NONE}" + done } - function cmd_clean() { echo "Cleaning up project '${OS_PROJECT_NAME}'" # reset any stuck backups @@ -1150,27 +1179,27 @@ function cmd_clean() { mysql_trove "update clusters set task_id=1" # get rid of any extraneous quota usage mysql_trove "delete from quota_usages" + # mark all instance modules as deleted + mysql_trove "update instance_modules set deleted=1" - source $PATH_DEVSTACK_SRC/openrc admin ${OS_PROJECT_NAME} + source "${PATH_DEVSTACK_SRC}"/openrc admin "${OS_PROJECT_NAME}" # delete any trove clusters - exec_cmd_on_output "trove cluster-list" "trove cluster-delete" + exec_cmd_on_output "trove cluster-list" "trove cluster-delete" 20 # delete any trove instances - exec_cmd_on_output "trove list" "trove delete" + exec_cmd_on_output "trove list" "trove delete" 10 # delete any backups exec_cmd_on_output "trove backup-list" "trove backup-delete" - # sleep for a bit and then clean up - # any remaining nova instances or cinder volumes - sleep 5 - exec_cmd_on_output "nova list" "nova delete" - sleep 2 - exec_cmd_on_output "cinder list" "cinder delete" + # clean up any remaining nova instances or cinder volumes + exec_cmd_on_output "nova list" "nova delete" 5 + exec_cmd_on_output "cinder list" "cinder delete" 1 # delete any config groups since all instances should be gone now exec_cmd_on_output "trove configuration-list" "trove configuration-delete" # delete any modules too exec_cmd_on_output "trove module-list" "trove module-delete" # make sure that security groups are also gone, except the default - exec_cmd_on_output "nova secgroup-list" "nova secgroup-delete" "1" - echo "If any errors occurred wait a few seconds and run the command again" + exec_cmd_on_output "openstack security group list" "nova security group delete" 0 "default" + # delete server groups + exec_cmd_on_output "nova server-group-list" "nova server-group-delete" } function cmd_kick_start() { |