diff --git a/vmcreate1.sh b/vmcreate1.sh index ba66951..4ed85c0 100644 --- a/vmcreate1.sh +++ b/vmcreate1.sh @@ -45,7 +45,10 @@ while getopts "a:f:h" opt; do # *) noopts=true esac done + +### Проверка допустимости опций if [[ size >= 10 && size <= 500 ]]; then echo "Disk size increment shoud be in range of 10..500. Aborting."; exit 1; fi + # Вывод переменных для дебага: if [[ -v file ]]; then echo "File: $file"; fi if [[ -v pubkey ]]; then echo "Public key: $pubkey"; fi @@ -62,11 +65,17 @@ if [[ $# -eq 0 && -v "$file" && ! -f "$file" ]]; then N) read -p "Enter file name: " file;; *) echo "Use '-f' flag for help"; exit 0;; esac - if [[ ! -f "$file" ]]; then echo "File `$file` does not exist. Exiting."; exit 1; fi + if [[ ! -f "$file" ]]; then + echo "File `$file` does not exist. Exiting." + exit 1 + fi fi # Если заданы аргументы И файл -if [[ $# -ne 0 && -v "$file" ]]; then echo "Please enter file OR arguments. Use '-f' flag for help"; exit 2; fi +if [[ $# -ne 0 && -v "$file" ]]; then + echo "Please enter file OR arguments. Use '-f' flag for help" + exit 2 +fi # Проверка файла на соответствие шаблону IPv4 адреса и hostname, создаём временный файл из валидных строк if [[ -e "$file" ]]; then @@ -77,15 +86,14 @@ if [[ -e "$file" ]]; then hostname=$(echo $line | cut -d ' ' -f 2) if [[ $? -eq 0 ]]; then hostcheck "$hostname" - if [[ $? -eq 0 ]]; - then + if [[ $? -eq 0 ]]; then echo $line >> hosts.tmp - else + else echo "Hostname `$hostname` is not valid. Should contain only letters, numbers and dash. Aborting." rm hosts.tmp exit 3 fi - else + else echo "`$ip` is not a valid IPv4 address (10.10.*.*). Aborting." rm hosts.tmp exit 4 @@ -94,19 +102,18 @@ if [[ -e "$file" ]]; then fi # Если заданы аргументы, то создаем временный файл -if [[ $# -ne 0 ]] then +if [[ $# -ne 0 ]]; then touch hosts.tmp echo -n "" > hosts.tmp for arg in "$@"; do ipcheck "$arg" - if [ $? -eq 0 ] - then + if [ $? -eq 0 ]; then echo -n "$arg " >> ./hosts.tmp echo -n "vm" >> ./hosts.tmp printf "%03d\n" "$(echo -n $arg | cut -d '.' -f 3)" >> ./hosts.tmp printf "%03d\n" "$(echo -n $arg | cut -d '.' -f 4)" >> ./hosts.tmp echo >> hosts.tmp - else + else echo "Argument `$arg` is not a valid IPv4 address (10.10.*.*). Aborting." rm hosts.tmp exit 5 @@ -136,7 +143,11 @@ ipcheck() { hostcheck (){ local hostname=$1 local pattern="^[a-zA-Z0-9-]+$" - if [[ "$hostname" =~ $pattern ]]; then return 0; else return 1; fi + if [[ "$hostname" =~ $pattern ]]; then + return 0 + else + return 1 + fi } # Проверяем ключ @@ -171,12 +182,12 @@ mksnippet (){ snippet="${path}${vmnum}_user.yaml" cp ./user.yaml "$snippet" sed -i "s/HOSTNAME/$hostname/g" "$snippet" - if [[ -n $username ]]; - then sed -i "s|user: root|user: ${username}\nsudo: ALL=(ALL) NOPASSWD:ALL|" "$snippet" + if [[ -n $username ]]; then + sed -i "s|user: root|user: ${username}\nsudo: ALL=(ALL) NOPASSWD:ALL|" "$snippet" fi - if [[ -n $password ]]; - phash=$(cat $password | mkpasswd -m sha-256 -s) - then sed -i "s|.*password.*| - ${phash}|" "$snippet" + if [[ -n $password ]]; then + phash=$(cat $password | mkpasswd -m sha-256 -s) + sed -i "s|.*password.*| - ${phash}|" "$snippet" fi sed -i "s|.*ssh-rsa.*| - ${pubkey}|" "$snippet" } @@ -185,10 +196,19 @@ for line in $(cat hosts.tmp) do ip=$(echo $line | cut -d ' ' -f 1) vlan=$(echo $ip | cut -d '.' -f 3) - if [[ vlan -eq 0 ]]; then mask=23; gw="10.10.0.1"; vlan=100; else mask=24; gw="10.10.${vlan}.1"; fi + if [[ vlan -eq 0 ]]; then + mask=23 + gw="10.10.0.1" + vlan=100 + else + mask=24 + gw="10.10.${vlan}.1" + fi hostname=$(echo $line | cut -d ' ' -f 2) vmnum="$vlan(printf "%03d\n" "$(echo -n $ip | cut -d '.' -f 4)")" - if [[ $vlan -eq 0 ]]; then $vlan=100; fi + if [[ $vlan -eq 0 ]]; then + $vlan=100 + fi mksnippet #### DEBUG 2 echo "IP: $ip" @@ -201,9 +221,11 @@ do #### echo -n "Now cloning VM $vmnum from a template....." qm clone 5000 $vmnum --name $hostname --full &>/dev/null - if [ $? -eq 0 ] - then echo "OK" - else "ERROR"; exit 8 + if [ $? -eq 0 ]; then + echo "OK" + else + echo "ERROR" + exit 8 fi qm set $vmnum --tags $node,$tag qm resize $vmnum scsi0 +"$size"G @@ -211,13 +233,12 @@ do qm set $vmnum --ipconfig0 ip="$ip"/"$mask",gw="$gw" qm cloudinit update $vmnum qm start $vmnum - if [ -v harule ] - then + if [ -v harule ]; then ha-manager add vm:$vmnum --state started --max_relocate 2 ha-manager rules add node-affinity $harule --resources vm:$vmnum --nodes pve1,pve2,pve3 --strict 1 echo "HA rule added" # ОБЯЗАТЕЛЬНО ПРОВЕРИТЬ КОМАНДУ!!! - fi + fi done # Финальная часть