diff --git a/vultr-cli.sh b/vultr-cli.sh new file mode 100644 index 0000000..39ad63c --- /dev/null +++ b/vultr-cli.sh @@ -0,0 +1,432 @@ +#!/bin/bash +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color +ln -sf ~/sh.sh /usr/local/bin/t +# 检查是否安装了 wget 工具,如果没有则安装 +check_wget() { + if ! command -v wget &> /dev/null; then + echo "wget is not installed. Installing..." + sudo apt update + sudo apt install -y wget + fi +} +# 安装 Vultr CLI 的函数 +install_vultr_cli() { + # 检查是否已安装 Vultr CLI + clear + if command -v vultr-cli &> /dev/null; then + echo "Vultr CLI 已安装" + return + fi + check_wget + # 指定要安装的 Vultr CLI 版本 + local VULTR_CLI_VERSION="v3.0.1" + local DOWNLOAD_URL="https://github.com/vultr/vultr-cli/releases/download/${VULTR_CLI_VERSION}/vultr-cli_${VULTR_CLI_VERSION}_linux_amd64.tar.gz" + + # 下载 Vultr CLI + wget $DOWNLOAD_URL + # 解压文件 + tar -zxvf vultr-cli_${VULTR_CLI_VERSION}_linux_amd64.tar.gz + # 移动二进制文件到 PATH 可访问的位置 + sudo mv vultr-cli /usr/local/bin/ + # 设置执行权限 + sudo chmod +x /usr/local/bin/vultr-cli + # 清理下载的压缩文件 + rm vultr-cli_${VULTR_CLI_VERSION}_linux_amd64.tar.gz + + # 验证安装成功 + echo "Vultr CLI 安装成功!" +} +input_vultr_token(){ + # 获取用户的 Vultr API 令牌 + #read -p "请输入你的 Vultr Token : " VULTR_API_KEY + read -p $'\e[1;33m请输入你的 Vultr Token : \e[0m' VULTR_API_KEY + export VULTR_API_KEY=$VULTR_API_KEY + echo 'export VULTR_API_KEY='"$VULTR_API_KEY" >> ~/.bashrc + source ~/.bashrc +} +validate_vultr_token(){ + # 获取 Vultr 账户信息 + # 如果 API 令牌无效或 IP 地址未授权,则提示用户重新输入 + if [[ $(vultr-cli account) == *"Unauthorized IP address"* ]]; then + #echo "请在网页端放行该IP地址,之后重新运行脚本。" + echo $'\e[1;33m请在网页端放行该IP地址,之后重新运行脚本。\e[0m' + exit 1 + elif [[ $(vultr-cli account) == *"Invalid API token"* ]]; then + #echo "请仔细核对token是否正确,之后重新运行脚本。" + echo $'\e[1;33m请仔细核对token是否正确,之后重新运行脚本。\e[0m' + exit 1 + else + # 显示账户信息 + clear + #vultr-cli account | awk 'BEGIN {print "账户信息:"} NR==2 {printf("余额: %.2f\n待支付: %.2f\n", $1, $2)}' + #vultr-cli account | awk 'BEGIN {print "\e[1;33m账户信息:\e[0m"} NR==2 {printf("余额: %.2f\n待支付: %.2f\n", $1, $2)}' + echo -e "\e[1;33mvultr账户信息:\e[0m" + vultr-cli account | awk 'NR==2 {printf("账户余额: %.2f\n本月已消费: %.2f\n", $1, $2)}' + return 0 + fi +} +# 添加实例 +add_instance() { + clear + read -p $'\e[1;35m输入实例名称: \e[0m' label + # 显示地区选择菜单 +#echo "请选择国家或地区" +echo -e "${GREEN}-----------------------选择国家或地区-----------------------${NC}" +echo -e "" +echo -e "\e[1;33m亚洲地区:\e[0m" +echo "1. 新加坡新加坡 (sgp) 5. 印度德里 (del)" +echo "2. 日本东京 (nrt) 6. 印度孟买 (bom)" +echo "3. 日本大阪 (itm) 7. 韩国首尔 (icn)" +echo "4. 印度班加罗尔 (blr) 8. 以色列特拉维夫 (tlv)" + +echo -e "\e[1;33m美洲地区:\e[0m" +echo "9. 美国迈阿密 (mia) 16. 美国硅谷 (sjc)" +echo "10. 美国亚特兰大 (atl) 17. 美国新泽西州 (ewr)" +echo "11. 美国芝加哥 (ord) 18. 加拿大多伦多 (yto)" +echo "12. 美国达拉斯 (dfw) 19. 智利圣地亚哥 (scl)" +echo "13. 美国洛杉矶 (lax) 20. 巴西圣保罗 (sao)" +echo "14. 美国西雅图 (sea) 21. 墨西哥墨西哥城 (mex)" +echo "15. 美国(夏威夷)檀香山 (hnl)" + +echo -e "\e[1;33m欧洲地区:\e[0m" +echo "22. 荷兰阿姆斯特丹 (ams) 26. 西班牙马德里 (mad)" +echo "23. 法国巴黎 (cdg) 27. 英国曼彻斯特 (man)" +echo "24. 德国法兰克福 (fra) 28. 波兰华沙 (waw)" +echo "25. 英国伦敦 (lhr) 29. 瑞典斯德哥尔摩 (sto)" + +echo -e "\e[1;33m澳洲地区:\e[0m" +echo "30. 澳大利亚墨尔本 (mel)" +echo "31. 澳大利亚悉尼 (syd)" +echo -e "\e[1;33m非洲地区:\e[0m" +echo "32. 南非约翰内斯堡 (jnb)" | pr -t -2 +echo -e "" +echo -e "${GREEN}----------------------------------------------------------${NC}" + + echo -e "\e[1;35m输入对应的数字选择国家和地区:\e[0m" + read -r region_choice + clear + # 根据用户的选择设置相应的地区代码 + case $region_choice in + 1) region="sgp";; + 2) region="nrt";; + 3) region="itm";; + 4) region="blr";; + 5) region="del";; + 6) region="bom";; + 7) region="icn";; + 8) region="tlv";; + 9) region="mia";; + 10) region="atl";; + 11) region="ord";; + 12) region="dfw";; + 13) region="lax";; + 14) region="sea";; + 15) region="hnl";; + 16) region="sjc";; + 17) region="ewr";; + 18) region="yto";; + 19) region="scl";; + 20) region="sao";; + 21) region="mex";; + 22) region="ams";; + 23) region="cdg";; + 24) region="fra";; + 25) region="lhr";; + 26) region="mad";; + 27) region="man";; + 28) region="waw";; + 29) region="sto";; + 30) region="mel";; + 31) region="syd";; + 32) region="jnb";; + + *) echo "无效的选择"; return;; + esac + + # 显示系统选择菜单 + #echo "请选择系统: " + #echo -e "\e[1;33m请选择系统编号:\e[0m" + echo -e "${GREEN}----------------------选择系统----------------------${NC}" + echo -e "" + echo "1. Debian 12 x64 (bookworm)" + echo "2. Debian 11 x64 (bullseye)" + echo "3. Debian 10 x64 (buster)" + echo "4. Ubuntu 23.10 x64" + echo "5. Ubuntu 22.04 LTS x64" + echo "6. Ubuntu 20.04 LTS x64" + echo "7. CentOS 7 x64" + echo "8. CentOS 7 SELinux x64" + echo "9. Fedora CoreOS Stable" + echo "10. CentOS 8 Stream x64" + echo "11. Arch Linux x64" + echo "12. Alpine Linux x64" + echo -e "" + echo -e "${GREEN}-------------------------------------------------------${NC}" + #echo "请输入选择编号: " + echo -e "\e[1;33m请输入系统编号: \e[0m" + read -r os_choice + clear + # 根据用户的选择设置相应的操作系统代码 + case $os_choice in + 1) os=2136;; + 2) os=477;; + 3) os=352;; + 4) os=2179;; + 5) os=1743;; + 6) os=387;; + 7) os=167;; + 8) os=381;; + 9) os=391;; + 10) os=401;; + 11) os=535;; + 12) os=2076;; + *) echo "无效的选择"; return;; + esac + + # 显示系统配置选择菜单 + #echo "请选择系统配置: " + #echo -e "\e[1;33m请选择机型配置: \e[0m" + #echo -e "\e[1;33m请选择系统编号:\e[0m" + echo -e "${GREEN}---------------------选择机型配置---------------------${NC}" + echo -e "" + echo "1. 1核-1G-25G磁盘-1T流量 (vc2-1c-1gb)" + echo "2. 1核-2G-55G磁盘-2T流量 (vc2-1c-2gb)" + echo "3. 2核-2G-65G磁盘-3T流量 (vc2-2c-2gb)" + echo "4. 2核-4G-80G磁盘-3T流量 (vc2-2c-4gb)" + echo -e "" + echo -e "${GREEN}--------------------------------------------------------${NC}" + #cho "请输入选择编号: " + echo -e "\e[1;33m请输入选择编号: \e[0m" + read -r plan_choice + clear + # 根据用户的选择设置相应的系统配置代码 + case $plan_choice in + 1) plan="vc2-1c-1gb";; + 2) plan="vc2-1c-2gb";; + 3) plan="vc2-2c-2gb";; + 4) plan="vc2-2c-4gb";; + *) echo "无效的选择"; return;; + esac + # 执行vultr-cli ssh-key list命令并将输出保存到变量result中 + result=$(vultr-cli ssh-key list) + + # 使用awk命令提取ID字段,假设ID字段是第1列 + ssh_key_id=$(echo "$result" | awk 'NR==2 {print $1}') + + # 打印提取到的ID + #echo "$ssh_key_id" + # 创建实例 + output=$(vultr-cli instance create --region $region --plan $plan --os $os --ssh-keys $ssh_key_id --label "$label") + #echo "实例已成功创建!" + #echo -e "\e[1;33m实例已创建成功! \e[0m" + if echo "$output" | grep -q "INSTANCE INFO"; then + echo -e "\e[1;33m恭喜! 实例名称:$label已创建成功! \e[0m" + echo -e "" + else + echo "$output" +fi +} + + +# 列出当前实例 +list_instances() { + clear + echo -e "\e[1;33m当前运行的实例:\e[0m" + vultr-cli instance list + echo -e "" + echo -e "" +} + +# 删除指定的实例 +delete_instance() { + clear + list_instances + read -p $'\e[1;33m请输入你想要删除的实例ID(输入00取消删除操作): \e[0m' instance_id + if [ "$instance_id" = "00" ]; then + echo -e "\e[1;33m取消删除操作\e[0m" + show_menu + + else + vultr-cli instance delete "$instance_id" > /dev/null 2>&1 + echo -e "\e[1;33m该实例已成功删除\e[0m" + fi +} +add_instance_snapshot(){ + clear + echo -e "\e[1;33m当前账号存在的快照:\e[0m" + vultr-cli snapshot list + echo -e "" + echo -e "" + read -p $'\e[1;33m请输入你想要新建快照的实例ID(输入00取消删除操作): \e[0m' instance_id + if [ "$instance_id" = "00" ]; then + echo -e "\e[1;33m取消删除操作\e[0m" + show_menu + + else + clear + read -p $'\e[1;35m输入实例名称: \e[0m' label + # 显示地区选择菜单 +#echo "请选择国家或地区" +echo -e "${GREEN}-----------------------选择国家或地区-----------------------${NC}" +echo -e "" +echo -e "\e[1;33m亚洲地区:\e[0m" +echo "1. 新加坡新加坡 (sgp) 5. 印度德里 (del)" +echo "2. 日本东京 (nrt) 6. 印度孟买 (bom)" +echo "3. 日本大阪 (itm) 7. 韩国首尔 (icn)" +echo "4. 印度班加罗尔 (blr) 8. 以色列特拉维夫 (tlv)" + +echo -e "\e[1;33m美洲地区:\e[0m" +echo "9. 美国迈阿密 (mia) 16. 美国硅谷 (sjc)" +echo "10. 美国亚特兰大 (atl) 17. 美国新泽西州 (ewr)" +echo "11. 美国芝加哥 (ord) 18. 加拿大多伦多 (yto)" +echo "12. 美国达拉斯 (dfw) 19. 智利圣地亚哥 (scl)" +echo "13. 美国洛杉矶 (lax) 20. 巴西圣保罗 (sao)" +echo "14. 美国西雅图 (sea) 21. 墨西哥墨西哥城 (mex)" +echo "15. 美国(夏威夷)檀香山 (hnl)" + +echo -e "\e[1;33m欧洲地区:\e[0m" +echo "22. 荷兰阿姆斯特丹 (ams) 26. 西班牙马德里 (mad)" +echo "23. 法国巴黎 (cdg) 27. 英国曼彻斯特 (man)" +echo "24. 德国法兰克福 (fra) 28. 波兰华沙 (waw)" +echo "25. 英国伦敦 (lhr) 29. 瑞典斯德哥尔摩 (sto)" + +echo -e "\e[1;33m澳洲地区:\e[0m" +echo "30. 澳大利亚墨尔本 (mel)" +echo "31. 澳大利亚悉尼 (syd)" +echo -e "\e[1;33m非洲地区:\e[0m" +echo "32. 南非约翰内斯堡 (jnb)" | pr -t -2 +echo -e "" +echo -e "${GREEN}----------------------------------------------------------${NC}" + + echo -e "\e[1;35m输入对应的数字选择国家和地区:\e[0m" + read -r region_choice + clear + # 根据用户的选择设置相应的地区代码 + case $region_choice in + 1) region="sgp";; + 2) region="nrt";; + 3) region="itm";; + 4) region="blr";; + 5) region="del";; + 6) region="bom";; + 7) region="icn";; + 8) region="tlv";; + 9) region="mia";; + 10) region="atl";; + 11) region="ord";; + 12) region="dfw";; + 13) region="lax";; + 14) region="sea";; + 15) region="hnl";; + 16) region="sjc";; + 17) region="ewr";; + 18) region="yto";; + 19) region="scl";; + 20) region="sao";; + 21) region="mex";; + 22) region="ams";; + 23) region="cdg";; + 24) region="fra";; + 25) region="lhr";; + 26) region="mad";; + 27) region="man";; + 28) region="waw";; + 29) region="sto";; + 30) region="mel";; + 31) region="syd";; + 32) region="jnb";; + + *) echo "无效的选择"; return;; + esac + + + # 显示系统配置选择菜单 + #echo "请选择系统配置: " + #echo -e "\e[1;33m请选择机型配置: \e[0m" + #echo -e "\e[1;33m请选择系统编号:\e[0m" + echo -e "${GREEN}---------------------选择机型配置---------------------${NC}" + echo -e "" + echo "1. 1核-1G-25G磁盘-1T流量 (vc2-1c-1gb)" + echo "2. 1核-2G-55G磁盘-2T流量 (vc2-1c-2gb)" + echo "3. 2核-2G-65G磁盘-3T流量 (vc2-2c-2gb)" + echo "4. 2核-4G-80G磁盘-3T流量 (vc2-2c-4gb)" + echo -e "" + echo -e "${GREEN}--------------------------------------------------------${NC}" + #cho "请输入选择编号: " + echo -e "\e[1;33m请输入选择编号: \e[0m" + read -r plan_choice + clear + # 根据用户的选择设置相应的系统配置代码 + case $plan_choice in + 1) plan="vc2-1c-1gb";; + 2) plan="vc2-1c-2gb";; + 3) plan="vc2-2c-2gb";; + 4) plan="vc2-2c-4gb";; + *) echo "无效的选择"; return;; + esac + vultr-cli instance create --snapshot $instance_id --plan $plan --region $region --label "$label" + #echo $instance_id + #echo $plan + #echo $region + #echo $label + echo -e "\e[1;33m恭喜! 快照实例名称:$label已创建成功! \e[0m" + fi +} + +# 提供操作选择 +show_menu() { + while true; do + echo -e "${GREEN}============vultr 管理脚本 ============ ${NC}" + echo -e "${GREEN}--------------------------------------------${NC}" + echo -e "" + echo "1. 新建实例" + echo "2. 列出实例" + echo "3. 删除实例" + echo "4. 使用快照新建实例" + echo "0. 退出脚本" + echo "00. 返回主菜单脚本" + echo -e "" + echo -e "${GREEN}--------------------------------------------${NC}" + echo -e "" + #read -p "请输入你的选择: " choice + read -p $'\e[1;33m请输入你的选择: \e[0m' choice + + case $choice in + 1) + add_instance + ;; + 2) + list_instances + ;; + 3) + delete_instance + ;; + 4) + add_instance_snapshot + ;; + 0) + exit 0 + ;; + 00) + bash install_script.sh + ;; + *) + clear + echo -e "\e[1;33m无效选择,请重新输入。\e[0m" + show_menu + break + ;; + esac + done +} +# 安装或检查是否安装 Vultr CLI +install_vultr_cli +# 输入 token +input_vultr_token +# 验证 Vultr API 令牌 +source ~/.bashrc +validate_vultr_token +# 显示管理菜单 +show_menu