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"
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user