批量刪除OpenStack實例

在Linux終端實現批量刪除OpenStack實例,支持并發刪除、安全確認、重試機制、優先清理運行中實例

#!/bin/bash
# ======================================================================
# 增強版 OpenStack 刪除實例腳本
# 功能:支持并發刪除、安全確認、重試機制、優先清理運行中實例
# 更新:2025年4月30日
# ======================================================================#######################################
# 配置區(用戶可自定義參數)
#######################################
delete_InstanceMAX_RETRY=20     # 最大嘗試次數(刪除失敗時嘗試再次刪除實例)
CHECK_INTERVAL=5                # 實例狀態檢測間隔(單位:秒)
no_InstanceMAX_RETRY_TIME=20    # 實例列表為空,連續監測實例列表都是空的次數
CONCURRENCY=2                   # 并發刪除線程數(建議不超過 API 限制)
MAX_WAIT_TIME=3600              # 最大等待超時時間(單位:秒,60 分鐘)LOG_FILE="./log_instance_delete_$(date +%Y%m%d).log" # 日志文件路徑(自動按日期生成)# 統計變量
TOTAL_DELETED_INSTANCES=0        # 已刪除實例總數統計
DELETED_INSTANCES_FILE="/tmp/deleted_instances.txt" # 已刪除實例ID臨時記錄文件# 顏色定義(終端輸出美化)
RED='\033[0;31m'    # 紅色 - 錯誤/危險操作
GREEN='\033[0;32m'  # 綠色 - 成功/正常狀態
YELLOW='\033[0;33m' # 黃色 - 警告/等待狀態
BLUE='\033[0;34m'   # 藍色 - 執行中/進度信息
NC='\033[0m'        # 無顏色 - 重置終端顏色#######################################
# 函數:帶重試機制的實例刪除
# 參數:
#   $1 : 實例ID(必填)
# 返回值:
#   0 - 刪除成功 | 1 - 刪除失敗
# 描述:
#   使用指數退避策略重試刪除,最多嘗試 delete_InstanceMAX_RETRY 次刪除實例
#######################################
retry_delete() {local instance_id=$1for ((i=1; i<=delete_InstanceMAX_RETRY; i++)); dolog "${BLUE}嘗試刪除實例 [ID: $instance_id] (第 $i 次嘗試)...${NC}"if nova force-delete "$instance_id"; thenlog "${GREEN}刪除實例成功: $instance_id${NC}"echo "$instance_id" >> "$DELETED_INSTANCES_FILE"return 0fisleep $((i*2)) # 指數退避等待donelog "${RED}錯誤:刪除實例 $instance_id 失敗,已達最大重試次數(${delete_InstanceMAX_RETRY} 次)${NC}"return 1
}#######################################
# 函數:安全獲取實例列表
# 參數:
#   $1 : 實例狀態(默認 ACTIVE)
# 返回值:
#   實例ID列表(格式:每行一個ID)
# 描述:
#   過濾無效字符并格式化輸出,避免臟數據干擾
#######################################
safe_get_instances() {local status=${1:-"ACTIVE"}nova list --status $status | awk -F '|' '/[0-9a-f]{8}-/ {gsub(/ /, "", $2);if ($4 ~ status) print $2}' status="$status"
}#######################################
# 函數:日志記錄
# 參數:
#   $1 : 日志信息(支持顏色代碼)
# 描述:
#   自動添加時間戳,并同時輸出到終端和日志文件
#######################################
log() {local msg="$1"echo -e "$(date '+%Y-%m-%d %T') - $msg" | tee -a "$LOG_FILE"
}# 導出函數到子 Shell(確保并發調用時可用)
export -f log retry_delete#######################################
# 主流程
######################################## 解析命令行參數
while getopts "s:i:c:l:" opt; docase $opt ins) STATUS=$OPTARG;;    # 指定目標實例狀態(如 ACTIVE/BUILD)i) CHECK_INTERVAL=$OPTARG;;  # 自定義檢測間隔時間c) CONCURRENCY=$OPTARG;;     # 調整并發線程數l) LOG_FILE=$OPTARG;;        # 指定日志文件路徑*) echo -e "${RED}用法: $0 [-s 狀態] [-i 間隔] [-c 并發數] [-l 日志路徑]${NC}"exit 1;;esac
done# 初始化 OpenStack 環境
source /openstack/admin-openrc.sh || { log "${RED}錯誤:環境變量加載失敗,請檢查 admin-openrc.sh 文件權限或路徑${NC}"exit 1
}# 檢查日志目錄可寫性
if [ ! -w "$(dirname "$LOG_FILE")" ]; thenecho -e "${RED}錯誤:日志目錄不可寫 [路徑: $(dirname "$LOG_FILE")]${NC}" >&2exit 1
fi# 初始化臨時文件(記錄已刪除實例)
> "$DELETED_INSTANCES_FILE"# 進程鎖檢查(防止重復運行)
LOCK_FILE="/tmp/os_clean.lock"
if [ -e "$LOCK_FILE" ]; thenlog "${YELLOW}警告:檢測到已有清理進程運行中 [PID: $(cat $LOCK_FILE)]${NC}"exit 1
fi
echo $$ > "$LOCK_FILE"
trap 'rm -f "$LOCK_FILE"; TOTAL_DELETED_INSTANCES=$(wc -l < "$DELETED_INSTANCES_FILE"); log "${GREEN}===== 腳本進程中斷退出,已刪除實例數: $TOTAL_DELETED_INSTANCES ====="; rm -f "$DELETED_INSTANCES_FILE"' EXIT# 安全確認(確保轉義符被解析)
if [[ -t 0 ]]; thenread -p "$(printf "${YELLOW}危險操作:是否確認執行刪除實例?(y/N): ${NC}")" -n 1 confirm[[ $confirm != "y" ]] && { log "操作已取消"; exit; }echo
fi# 主循環(狀態檢測與刪除)
log "\n${GREEN}===== 開始刪除實例 [時間: $(date +%T)] ====="
start_time=$(date +%s)
empty_count=0  # 連續空檢測計數器while :; do# 超時檢查(防止無限等待)if (( $(date +%s) - start_time > MAX_WAIT_TIME )); thenlog "${RED}錯誤:操作超時,已超過最大等待時間(${MAX_WAIT_TIME} 秒)${NC}"exit 1fi# 獲取目標實例列表instances=$(safe_get_instances "${STATUS:-ACTIVE}")creating_instances=$(safe_get_instances "BUILD")# 優先刪除運行中的實例if [ -n "$instances" ]; thenlog "檢測到 ${#instances[@]} 個運行中實例,啟動并發刪除..."printf "%s\n" "${instances[@]}" | xargs -P $CONCURRENCY -I {} bash -c "delete_InstanceMAX_RETRY='$delete_InstanceMAX_RETRY'LOG_FILE='$LOG_FILE'DELETED_INSTANCES_FILE='$DELETED_INSTANCES_FILE'$(declare -f log retry_delete)retry_delete \"{}\""sleep $((CHECK_INTERVAL/2))  # 降低 API 請求頻率continuefi# 處理創建中的實例(等待后重試)if [ -n "$creating_instances" ]; thenlog "${YELLOW}提示:檢測到 ${#creating_instances[@]} 個創建中實例,等待 ${CHECK_INTERVAL}...${NC}"sleep $CHECK_INTERVALcontinuefi# 空狀態處理(連續檢測退出機制)if [ -z "$instances" ]; thenlog "${YELLOW}提示:未發現可操作實例,等待 ${CHECK_INTERVAL} 秒后重試,至多重試${no_InstanceMAX_RETRY_TIME}...${NC}"sleep $CHECK_INTERVAL# 連續${no_InstanceMAX_RETRY_TIME} 次空檢測則退出if (( empty_count++ >= ${no_InstanceMAX_RETRY_TIME} )); thenTOTAL_DELETED_INSTANCES=$(wc -l < "$DELETED_INSTANCES_FILE")log "${GREEN}===== 腳本運行清理完成,已刪除實例總數: ${TOTAL_DELETED_INSTANCES} ====="exit 0ficontinuefiempty_count=0  # 重置空檢測計數器
done

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903600.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903600.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903600.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

# 基于 Python 和 jieba 的中文文本自動摘要工具

基于 Python 和 jieba 的中文文本自動摘要工具 在信息爆炸的時代&#xff0c;快速準確地提取文本核心內容變得至關重要。今天&#xff0c;我將介紹一個基于 Python 和 jieba 的中文文本自動摘要工具&#xff0c;幫助你高效地從長文本中提取關鍵信息。 一、背景與需求 在處理…

Seaborn數據可視化庫

一、Seaborn介紹&#xff1a;基于Matplotlib的Python數據可視化庫&#xff0c;專注繪制統計圖形&#xff0c;簡化可視化過程&#xff0c;提供高級接口和美觀默認主題。 二、安裝與導入 1.安裝&#xff1a;可使用pip install seaborn或conda install seaborn&#xff0c;也可使…

機器視覺2D碼垛和機器視覺3D碼垛的區別

機器視覺3D碼垛是一種結合3D視覺技術和工業機器人的自動化系統,主要用于在復雜環境中精準識別、定位并堆疊(碼垛)各種形狀、尺寸的物體。它通過3D傳感器(如激光雷達、結構光相機、雙目視覺等)獲取物體的三維空間信息,并結合算法規劃機器人的抓取路徑和碼放策略,實現高效…

Python魔法函數深度解析

一、魔法函數是什么&#xff1f; 魔法函數&#xff08;Magic Methods&#xff09;是Python中以雙下劃線&#xff08;__xx__&#xff09;包裹的特殊方法&#xff0c;它們為類提供了一種與Python內置語法深度集成的能力。這些方法由解釋器自動調用&#xff0c;無需顯式調用&…

C++負載均衡遠程調用學習之自定義內存池管理

目錄 1.內存管理_io_buf的結構分析 2.Lars_內存管理_io_buf內存塊的實現 3.buf總結 4.buf_pool連接池的單例模式設計和基本屬性 5.buf_pool的初始化構造內存池 6.buf_pool的申請內存和重置內存實現 7.課前回顧 1.內存管理_io_buf的結構分析 ## 3) Lars系統總體架構 ? …

流水線問題(算法設計)C++

目錄 一、需求分析 1.1 問題描述 1.2 數據需求 1.3 功能需求 1.4 開發環境 二、概要設計 2.1 抽象數據類型 ADT 的定義 2.2 系統的主要功能模塊 2.3 功能模塊聯系圖 三、詳細設計 3.1 數據結構設計 3.2 主要算法 四、系統運行及結果分析 1. 用戶界面 2. 程序運行…

從實列中學習linux shell4: shell 腳本中 $0 $1 $2 $3 >> 以及 awk 都是干啥的?

在 Linux Shell 腳本中&#xff0c;這些符號和工具的功能如下&#xff1a; 一、位置參數 $0 $1 $2 $3 符號功能說明示例$0腳本自身的文件名若執行 ./test.sh&#xff0c;則 $0 值為 ./test.sh$1第一個參數執行 ./test.sh apple 時&#xff0c;$1 值為 "apple"$2第二…

TM1668芯片學習心得三

一、鍵掃數據儲存地址如下所示&#xff0c;先發讀鍵命令后&#xff0c;開始讀取按鍵數據BYTE1-BYTE5字節&#xff0c;讀數據從低位開始輸出&#xff0c;其中B6和B7位為無效位&#xff0c;此時芯片輸出為0。芯片K和KS引腳對應的按鍵按下時&#xff0c;相對應的字節內的 BIT位為1…

MySQL 基本查詢(一)

文章目錄 Create(insert)指定列的單行插入和全列插入多行全列插入和指定列的多行插入如果主鍵存在&#xff0c;要插入替換存在的值replace 基本select全列查詢指定列查詢where子句where子句案例語文成績在 [80, 90] 分的同學及語文成績數學成績是 58 或者 59 或者 98 或者 99 分…

LeetCode路徑總和系列問題解析:I、II、III的解決方案與優化

文章目錄 引言一、路徑總和 I&#xff08;LeetCode 112&#xff09;問題描述方法思路Java代碼實現復雜度分析 二、路徑總和 II&#xff08;LeetCode 113&#xff09;問題描述方法思路Java代碼實現復雜度分析 三、路徑總和 III&#xff08;LeetCode 437&#xff09;問題描述方法…

NFC 碰一碰發視頻貼牌技術,音頻功能的開發實踐與技術解析

在數字化營銷與信息交互場景中&#xff0c;NFC 碰一碰技術憑借其便捷性和高效性&#xff0c;成為快速傳遞多媒體內容的新選擇。通過 NFC 實現視頻音頻的快速傳輸&#xff0c;不僅能提升用戶體驗&#xff0c;還能為各類場景帶來創新應用。本文將深入探討該功能開發過程中的關鍵技…

跨境電商生死劫:IP篩查三法則破解封號魔咒

一、血淚數據&#xff1a;90%封號案源于IP污染 跨境電商平臺風控系統持續升級&#xff0c;2023年亞馬遜全球封號案例中&#xff0c;67%涉及賬號關聯&#xff08;Marketplace Pulse數據&#xff09;&#xff0c;其中IP問題占比高達91%。更觸目驚心的是&#xff1a; 新號存活率&…

MIPS架構詳解:定義、應用與其他架構對比

一、MIPS架構的定義 MIPS&#xff08;Microprocessor without Interlocked Pipeline Stages&#xff09; 是一種經典的精簡指令集&#xff08;RISC&#xff09;處理器架構&#xff0c;由斯坦福大學John Hennessy團隊于1981年提出&#xff0c;強調高效流水線設計和硬件簡化。 核…

第十六屆藍橋杯 2025 C/C++組 脈沖強度之和

目錄 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; 思路&#xff1a; 思路詳解&#xff1a; 代碼&#xff1a; 代碼詳解&#xff1a; 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; P12338 [藍橋杯 2025 省 B/Python B 第二場] 脈沖強度…

從Ping到iperf3:深度實戰無線網絡壓測與優化指南

以下是測試無線網絡穩定性的詳細步驟與工具指南&#xff0c;涵蓋信號質量、吞吐量、干擾排查等關鍵維度&#xff1a; 一、基礎信號質量測試 1. 信號強度與覆蓋測試 工具&#xff1a;手機APP&#xff08;WiFi Analyzer、NetSpot&#xff09;或筆記本&#xff08;Acrylic WiFi&a…

MySQL 連接池 (Pool) 常用方法詳解

MySQL 連接池 (Pool) 常用方法詳解 1. 創建連接池 首先需要創建連接池實例&#xff1a; const mysql require(mysql2/promise); // 使用Promise版本const pool mysql.createPool({host: localhost,user: root,password: password,database: test,waitForConnections: true…

大型連鎖酒店集團數據湖應用示例

目錄 一、應用前面臨的嚴峻背景 二、數據湖的精細化構建過程 &#xff08;一&#xff09;全域數據整合規劃 &#xff08;二&#xff09;高效的數據攝取與存儲架構搭建 &#xff08;三&#xff09;完善的元數據管理體系建設 &#xff08;四&#xff09;強大的數據分析平臺…

GNU gettext 快速上手

文章目錄 1.簡介2.核心概念國際化 (i18n)本地化 (l10n)POT 文件PO 文件MO 文件文本域翻譯函數 3.主要組件4.使用示例參考文獻 1.簡介 GNU gettext 是一套用于軟件國際化&#xff08;internationalization&#xff0c;i18n&#xff09;和本地化&#xff08;localization&#x…

分享:VTK版本的選擇 - WPF空域問題

在早期版本中&#xff0c;ActiViz 對 Windows Presentation Foundation (WPF) 框架的支持是通過 WindowsFormHost 組件實現的&#xff0c;這種方式依賴于 WindowsForm 和 WPF 的互操作性。然而&#xff0c;這種方法存在一個眾所周知的“空域問題”&#xff08;airspace issue&a…

python數據分析(六):Pandas 多數據操作全面指南

Pandas 多數據操作全面指南&#xff1a;Merge, Join, Concatenate 與 Compare 1. 引言 在數據分析工作中&#xff0c;我們經常需要處理多個數據集并將它們以各種方式組合起來。Pandas 提供了多種強大的多數據操作方法&#xff0c;包括合并(merge)、連接(join)、連接(concaten…