create-pve-template.sh
· 2.0 KiB · Bash
Raw
#!/bin/bash
set -e
TEMPLATE_URL="https://cloud-images.ubuntu.com/plucky/current/plucky-server-cloudimg-amd64.img"
VMID=9000
TEMPLATE_NAME="ubuntu-25.04-cloudimg-temp"
STORAGE="local-lvm"
SKIP_DISK_SETUP=false
# Parser avec getopt
OPTS=$(getopt -o "" --long vmid:,template:,storage:,skip-disk -n 'script' -- "$@")
eval set -- "$OPTS"
while true; do
case "$1" in
--vmid) VMID="$2"; shift 2 ;;
--template) TEMPLATE_NAME="$2"; shift 2 ;;
--storage) STORAGE="$2"; shift 2 ;;
--skip-disk) SKIP_DISK_SETUP=true; shift ;;
--) shift; break ;;
*) break ;;
esac
done
# Récupérer les clés SSH avec décodage propre
SSH_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')
cd /tmp
if [ "$SKIP_DISK_SETUP" = false ]; then
echo "Downloading and importing disk..."
wget -O "${TEMPLATE_NAME}_disk" "$TEMPLATE_URL"
qm create "$VMID" \
--name "$TEMPLATE_NAME" \
--memory 3072 \
--cores 3 \
--net0 virtio,bridge=vmbr0 \
--serial0 socket \
--vga serial0
qm importdisk "$VMID" "${TEMPLATE_NAME}_disk" "$STORAGE"
else
echo "Skipping disk setup (--skip-disk flag)"
fi
# Créer le dossier des clés SSH
SSH_KEYS_DIR="ssh_keys_${VMID}"
mkdir -p "$SSH_KEYS_DIR"
# Écrire chaque clé dans un fichier unique
KEY_INDEX=0
while IFS= read -r key; do
[ -z "$key" ] && continue
SSH_KEY_FILE="${SSH_KEYS_DIR}/key_$(date +%s)_${KEY_INDEX}.pub"
echo "$key" > "$SSH_KEY_FILE"
qm set "$VMID" --sshkey "$SSH_KEY_FILE"
((KEY_INDEX++))
done <<< "$SSH_KEYS"
qm set "$VMID" \
--scsihw virtio-scsi-pci \
--scsi0 "${STORAGE}:vm-${VMID}-disk-0" \
--ide2 "${STORAGE}:cloudinit" \
--boot c --bootdisk scsi0 \
--serial0 socket \
--vga serial0 \
--net0 virtio,bridge=vmbr0 \
--ciuser packer \
--searchdomain example.com
qm template "$VMID"
echo "Template $VMID ready for Packer"
| 1 | #!/bin/bash |
| 2 | set -e |
| 3 | |
| 4 | TEMPLATE_URL="https://cloud-images.ubuntu.com/plucky/current/plucky-server-cloudimg-amd64.img" |
| 5 | VMID=9000 |
| 6 | TEMPLATE_NAME="ubuntu-25.04-cloudimg-temp" |
| 7 | STORAGE="local-lvm" |
| 8 | SKIP_DISK_SETUP=false |
| 9 | |
| 10 | # Parser avec getopt |
| 11 | OPTS=$(getopt -o "" --long vmid:,template:,storage:,skip-disk -n 'script' -- "$@") |
| 12 | eval set -- "$OPTS" |
| 13 | |
| 14 | while 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 |
| 23 | done |
| 24 | |
| 25 | # Récupérer les clés SSH avec décodage propre |
| 26 | SSH_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 | |
| 28 | cd /tmp |
| 29 | |
| 30 | if [ "$SKIP_DISK_SETUP" = false ]; then |
| 31 | echo "Downloading and importing disk..." |
| 32 | wget -O "${TEMPLATE_NAME}_disk" "$TEMPLATE_URL" |
| 33 | |
| 34 | qm create "$VMID" \ |
| 35 | --name "$TEMPLATE_NAME" \ |
| 36 | --memory 3072 \ |
| 37 | --cores 3 \ |
| 38 | --net0 virtio,bridge=vmbr0 \ |
| 39 | --serial0 socket \ |
| 40 | --vga serial0 |
| 41 | |
| 42 | qm importdisk "$VMID" "${TEMPLATE_NAME}_disk" "$STORAGE" |
| 43 | else |
| 44 | echo "Skipping disk setup (--skip-disk flag)" |
| 45 | fi |
| 46 | |
| 47 | # Créer le dossier des clés SSH |
| 48 | SSH_KEYS_DIR="ssh_keys_${VMID}" |
| 49 | mkdir -p "$SSH_KEYS_DIR" |
| 50 | |
| 51 | # Écrire chaque clé dans un fichier unique |
| 52 | KEY_INDEX=0 |
| 53 | while IFS= read -r key; do |
| 54 | [ -z "$key" ] && continue |
| 55 | SSH_KEY_FILE="${SSH_KEYS_DIR}/key_$(date +%s)_${KEY_INDEX}.pub" |
| 56 | echo "$key" > "$SSH_KEY_FILE" |
| 57 | qm set "$VMID" --sshkey "$SSH_KEY_FILE" |
| 58 | ((KEY_INDEX++)) |
| 59 | done <<< "$SSH_KEYS" |
| 60 | |
| 61 | qm set "$VMID" \ |
| 62 | --scsihw virtio-scsi-pci \ |
| 63 | --scsi0 "${STORAGE}:vm-${VMID}-disk-0" \ |
| 64 | --ide2 "${STORAGE}:cloudinit" \ |
| 65 | --boot c --bootdisk scsi0 \ |
| 66 | --serial0 socket \ |
| 67 | --vga serial0 \ |
| 68 | --net0 virtio,bridge=vmbr0 \ |
| 69 | --ciuser packer \ |
| 70 | --searchdomain example.com |
| 71 | |
| 72 | qm template "$VMID" |
| 73 | |
| 74 | echo "Template $VMID ready for Packer" |