diff --git a/vmcreate1.sh b/vmcreate1.sh index a102e59..c202b2b 100644 --- a/vmcreate1.sh +++ b/vmcreate1.sh @@ -31,6 +31,68 @@ show_help(){ echo "IP address should be 10.10.XXX.YYY" } +#Функция создания VMID, аргумент - IPv4 адрес. +get_vmid(){ + local vlan=$(echo -n $1 | cut -d '.' -f 3) + local oct4=$(echo -n $1 | cut -d '.' -f 4) + local vmid="" + if [[ $vlan -eq 0 ]]; then + vmid=100 + else + vmid=$(printf "%02d\n" "$vlan") + fi + vmid+=$(printf "%03d\n" "$oct4") + echo -n $vmid +} + +# Функция для проверки IP адреса по шаблону 10.10.*.*, написана гуглом +ipcheck() { + local ip=$1 + local stat=1 + #oldIFS=$IFS + # Check if the IP matches the general IPv4 pattern + if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then + # Split the IP into octets + IFS='.' read -r -a octets <<< "$ip" + # Check if each octet is within the valid range (0-255) + if [[ ${octets[0]} -eq 10 && ${octets[1]} -eq 10 && ${octets[2]} -le 252 && ${octets[3]} -le 252 && ${octets[3]} -ne 0 ]]; then + stat=0 + fi + fi + return $stat + #IFS=$oldIFS +} + +# Функция для проверки hostname на валидные символы (буквы, цифры, дефис) +hostcheck (){ + local hostname=$1 + local pattern="^[a-zA-Z0-9-]+$" + if [[ "$hostname" =~ $pattern ]]; then + return 0 + else + return 1 + fi +} + +keypair_generate (){ + ssh-keygen -t rsa -N "" -f $privkey + pubkey="$privkey".pub +} + +mksnippet (){ + snippet="${path}${vmid}_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" + fi + 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" +} + # Обрабатываем опции while getopts "a:f:h:k:u:p:d:t" opt; do case $opt in @@ -122,49 +184,6 @@ if [[ $# -ne 0 ]]; then done fi -# Функция для проверки IP адреса по шаблону 10.10.*.*, написана гуглом -ipcheck() { - local ip=$1 - local stat=1 - #oldIFS=$IFS - # Check if the IP matches the general IPv4 pattern - if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then - # Split the IP into octets - IFS='.' read -r -a octets <<< "$ip" - # Check if each octet is within the valid range (0-255) - if [[ ${octets[0]} -eq 10 && ${octets[1]} -eq 10 && ${octets[2]} -le 252 && ${octets[3]} -le 252 && ${octets[3]} -ne 0 ]]; then - stat=0 - fi - fi - return $stat - #IFS=$oldIFS -} - -# Функция для проверки hostname на валидные символы (буквы, цифры, дефис) -hostcheck (){ - local hostname=$1 - local pattern="^[a-zA-Z0-9-]+$" - if [[ "$hostname" =~ $pattern ]]; then - return 0 - else - return 1 - fi -} - -#Функция создания VMID, аргумент - IPv4 адрес. -get_vmid(){ - local vlan=$(echo -n $1 | cut -d '.' -f 3) - local oct4=$(echo -n $1 | cut -d '.' -f 4) - local vmid="" - if [[ $vlan -eq 0 ]]; then - vmid=100 - else - vmid=$(printf "%02d\n" "$vlan") - fi - vmid+=$(printf "%03d\n" "$oct4") - echo -n $vmid -} - # Проверяем ключ if [ -v pubkey ]; then if [[ ! -f pubkey ]]; then @@ -172,8 +191,8 @@ if [ -v pubkey ]; then echo "Public key does not exist. Generate new pair? y/n" read input case $input in - y) read -p "Enter name for your private key: " privkey && keypair_generate "$privkey";; - Y) read -p "Enter name for your private key: " privkey && keypair_generate "$privkey";; + y) read -p "Enter name for your PRIVATE key: " privkey && keypair_generate "$privkey";; + Y) read -p "Enter name for your PRIVATE key: " privkey && keypair_generate "$privkey";; n) echo "Public key is necessary to continue. Please specify or generate new pair."; exit 6;; N) echo "Public key is necessary to continue. Please specify or generate new pair."; exit 6;; *) echo "Use '-h' flag for help"; exit 6;; @@ -189,25 +208,6 @@ echo "File hosts.tmp:" cat hosts.tmp; echo ### -keypair_generate (){ - ssh-keygen -t rsa -N "" -f $privkey - pubkey="$privkey".pub -} - -mksnippet (){ - snippet="${path}${vmid}_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" - fi - 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" -} - for line in $(cat hosts.tmp) do ip=$(echo $line | cut -d ' ' -f 1)