最終更新 3 weeks ago

Working version of my proxmox template creation script. It'll be used to provision Packer with necessary templates in order to build it's image.

修正履歴 98492783d0e5c883cd6b831d1518b71dd011fcd0

create-pve-template.sh Raw
1#!/bin/bash
2set -e
3
4TEMPLATE_URL="https://cloud-images.ubuntu.com/plucky/current/plucky-server-cloudimg-amd64.img"
5VMID=9000
6TEMPLATE_NAME="ubuntu-25.04-cloudimg-temp"
7STORAGE="local-lvm"
8SKIP_DISK_SETUP=false
9
10# Parser avec getopt
11OPTS=$(getopt -o "" --long vmid:,template:,storage:,skip-disk -n 'script' -- "$@")
12eval set -- "$OPTS"
13
14while true; do
15 case "$1" in
16 --vmid) VMID="$2"; shift 2 ;;
17 --template) TEMPLATE_NAME="$2"; shift 2 ;;
18 --storage) STORAGE="$2"; shift 2 ;;
19 --skip-disk) SKIP_DISK_SETUP=true; shift ;;
20 --) shift; break ;;
21 *) break ;;
22 esac
23done
24
25# Récupérer les clés SSH
26SSH_KEYS=$(curl -s https://gist.vorpax.dev/vorpax/ssh/raw/HEAD/ssh-keys.pub | sed 's/%20/ /g; s/%0A/\n/g; s/%3D/=/g; s/%2F/\//g; s/%40/@/g; s/%3A/:/g')
27
28cd /tmp
29
30if [ "$SKIP_DISK_SETUP" = false ]; then
31 echo "Downloading cloud image..."
32 wget -O "${TEMPLATE_NAME}_disk" "$TEMPLATE_URL"
33
34 # Créer la VM avec une config minimale
35 qm create "$VMID" \
36 --name "$TEMPLATE_NAME" \
37 --memory 3072 \
38 --cores 3 \
39 --scsihw virtio-scsi-pci \
40 --serial0 socket \
41 --vga serial0 \
42 --net0 virtio,bridge=vmbr0
43
44 # Importer le disque
45 echo "Importing disk..."
46 qm importdisk "$VMID" "${TEMPLATE_NAME}_disk" "$STORAGE"
47
48 # Extraire le chemin complet du disque unused (la partie APRÈS "unused0: ")
49 DISK_PATH=$(qm config "$VMID" | grep "^unused0:" | awk '{print $2}')
50
51 if [ -z "$DISK_PATH" ]; then
52 echo "ERROR: Could not find unused disk"
53 exit 1
54 fi
55
56 echo "Attaching disk: $DISK_PATH"
57 qm set "$VMID" --scsi0 "$DISK_PATH"
58
59 rm "${DISK_PATH}"
60else
61 echo "Skipping disk setup (--skip-disk flag)"
62fi
63
64# Créer le dossier des clés SSH
65SSH_KEYS_DIR="ssh_keys_${VMID}"
66mkdir -p "$SSH_KEYS_DIR"
67
68# Écrire toutes les clés dans un seul fichier
69SSH_KEY_FILE="${SSH_KEYS_DIR}/authorized_keys"
70echo "$SSH_KEYS" > "$SSH_KEY_FILE"
71echo "SSH keys written to $SSH_KEY_FILE"
72
73# Configurer cloud-init et le reste
74qm set "$VMID" \
75 --sshkey "$SSH_KEY_FILE" \
76 --ide2 "${STORAGE}:cloudinit" \
77 --boot order=scsi0 \
78 --ciuser packer \
79 --searchdomain .lab.internal \
80 --ipconfig0 ip=dhcp
81
82# Convertir en template
83qm template "$VMID"
84
85echo "Template $VMID ready for Packer"