модифицировал скрипт создания шаблона
parent
4dc8b8701c
commit
f5e9afbeb9
|
@ -1,53 +1,172 @@
|
|||
#!/bin/bash
|
||||
|
||||
# завершить выполнение, если некоторая команда, которая не является частью какого-либо теста (например, if [ ... ] или конструктора &&), возвращает ненулевой код
|
||||
# Скрипт для создания шаблона ВМ в Proxmox VE с cloud-init
|
||||
# Автоматически скачивает образ Debian 12, создает и настраивает ВМ как шаблон
|
||||
|
||||
set -e
|
||||
|
||||
# проверка запуска скрипта с параметром
|
||||
if [ -n "$1" ]; then
|
||||
vm_passwd="$1"
|
||||
else
|
||||
echo "Необходимо указать желаемый пароль для шаблона первым аргументом"
|
||||
# Параметры по умолчанию
|
||||
DEFAULT_VM_ID=508
|
||||
DEFAULT_VM_NAME="deb12-cloudinit-template"
|
||||
DEFAULT_VM_USER="sa"
|
||||
DEFAULT_VM_CORES=4
|
||||
DEFAULT_VM_SOCKETS=2
|
||||
DEFAULT_VM_MEMORY=4096
|
||||
DEFAULT_PX_STORAGE="local-lvm"
|
||||
DEFAULT_PX_BRIDGE="vmbr0"
|
||||
DEFAULT_CLOUDIMG="debian-12-generic-amd64.qcow2"
|
||||
DEFAULT_IMG_URL="https://cloud.debian.org/images/cloud/bookworm/latest"
|
||||
|
||||
# Функция вывода справки
|
||||
show_help() {
|
||||
echo "Использование: $0 [ОПЦИИ] <пароль>"
|
||||
echo
|
||||
echo "Обязательные аргументы:"
|
||||
echo " пароль Пароль пользователя для cloud-init"
|
||||
echo
|
||||
echo "Опции:"
|
||||
echo " -h, --help Показать эту справку и выйти"
|
||||
echo " -i ID, --id ID ID создаваемой ВМ (по умолчанию: $DEFAULT_VM_ID)"
|
||||
echo " -n NAME, --name NAME Имя шаблона (по умолчанию: \"$DEFAULT_VM_NAME\")"
|
||||
echo " -u USER, --user USER Имя пользователя cloud-init (по умолчанию: \"$DEFAULT_VM_USER\")"
|
||||
echo " -s STORAGE, --storage STORAGE"
|
||||
echo " Хранилище Proxmox (по умолчанию: \"$DEFAULT_PX_STORAGE\")"
|
||||
echo " -b BRIDGE, --bridge BRIDGE"
|
||||
echo " Сетевой мост (по умолчанию: \"$DEFAULT_PX_BRIDGE\")"
|
||||
echo " -c CORES, --cores CORES"
|
||||
echo " Количество ядер CPU (по умолчанию: $DEFAULT_VM_CORES)"
|
||||
echo " -m MEMORY, --memory MEMORY"
|
||||
echo " Объем памяти в MB (по умолчанию: $DEFAULT_VM_MEMORY)"
|
||||
echo " -S SOCKETS, --sockets SOCKETS"
|
||||
echo " Количество сокетов CPU (по умолчанию: $DEFAULT_VM_SOCKETS)"
|
||||
echo
|
||||
echo "Примеры:"
|
||||
echo " $0 MySecurePassword123"
|
||||
echo " $0 -u admin MySecurePassword123"
|
||||
echo " $0 -i 510 -n my-template -u admin MySecurePassword123"
|
||||
echo " $0 -c 2 -m 2048 -S 1 MyPassword"
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Парсинг аргументов командной строки
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
show_help
|
||||
;;
|
||||
-i|--id)
|
||||
vm_id="$2"
|
||||
shift 2
|
||||
;;
|
||||
-n|--name)
|
||||
vm_name="$2"
|
||||
shift 2
|
||||
;;
|
||||
-u|--user)
|
||||
vm_user="$2"
|
||||
shift 2
|
||||
;;
|
||||
-s|--storage)
|
||||
px_storage="$2"
|
||||
shift 2
|
||||
;;
|
||||
-b|--bridge)
|
||||
px_bridge="$2"
|
||||
shift 2
|
||||
;;
|
||||
-c|--cores)
|
||||
vm_cores="$2"
|
||||
shift 2
|
||||
;;
|
||||
-m|--memory)
|
||||
vm_memory="$2"
|
||||
shift 2
|
||||
;;
|
||||
-S|--sockets)
|
||||
vm_sockets="$2"
|
||||
shift 2
|
||||
;;
|
||||
*)
|
||||
if [ -z "$vm_passwd" ]; then
|
||||
vm_passwd="$1"
|
||||
shift
|
||||
else
|
||||
echo "Ошибка: Неизвестный аргумент $1"
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Проверка обязательного аргумента (пароль)
|
||||
if [ -z "$vm_passwd" ]; then
|
||||
echo "Ошибка: Необходимо указать пароль для пользователя cloud-init"
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# задаём необходимые переменные
|
||||
cloudimg=debian-12-generic-amd64.qcow2
|
||||
img_url=https://cloud.debian.org/images/cloud/bookworm/latest
|
||||
# Установка значений по умолчанию для неопределённых параметров
|
||||
cloudimg="${cloudimg:-$DEFAULT_CLOUDIMG}"
|
||||
img_url="${img_url:-$DEFAULT_IMG_URL}"
|
||||
vm_id="${vm_id:-$DEFAULT_VM_ID}"
|
||||
vm_name="${vm_name:-$DEFAULT_VM_NAME}"
|
||||
vm_memory="${vm_memory:-$DEFAULT_VM_MEMORY}"
|
||||
vm_cores="${vm_cores:-$DEFAULT_VM_CORES}"
|
||||
vm_sockets="${vm_sockets:-$DEFAULT_VM_SOCKETS}"
|
||||
vm_user="${vm_user:-$DEFAULT_VM_USER}"
|
||||
px_storage="${px_storage:-$DEFAULT_PX_STORAGE}"
|
||||
px_bridge="${px_bridge:-$DEFAULT_PX_BRIDGE}"
|
||||
|
||||
# параметры вм
|
||||
vm_id=508
|
||||
vm_name="deb12-cloudinit-template"
|
||||
vm_memory=2048
|
||||
vm_cores=2
|
||||
vm_user="sa"
|
||||
# Вывод информации о параметрах
|
||||
echo "Параметры создания шаблона:"
|
||||
echo "--------------------------"
|
||||
echo "ID ВМ: $vm_id"
|
||||
echo "Имя шаблона: $vm_name"
|
||||
echo "Пользователь: $vm_user"
|
||||
echo "Ядра CPU: $vm_cores"
|
||||
echo "Сокеты CPU: $vm_sockets"
|
||||
echo "Память (MB): $vm_memory"
|
||||
echo "Хранилище: $px_storage"
|
||||
echo "Сетевой мост: $px_bridge"
|
||||
echo "--------------------------"
|
||||
echo
|
||||
|
||||
# данные proxmox
|
||||
px_storage=local-lvm
|
||||
px_bridge=vmbr0
|
||||
|
||||
# проверить наличие образа, если его нет - скачать образ ubuntu server 20.04 с поддержкой cloud-init
|
||||
# Загрузка образа если отсутствует
|
||||
if [ ! -f "$cloudimg" ]; then
|
||||
echo "Файл $cloudimg не существует"
|
||||
echo Скачиваю образ $img_url/$cloudimg
|
||||
wget $img_url/$cloudimg
|
||||
echo "Скачиваю образ $img_url/$cloudimg"
|
||||
wget -q --show-progress "$img_url/$cloudimg"
|
||||
fi
|
||||
|
||||
echo Создаю ВМ
|
||||
qm create $vm_id --name $vm_name --memory $vm_memory --cores $vm_cores --net0 virtio,bridge=$px_bridge
|
||||
qm importdisk $vm_id $cloudimg $px_storage
|
||||
qm set $vm_id --scsihw virtio-scsi-pci --scsi0 $px_storage:vm-$vm_id-disk-0
|
||||
qm set $vm_id --boot c --bootdisk scsi0
|
||||
qm set $vm_id --ide2 $px_storage:cloudinit
|
||||
qm set $vm_id --serial0 socket --vga serial0
|
||||
qm set $vm_id --cipassword=$vm_passwd --ciuser=$vm_user
|
||||
qm set $vm_id --agent 1
|
||||
# Создание и настройка ВМ
|
||||
echo "Создаю ВМ $vm_id: $vm_name"
|
||||
qm create "$vm_id" \
|
||||
--name "$vm_name" \
|
||||
--memory "$vm_memory" \
|
||||
--cores "$vm_cores" \
|
||||
--sockets "$vm_sockets" \
|
||||
--numa 1 \
|
||||
--agent enabled=1 \
|
||||
--net0 virtio,bridge=$px_bridge
|
||||
|
||||
echo "Импортирую диск"
|
||||
qm importdisk "$vm_id" "$cloudimg" "$px_storage"
|
||||
|
||||
echo "Настраиваю оборудование ВМ"
|
||||
qm set "$vm_id" \
|
||||
--scsihw virtio-scsi-single \
|
||||
--scsi0 "$px_storage:vm-$vm_id-disk-0" \
|
||||
--scsi1 "$px_storage:cloudinit,media=cdrom" \
|
||||
--ide2 "none,media=cdrom" \
|
||||
--boot "order=scsi0;ide2;net0" \
|
||||
--cipassword="$vm_passwd" --ciuser="$vm_user"
|
||||
|
||||
echo Конвертирую ВМ в шаблон
|
||||
qm template $vm_id
|
||||
|
||||
echo Удаляю ранее скачанный образ
|
||||
rm $cloudimg
|
||||
echo Удаляю скачанный образ
|
||||
rm -f $cloudimg
|
||||
|
||||
echo Готово
|
||||
echo
|
||||
echo "Шаблон $vm_name (ID: $vm_id) успешно создан!"
|
||||
exit 0
|
||||
|
|
Loading…
Reference in New Issue