Update vmcreate.sh
This commit is contained in:
34
vmcreate.sh
34
vmcreate.sh
@@ -9,6 +9,7 @@ storage="syno-tigra"
|
|||||||
path="/mnt/pve/$storage/snippets/"
|
path="/mnt/pve/$storage/snippets/"
|
||||||
node=3
|
node=3
|
||||||
size=50
|
size=50
|
||||||
|
remove=false
|
||||||
|
|
||||||
harule=""
|
harule=""
|
||||||
pubkey=""
|
pubkey=""
|
||||||
@@ -31,6 +32,7 @@ show_help () {
|
|||||||
echo "-n - specify target node NUMBER to migrate VM to after creating. Default is '3'"
|
echo "-n - specify target node NUMBER to migrate VM to after creating. Default is '3'"
|
||||||
echo "-t - add additional proxmox tag. Default is only pve node number."
|
echo "-t - add additional proxmox tag. Default is only pve node number."
|
||||||
echo "-f - get IP addresses and Hostnames from 'flilename'."
|
echo "-f - get IP addresses and Hostnames from 'flilename'."
|
||||||
|
echo "-R - REMOVE specified VMs, snippets and HA rule (if specified). Be careful! It's a production cluster!"
|
||||||
echo
|
echo
|
||||||
echo "If file not specified, script will use arguments as a list of IP addresses."
|
echo "If file not specified, script will use arguments as a list of IP addresses."
|
||||||
echo "In this case Hostname will be inherited from 2 last IP octets. Example for 10.10.35.20: 'vm035020'."
|
echo "In this case Hostname will be inherited from 2 last IP octets. Example for 10.10.35.20: 'vm035020'."
|
||||||
@@ -108,8 +110,21 @@ mksnippet () {
|
|||||||
echo "Snippet $snippet created"
|
echo "Snippet $snippet created"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
REMOVE () {
|
||||||
|
if [ $harule ]; then ha-manager rules remove $harule; fi
|
||||||
|
for line in (cat hosts.tmp)
|
||||||
|
do
|
||||||
|
ip=$(echo -n "$line" | cut -d ';')
|
||||||
|
vmid=$(get_vmid "$ip")
|
||||||
|
snippet="${path}${vmid}_user.yaml"
|
||||||
|
qm stop $vmid
|
||||||
|
if [ $harule ]; then ha-manager remove vm:${vmid}; fi
|
||||||
|
qm destroy $vmid --destroy-unreferenced-disks --purge
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
# Обрабатываем опции
|
# Обрабатываем опции
|
||||||
while getopts "a:f:hk:u:p:d:n:t:" opt; do
|
while getopts "a:f:hk:u:p:d:n:t:R" opt; do
|
||||||
case $opt in
|
case $opt in
|
||||||
a) harule=${OPTARG};;
|
a) harule=${OPTARG};;
|
||||||
f) file=${OPTARG};;
|
f) file=${OPTARG};;
|
||||||
@@ -120,6 +135,7 @@ while getopts "a:f:hk:u:p:d:n:t:" opt; do
|
|||||||
d) size=${OPTARG};;
|
d) size=${OPTARG};;
|
||||||
n) node=${OPTARG};;
|
n) node=${OPTARG};;
|
||||||
t) tag=${OPTARG};;
|
t) tag=${OPTARG};;
|
||||||
|
R) remove=true;;
|
||||||
\?) echo "Invalid option."; show_help; exit 1;;
|
\?) echo "Invalid option."; show_help; exit 1;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -154,7 +170,7 @@ if ! [[ $size -ge 10 && $size -le 500 ]]; then echo "Disk size increment shoud b
|
|||||||
|
|
||||||
# Создаём hosts.tmp из аргументов/файла, попутно проверяя данные
|
# Создаём hosts.tmp из аргументов/файла, попутно проверяя данные
|
||||||
# Если заданы И аргументы, И файл - сразу нахуй
|
# Если заданы И аргументы, И файл - сразу нахуй
|
||||||
if [[ $# -ne 0 && $use_file ]]; then
|
if [[ $# -ne 0 && $file ]]; then
|
||||||
echo "Please use EITHER file OR arguments. Use '-h' flag for help"
|
echo "Please use EITHER file OR arguments. Use '-h' flag for help"
|
||||||
exit 3
|
exit 3
|
||||||
else
|
else
|
||||||
@@ -210,6 +226,18 @@ else
|
|||||||
fi
|
fi
|
||||||
# Закончили с вводными данными
|
# Закончили с вводными данными
|
||||||
|
|
||||||
|
#Самое время УДАЛИТЬ, если задан флаг
|
||||||
|
if $remove; then
|
||||||
|
input=n
|
||||||
|
read -p "Script is ready to REMOVE $(cat hosts.tmp | wc -l) VMs. ARE YOU SURE???" input
|
||||||
|
read -p "REALLY??? Enter to continue or Ctrl+C to abort"
|
||||||
|
case $input in
|
||||||
|
y) REMOVE; echo "Specified VMs REMOVED."; exit 0;;
|
||||||
|
Y) REMOVE; echo "Specified VMs REMOVED."; exit 0;;
|
||||||
|
*) echo "Aborting..."; exit 1;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
# Проверяем ключ
|
# Проверяем ключ
|
||||||
if [ $pubkey ]; then
|
if [ $pubkey ]; then
|
||||||
if [[ ! -f "$pubkey" ]]; then
|
if [[ ! -f "$pubkey" ]]; then
|
||||||
@@ -237,7 +265,7 @@ for line in $(cat hosts.tmp)
|
|||||||
do
|
do
|
||||||
ip=$(echo -n "$line" | cut -d ';' -f 1)
|
ip=$(echo -n "$line" | cut -d ';' -f 1)
|
||||||
vmid=$(get_vmid "$ip")
|
vmid=$(get_vmid "$ip")
|
||||||
snippet=
|
snippet="${path}${vmid}_user.yaml"
|
||||||
if qm status "$vmid" &>/dev/null; then
|
if qm status "$vmid" &>/dev/null; then
|
||||||
echo "VM $vmid exists. Aborting"
|
echo "VM $vmid exists. Aborting"
|
||||||
exit 7
|
exit 7
|
||||||
|
|||||||
Reference in New Issue
Block a user