From f8ec8e7d93b48d74cc0ef2bff5fa24b8af6c17bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20=E2=80=9CNiols=E2=80=9D=20Jeannerod?= <nicolas.jeannerod@moduscreate.com> Date: Fri, 21 Feb 2025 11:08:06 +0100 Subject: [PATCH] Decouple id and name --- deployment/proxmox/provision.sh | 71 ++++++++++++++++++++------------- deployment/proxmox/remove.sh | 1 + 2 files changed, 44 insertions(+), 28 deletions(-) diff --git a/deployment/proxmox/provision.sh b/deployment/proxmox/provision.sh index 0682d4f7..9d59cc76 100755 --- a/deployment/proxmox/provision.sh +++ b/deployment/proxmox/provision.sh @@ -29,6 +29,15 @@ help () { cat <<EOF Usage: $0 [OPTION...] ID [ID...] +ID can be either: + + - of the form INT:STR, in which case the integer will be taken as the Proxmox + id for the machine, and the string as its name in Proxmox and the name of + the NixOS configuration to install, + + - an integer, in which case it will be taken as the Proxmox id for the + machine, and the name will be the id prefixed by 'fedi'. + Options: --api-url STR Base URL of the Proxmox API (required) --username STR Username, with provider (eg. niols@pve; required) @@ -174,28 +183,28 @@ proxmox_sync () ( build_iso () { acquire_lock build - printf 'Building ISO for VM %d...\n' "$1" + printf 'Building ISO for VM %s...\n' "$2" nix build \ --impure --expr " let flake = builtins.getFlake (builtins.toString ./.); in flake.lib.makeInstallerIso { - nixosConfiguration = flake.nixosConfigurations.provisioning.fedi$1; + nixosConfiguration = flake.nixosConfigurations.$2; nixpkgs = flake.inputs.nixpkgs; hostKeys = { ed25519 = { - private = ./deployment/hostKeys/fedi$1/ssh_host_ed25519_key; - public = ./deployment/hostKeys/fedi$1/ssh_host_ed25519_key.pub; + private = ./deployment/hostKeys/$2/ssh_host_ed25519_key; + public = ./deployment/hostKeys/$2/ssh_host_ed25519_key.pub; }; }; } " \ --log-format raw --quiet \ - --out-link "$tmpdir/installer-fedi$1" + --out-link "$tmpdir/installer-$2" - ln -sf "$tmpdir/installer-fedi$1/iso/installer.iso" "$tmpdir/installer-fedi$1.iso" + ln -sf "$tmpdir/installer-$2/iso/installer.iso" "$tmpdir/installer-$2.iso" - printf 'done building ISO for VM %d.\n' "$1" + printf 'done building ISO for VM %s.\n' "$2" release_lock build } @@ -204,13 +213,13 @@ build_iso () { upload_iso () { acquire_lock upload - printf 'Uploading ISO for VM %d...\n' "$1" + printf 'Uploading ISO for VM %s...\n' "$2" proxmox_sync POST "$api_url/nodes/$node/storage/local/upload" \ - "filename@$tmpdir/installer-fedi$1.iso" \ + "filename@$tmpdir/installer-$2.iso" \ content==iso - printf 'done uploading ISO for VM %d.\n' "$1" + printf 'done uploading ISO for VM %s.\n' "$2" release_lock upload } @@ -218,26 +227,26 @@ upload_iso () { ## Remove ISO remove_iso () { - printf 'Removing ISO for VM %d...\n' "$1" + printf 'Removing ISO for VM %s...\n' "$2" - proxmox_sync DELETE "$api_url/nodes/$node/storage/local/content/local:iso/installer-fedi$1.iso" + proxmox_sync DELETE "$api_url/nodes/$node/storage/local/content/local:iso/installer-$2.iso" - printf 'done removing ISO for VM %d.\n' "$1" + printf 'done removing ISO for VM %s.\n' "$2" } ################################################################################ ## Create VM create_vm () { - printf 'Creating VM %d...\n' "$1" + printf 'Creating VM %s with id %d...\n' "$2" "$1" proxmox_sync POST "$api_url/nodes/$node/qemu" \ \ vmid=="$1" \ - name=="fedi$1" \ + name=="$2" \ pool==Fediversity \ \ - ide2=="local:iso/installer-fedi$1.iso,media=cdrom" \ + ide2=="local:iso/installer-$2.iso,media=cdrom" \ ostype==l26 \ \ bios==ovmf \ @@ -256,14 +265,14 @@ create_vm () { \ net0=='virtio,bridge=vnet1306' - printf 'done creating VM %d.\n' "$1" + printf 'done creating VM %s.\n' "$2" } ################################################################################ ## Install VM install_vm () ( - printf 'Installing VM %d...\n' "$1" + printf 'Installing VM %s...\n' "$2" proxmox_sync POST "$api_url/nodes/$node/qemu/$1/status/start" @@ -277,14 +286,14 @@ install_vm () ( esac done - printf 'done installing VM %d.\n' "$1" + printf 'done installing VM %s.\n' "$2" ) ################################################################################ ## Start VM start_vm () { - printf 'Starting VM %d...\n' "$1" + printf 'Starting VM %s...\n' "$2" proxmox_sync POST "$api_url/nodes/$node/qemu/$1/config" \ ide2=='none,media=cdrom' \ @@ -292,7 +301,7 @@ start_vm () { proxmox_sync POST "$api_url/nodes/$node/qemu/$1/status/start" - printf 'done starting VM %d.\n' "$1" + printf 'done starting VM %s.\n' "$2" } ################################################################################ @@ -304,16 +313,22 @@ printf ' cores: %d\n' "$cores" printf ' memory: %d\n' "$memory" provision_vm () { - build_iso "$1" - upload_iso "$1" - create_vm "$1" - install_vm "$1" - start_vm "$1" - remove_iso "$1" + build_iso "$@" + upload_iso "$@" + create_vm "$@" + install_vm "$@" + start_vm "$@" + remove_iso "$@" } for vm_id in $vm_ids; do - provision_vm "$vm_id" & + vm_name=${vm_id#*:} + vm_id=${vm_id%:*} + if [ "$vm_id" = "$vm_name" ]; then + vm_name=$(printf 'fedi%03d' "$vm_id") + fi + + provision_vm "$vm_id" "$vm_name" & done wait diff --git a/deployment/proxmox/remove.sh b/deployment/proxmox/remove.sh index a579b0bc..8ab7975a 100755 --- a/deployment/proxmox/remove.sh +++ b/deployment/proxmox/remove.sh @@ -165,6 +165,7 @@ remove_vm () { } for vm_id in $vm_ids; do + vm_id=${vm_id%:*} remove_vm "$vm_id" & done wait