| echo "" |
| echo "This script is obsolete. Please use the following script instead: cd /opt/res-files; python3 cleanup.py" |
| echo "" |
| |
| ##!/bin/bash |
| #export OS_INTERFACE='admin' |
| #mask='cvp\|s_rally\|rally_\|tempest_\|tempest-\|spt-' |
| #exclude='manual\|-static-' |
| #stack_alt=false |
| #stack_regex='api-[0-9]+-[a-z]+' |
| #dry_run=false |
| #clean_projects=false |
| #make_servers_active=false |
| #serial=false |
| #batch_size=10 |
| ## granularity values: days,hours,minutes,seconds |
| #stack_granularity=days |
| #stack_granularity_value=1 |
| # |
| #function show_help { |
| # printf "Resource cleaning script\nMask is: %s\n\t-h, -?\tShow this help\n" ${mask} |
| # printf "\t-t\tDry run mode, no cleaning done\n" |
| # printf "\t-P\tForce cleaning of projects\n" |
| # printf "\t-s\tUse single thread of 'openstack' client for cleanup\n" |
| # printf "\t-S\tSet servers to ACTIVE before deletion (bare metal reqiured)\n" |
| # printf "\t-f\tForce stack cleanup with an additional mask of '%s'\n" ${stack_regex} |
| # printf "\t-F\tForce purge deleted stacks. Batch size: %s, >%s %s\n" ${batch_size} ${stack_granularity_value} ${stack_granularity} |
| #} |
| # |
| #OPTIND=1 # Reset in case getopts has been used previously in the shell. |
| #while getopts "h?:tsSPfF" opt; do |
| # case "$opt" in |
| # h|\?) |
| # show_help |
| # exit 0 |
| # ;; |
| # t) dry_run=true |
| # printf "Running in dry-run mode\n" |
| # ;; |
| # s) serial=true |
| # printf "Single threaded mode enabled\n" |
| # ;; |
| # S) make_servers_active=true |
| # printf "Servers will be set to ACTIVE before deletion\n" |
| # ;; |
| # P) clean_projects=true |
| # printf "Project cleanning enabled\n" |
| # ;; |
| # f) stack_alt=true |
| # printf "Cleaning stacks using additional mask '%s'\n" ${stack_regex} |
| # ;; |
| # F) purge_deleted_stacks=true |
| # printf "Purging stacks deleted >$stack_granularity_value $stack_granularity ago enabled, batch size %s\n" $stack_batch_size |
| # ;; |
| # esac |
| #done |
| # |
| #shift $((OPTIND-1)) |
| #[ "${1:-}" = "--" ] && shift |
| # |
| #### Execute collected commands and flush the temp file |
| #function _clean_and_flush { |
| # if [ "$dry_run" = true ] ; then |
| # return 0 |
| # fi |
| # if [ -s ${cmds} ]; then |
| # if [ "${serial}" = false ] ; then |
| # echo "... processing $(cat ${cmds} | wc -l) commands, worker threads ${batch_size}" |
| # cat ${cmds} | tr '\n' '\0' | xargs -P ${batch_size} -n 1 -0 echo | openstack |
| # #cat ${cmds} | openstack |
| # truncate -s 0 ${cmds} |
| # else |
| # echo "... processing $(cat ${cmds} | wc -l) commands" |
| # cat ${cmds} | tr '\n' '\0' | xargs -P 1 -n 1 -0 echo | openstack |
| # truncate -s 0 ${cmds} |
| # fi |
| # fi |
| #} |
| # |
| #function _clean_and_flush_cinder { |
| # if [ "$dry_run" = true ] ; then |
| # return 0 |
| # fi |
| # if [ -s ${cmds} ]; then |
| # if [ "${serial}" = false ] ; then |
| # echo "... processing $(cat ${cmds} | wc -l) commands, worker threads ${batch_size}" |
| # cat ${cmds} | tr '\n' '\0' | xargs -I{} -P ${batch_size} -n 1 -0 /bin/bash -c 'cinder --os-volume-api-version 3.43 {}' |
| # #cat ${cmds} | cinder --os-volume-api-version 3.43 |
| # truncate -s 0 ${cmds} |
| # else |
| # echo "... processing $(cat ${cmds} | wc -l) commands" |
| # cat ${cmds} | tr '\n' '\0' | xargs -I{} -P 1 -n 1 -0 /bin/bash -c 'cinder --os-volume-api-version 3.43 {}' |
| # truncate -s 0 ${cmds} |
| # fi |
| # fi |
| #} |
| # |
| #### Users |
| #function _clean_users { |
| # users=( $(openstack user list -c ID -c Name -f value | grep ${mask} | grep -v ${exclude} | cut -d' ' -f1) ) |
| # echo "-> ${#users[@]} users containing '${mask}' found" |
| # printf "%s\n" ${users[@]} | xargs -I{} echo user delete {} >>${cmds} |
| # _clean_and_flush |
| #} |
| # |
| #### Roles |
| #function _clean_roles { |
| # roles=( $(openstack role list -c ID -c Name -f value | grep ${mask} | grep -v ${exclude} | cut -d' ' -f1) ) |
| # echo "-> ${#roles[@]} roles containing '${mask}' found" |
| # printf "%s\n" ${roles[@]} | xargs -I{} echo role delete {} >>${cmds} |
| # _clean_and_flush |
| #} |
| # |
| #### Projects |
| #function _clean_projects { |
| # projects=( $(openstack project list -c ID -c Name -f value | grep ${mask} | grep -v ${exclude} | cut -d' ' -f1) ) |
| # echo "-> ${#projects[@]} projects containing '${mask}' found" |
| # printf "%s\n" ${projects[@]} | xargs -I{} echo project delete {} >>${cmds} |
| # _clean_and_flush |
| #} |
| # |
| #### Servers |
| #function _clean_servers { |
| # servers=( $(openstack server list -c ID -c Name -f value --all | grep "${mask}" | grep -v ${exclude} | cut -d' ' -f1) ) |
| # echo "-> ${#servers[@]} servers containing '${mask}' found" |
| # if [ "$make_servers_active" = true ]; then |
| # printf "%s\n" ${servers[@]} | xargs -I{} echo server set --state active {} >>${cmds} |
| # fi |
| # printf "%s\n" ${servers[@]} | xargs -I{} echo server delete {} >>${cmds} |
| # _clean_and_flush |
| #} |
| # |
| #### Reset snapshot state and delete |
| #function _clean_snapshots { |
| # snapshots=( $(openstack volume snapshot list --all -c ID -c Name -f value | grep ${mask} | grep -v ${exclude} | cut -d' ' -f1) ) |
| # echo "-> ${#snapshots[@]} snapshots containing '${mask}' found" |
| # printf "%s\n" ${snapshots[@]} | xargs -I{} echo volume snapshot set --state available {} >>${cmds} |
| # printf "%s\n" ${snapshots[@]} | xargs -I{} echo volume snapshot delete {} >>${cmds} |
| # _clean_and_flush |
| #} |
| # |
| #function _clean_volumes { |
| # volumes=( $(openstack volume list --all -c ID -c Name -c Type -f value | grep ${mask} | grep -v ${exclude} | cut -d' ' -f1) ) |
| # echo "-> ${#volumes[@]} volumes containing '${mask}' found" |
| # printf "%s\n" ${volumes[@]} | xargs -I{} echo volume set --state available {} >>${cmds} |
| # printf "%s\n" ${volumes[@]} | xargs -I{} echo volume delete {} >>${cmds} |
| # _clean_and_flush |
| #} |
| # |
| #function _clean_volume_groups { |
| # groups=( $(cinder --os-volume-api-version 3.43 group-list --all-tenants 1 | grep ${mask} | grep -v ${exclude} | awk '{print $2}') ) |
| # echo "-> ${#groups[@]} groups containing '${mask}' found" |
| # printf "%s\n" ${groups[@]} | xargs -I{} echo group-delete {} >>${cmds} |
| # _clean_and_flush_cinder |
| #} |
| # |
| #function _clean_volume_group_types { |
| # group_types=( $(cinder --os-volume-api-version 3.43 group-type-list | grep ${mask} | grep -v ${exclude} | awk '{print $2}') ) |
| # echo "-> ${#group_types[@]} group types containing '${mask}' found" |
| # printf "%s\n" ${group_types[@]} | xargs -I{} echo group-type-delete {} >>${cmds} |
| # _clean_and_flush_cinder |
| #} |
| # |
| #### Volume types |
| #function _clean_volume_types { |
| # vtypes=( $(openstack volume type list -c ID -c Name -f value | grep ${mask} | grep -v ${exclude} | cut -d' ' -f1) ) |
| # echo "-> ${#vtypes[@]} volume types containing '${mask}' found" |
| # printf "%s\n" ${vtypes[@]} | xargs -I{} echo volume type delete {} >>${cmds} |
| # _clean_and_flush |
| #} |
| # |
| #### Images |
| #function _clean_images { |
| # images=( $(openstack image list -c ID -c Name -f value | grep ${mask} | grep -v ${exclude} | cut -d' ' -f1) ) |
| # echo "-> ${#images[@]} images containing '${mask}' found" |
| # printf "%s\n" ${images[@]} | xargs -I{} echo image delete {} >>${cmds} |
| # _clean_and_flush |
| #} |
| # |
| #### Sec groups |
| #function _clean_sec_groups { |
| # projects=( $(openstack project list -c ID -c Name -f value | grep ${mask} | grep -v ${exclude} | cut -d' ' -f1) ) |
| # sgroups=( $(printf "%s\n" ${projects[@]} | xargs -I{} /bin/bash -c "openstack security group list -c ID -c Project -f value | grep {} | cut -d' ' -f1") ) |
| # echo "-> ${#sgroups[@]} security groups for project containing '${mask}' found" |
| # printf "%s\n" ${sgroups[@]} | xargs -I{} echo security group delete {} >>${cmds} |
| # _clean_and_flush |
| # |
| # # Additional step to cleanup 'hanged' groups |
| # sgroups_raw=( $(openstack security group list -c ID -c Name -f value | grep ${mask} | grep -v ${exclude} | cut -d' ' -f1) ) |
| # echo "-> ${#sgroups_raw[@]} security groups for '${mask}' found" |
| # printf "%s\n" ${sgroups_raw[@]} | xargs -I{} echo security group delete {} >>${cmds} |
| # _clean_and_flush |
| #} |
| # |
| #### Keypairs |
| #function _clean_keypairs { |
| # keypairs=( $(openstack keypair list -c Name -f value | grep ${mask} | grep -v ${exclude}) ) |
| # echo "-> ${#keypairs[@]} keypairs containing '${mask}' found" |
| # printf "%s\n" ${keypairs[@]} | xargs -I{} echo keypair delete {} >>${cmds} |
| # _clean_and_flush |
| #} |
| # |
| #### Routers and Networks |
| #function _clean_routers_and_networks { |
| # routers=( $(openstack router list -c ID -c Name -f value | grep ${mask} | grep -v ${exclude} | cut -d ' ' -f1) ) |
| # if [ ${#routers[@]} -eq 0 ]; then |
| # echo "-> No routers containing '${mask}' found" |
| # else |
| # echo "-> ${#routers[@]} routers containing '${mask}' found" |
| # echo "... unsetting gateways" |
| # printf "%s\n" ${routers[@]} | xargs -I{} echo router unset --external-gateway {} >>${cmds} |
| # _clean_and_flush |
| # |
| # echo "... removing ports" |
| # for router in ${routers[@]}; do |
| # r_ports=( $(openstack port list --router ${router} -f value -c ID) ) |
| # if [ ${#r_ports[@]} -eq 0 ]; then |
| # echo "... no ports to unplug for ${router}" |
| # else |
| # for r_port in ${r_ports[@]}; do |
| # echo "... queued removal of port '${r_port}' from router '${router}'" |
| # echo "router remove port ${router} ${r_port}" >>${cmds} |
| # done |
| # fi |
| # done |
| # _clean_and_flush |
| # |
| # echo "... deleting routers" |
| # printf "%s\n" ${routers[@]} | xargs -I{} echo router delete {} >>${cmds} |
| # _clean_and_flush |
| # fi |
| # |
| # networks=( $(openstack network list | grep "${mask}" | grep -v ${exclude} | cut -d' ' -f2) ) |
| # if [ ${#networks[@]} -eq 0 ]; then |
| # echo "-> No networks containing '${mask}' found" |
| # else |
| # ports=() |
| # subnets=() |
| # for((idx=0;idx<${#networks[@]};idx++)) do |
| # ports+=( $(openstack port list --network ${networks[idx]} -c ID -f value) ) |
| # subnets+=( $(openstack subnet list --network ${networks[idx]} -c ID -f value) ) |
| # echo "-> $((${idx}+1)) of ${#networks[@]}, total ${#ports[@]} ports, ${#subnets[@]} subnets" |
| # done |
| # printf "%s\n" ${ports[@]} | xargs -I{} echo port delete {} >>${cmds} |
| # printf "%s\n" ${subnets[@]} | xargs -I{} echo subnet delete {} >>${cmds} |
| # echo network delete ${networks[@]} >>${cmds} |
| # echo "-> ${#routers[@]} routers, ${#ports[@]} ports, ${#subnets[@]} subnets, ${#networks[@]} networks" |
| # fi |
| # _clean_and_flush |
| #} |
| # |
| #### Regions |
| #function _clean_regions { |
| # regions=( $(openstack region list -c Region -f value | grep ${mask} | grep -v ${exclude}) ) |
| # echo "-> ${#regions[@]} regions containing '${mask}' found" |
| # printf "%s\n" ${regions[@]} | xargs -I{} echo region delete {} >>${cmds} |
| # _clean_and_flush |
| #} |
| # |
| #### Services |
| #function _clean_services { |
| # services=( $(openstack service list -c Name -f value | grep ${mask} | grep -v ${exclude}) ) |
| # echo "-> ${#services[@]} services containing '${mask}' found" |
| # printf "%s\n" ${services[@]} | xargs -I{} echo service delete {} >>${cmds} |
| # _clean_and_flush |
| #} |
| # |
| #### Stacks |
| #function _clean_stacks { |
| # # By default openstack denies use of global_index for everyone. |
| # # In case you want to have handy cleanup, consider updating policy.json here: |
| # # root@ctl0x:~# cat -n /etc/heat/policy.json | grep global_index |
| # # 48 "stacks:global_index": "rule:deny_everybody", |
| # # 73 "software_configs:global_index": "rule:deny_everybody", |
| # # After this you will be able to use --all option |
| # |
| # stacks=( $(openstack stack list --nested --hidden -c ID -c "Stack Name" -f value | grep ${mask} | grep -v ${exclude} | cut -d' ' -f1) ) |
| # echo "-> ${#stacks[@]} stacks containing '${mask}' found" |
| # printf "%s\n" ${stacks[@]} | xargs -I{} echo stack check {} >>${cmds} |
| # printf "%s\n" ${stacks[@]} | xargs -I{} echo stack delete -y {} >>${cmds} |
| # _clean_and_flush |
| # |
| # if [ "$stack_alt" = true ]; then |
| # stacks=( $(openstack stack list --nested --hidden -c ID -c "Stack Name" -f value | grep -E ${stack_regex} | cut -d' ' -f1) ) |
| # echo "-> ${#stacks[@]} stacks containing '${stack_regex}' found" |
| # printf "%s\n" ${stacks[@]} | xargs -I{} echo stack check {} >>${cmds} |
| # printf "%s\n" ${stacks[@]} | xargs -I{} echo stack delete -y {} >>${cmds} |
| # _clean_and_flush |
| # fi |
| # |
| # if [ "$purge_deleted_stacks" = true ]; then |
| # heat-manage purge_deleted -g ${stack_granularity} -b ${batch_size} ${stack_granularity_value} | wc -l | xargs -I{} echo "-> Purged {} stacks" |
| # fi |
| #} |
| # |
| #### Containers |
| #function _clean_containers { |
| # containers=( $(openstack container list --all -c ID -c Name -f value | grep ${mask} | grep -v ${exclude} | cut -d' ' -f1) ) |
| # echo "-> ${#containers[@]} containers containing '${mask}' found" |
| # printf "%s\n" ${containers[@]} | xargs -I{} echo container delete {} >>${cmds} |
| # _clean_and_flush |
| #} |
| # |
| #function _clean_flavors { |
| # flavors=( $(openstack flavor list --all -c ID -c Name -f value | grep ${mask} | grep -v ${exclude} | cut -d' ' -f1) ) |
| # echo "-> ${#flavors[@]} flavors containing '${mask}' found" |
| # printf "%s\n" ${flavors[@]} | xargs -I{} echo flavor delete {} >>${cmds} |
| # _clean_and_flush |
| #} |
| # |
| #################### |
| #### Main |
| #################### |
| ## temp file for commands |
| #cmds=$(mktemp) |
| #trap "rm -f ${cmds}" EXIT |
| #echo "Using tempfile: '${cmds}'" |
| # |
| ## Consider cleaning contrail resources carefully |
| ## ...and only after that - clean projects |
| # |
| #_clean_stacks |
| #_clean_servers |
| #_clean_flavors |
| #_clean_users |
| #_clean_roles |
| #_clean_snapshots |
| #_clean_volumes |
| #_clean_volume_groups |
| #_clean_volume_group_types |
| #_clean_volume_types |
| #_clean_images |
| #_clean_sec_groups |
| #_clean_keypairs |
| #_clean_routers_and_networks |
| #_clean_regions |
| #_clean_services |
| #_clean_containers |
| # |
| ## project cleaning disabled by default |
| ## Coz cleaning Contrail with no projects is a hard task |
| #if [ "$clean_projects" = true ]; then |
| # _clean_projects |
| #fi |
| # |
| ## remove temp file |
| #rm ${cmds} |