Update vmcreate1.sh
This commit is contained in:
128
vmcreate1.sh
128
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)
|
||||
|
||||
Reference in New Issue
Block a user