72 строки
2.1 KiB
Bash
72 строки
2.1 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
VM_NAME="${1:-test-alpine}"
|
|
ISO_URL="${VIRTUALITY_TEST_ISO_URL:-https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/x86_64/alpine-standard-3.20.3-x86_64.iso}"
|
|
ISO_PATH="/var/lib/virtuality/iso/alpine-standard.iso"
|
|
DISK_PATH="/var/lib/virtuality/images/${VM_NAME}.qcow2"
|
|
BRIDGE="${VIRTUALITY_BRIDGE:-br0}"
|
|
MEMORY="${VIRTUALITY_TEST_VM_MEMORY:-1024}"
|
|
VCPUS="${VIRTUALITY_TEST_VM_VCPUS:-1}"
|
|
DISK_SIZE="${VIRTUALITY_TEST_VM_DISK_SIZE:-8}"
|
|
|
|
if [[ "$EUID" -ne 0 ]]; then
|
|
echo "Ошибка: запусти через sudo: sudo bash scripts/create_test_vm.sh"
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v virt-install >/dev/null 2>&1; then
|
|
echo "Ошибка: virt-install не найден. Запусти install_virtuality_node.sh"
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v virsh >/dev/null 2>&1; then
|
|
echo "Ошибка: virsh не найден. Запусти install_virtuality_node.sh"
|
|
exit 1
|
|
fi
|
|
|
|
if ! ip link show "$BRIDGE" >/dev/null 2>&1; then
|
|
echo "Ошибка: bridge $BRIDGE не найден. Сначала настрой br0."
|
|
ip -br a
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p /var/lib/virtuality/iso /var/lib/virtuality/images
|
|
|
|
if virsh dominfo "$VM_NAME" >/dev/null 2>&1; then
|
|
echo "Виртуальная машина $VM_NAME уже существует."
|
|
virsh list --all
|
|
exit 0
|
|
fi
|
|
|
|
if [[ ! -f "$ISO_PATH" ]]; then
|
|
echo "Скачиваю тестовый ISO: $ISO_URL"
|
|
wget -O "$ISO_PATH" "$ISO_URL"
|
|
fi
|
|
|
|
virsh pool-refresh virtuality-iso >/dev/null 2>&1 || true
|
|
virsh pool-refresh virtuality-images >/dev/null 2>&1 || true
|
|
|
|
echo "Создаю тестовую VM: $VM_NAME"
|
|
virt-install \
|
|
--name "$VM_NAME" \
|
|
--memory "$MEMORY" \
|
|
--vcpus "$VCPUS" \
|
|
--disk "path=${DISK_PATH},size=${DISK_SIZE},format=qcow2,bus=virtio" \
|
|
--cdrom "$ISO_PATH" \
|
|
--os-variant generic \
|
|
--network "bridge=${BRIDGE},model=virtio" \
|
|
--graphics vnc,listen=0.0.0.0 \
|
|
--noautoconsole
|
|
|
|
echo
|
|
echo "VM создана."
|
|
virsh list --all
|
|
|
|
echo
|
|
echo "VNC display:"
|
|
virsh vncdisplay "$VM_NAME" || true
|
|
|
|
echo
|
|
echo "Открыть в Cockpit: https://SERVER_IP:9090 → Virtual machines → ${VM_NAME}"
|