proxmox_vm_create/create_template_deb12.sh

175 lines
5.8 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/bin/bash
# Скрипт для создания шаблона ВМ в Proxmox VE с cloud-init
# Автоматически скачивает образ Debian 12, создает и настраивает ВМ как шаблон
set -e
# Параметры по умолчанию
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"
echo
echo "Справка - \"$0 -h\""
#show_help
exit 1
fi
# Установка значений по умолчанию для неопределённых параметров
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}"
# Вывод информации о параметрах
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
# Загрузка образа если отсутствует
if [ ! -f "$cloudimg" ]; then
echo "Скачиваю образ $img_url/$cloudimg"
wget -q --show-progress "$img_url/$cloudimg"
fi
# Создание и настройка ВМ
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 -f $cloudimg
echo
echo "Шаблон $vm_name (ID: $vm_id) успешно создан!"
exit 0