#!/bin/bash # clone-vm.sh # Clones a Proxmox VM template into a new full VM. # Run this on the same node where the template lives (local storage). # # Usage: # ./clone-vm.sh [CORES] [MEMORY_MB] [DISK_SIZE] # # Examples: # ./clone-vm.sh 100 101 k3s-control-1 # ./clone-vm.sh 100 202 k3s-worker-1 6 8192 100G # # Defaults: # CORES = 2 # MEMORY_MB = 2048 # DISK_SIZE = 20G # # Note: Template must exist on the local node (local-lvm). # Run create-debian-template.sh on each node first. set -euo pipefail TEMPLATE_VMID="${1:?Usage: $0 [CORES] [MEMORY_MB] [DISK_SIZE]}" NEW_VMID="${2:?Usage: $0 [CORES] [MEMORY_MB] [DISK_SIZE]}" NAME="${3:?Usage: $0 [CORES] [MEMORY_MB] [DISK_SIZE]}" CORES="${4:-2}" MEMORY="${5:-2048}" DISK_SIZE="${6:-20G}" echo "==> Cloning template ${TEMPLATE_VMID} to ${NEW_VMID} (${NAME})..." qm clone "${TEMPLATE_VMID}" "${NEW_VMID}" --name "${NAME}" --full echo "==> Setting resources: ${CORES} cores, ${MEMORY}MB RAM..." qm set "${NEW_VMID}" --cores "${CORES}" --memory "${MEMORY}" echo "==> Resizing disk to ${DISK_SIZE}..." qm resize "${NEW_VMID}" scsi0 "${DISK_SIZE}" echo "==> Setting hostname via Cloud-Init..." qm set "${NEW_VMID}" --ciuser samantha --ipconfig0 ip=dhcp echo "==> Starting VM..." qm start "${NEW_VMID}" echo "" echo "Done. VM ${NEW_VMID} (${NAME}) started." echo "Find its IP: qm guest cmd ${NEW_VMID} network-get-interfaces"