Update vmcreate1.sh

This commit is contained in:
2025-10-26 14:56:30 +00:00
parent 965f86e363
commit f5d9c4b590

View File

@@ -31,6 +31,68 @@ show_help(){
echo "IP address should be 10.10.XXX.YYY" 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 while getopts "a:f:h:k:u:p:d:t" opt; do
case $opt in case $opt in
@@ -122,49 +184,6 @@ if [[ $# -ne 0 ]]; then
done done
fi 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 [ -v pubkey ]; then
if [[ ! -f 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" echo "Public key does not exist. Generate new pair? y/n"
read input read input
case $input in 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;;
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;; *) echo "Use '-h' flag for help"; exit 6;;
@@ -189,25 +208,6 @@ echo "File hosts.tmp:"
cat hosts.tmp; echo 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) for line in $(cat hosts.tmp)
do do
ip=$(echo $line | cut -d ' ' -f 1) ip=$(echo $line | cut -d ' ' -f 1)