#!/usr/bin/env bash # Build the watcher's NixOS QCOW2 image and upload it to Infomaniak Glance. # # Prereqs: # - Run inside `nix develop` (provides openstackclient + nix + flakes). # - terraform/infomaniak/.env populated and auto-sourced by the devShell. # - SSH pubkey pasted into hosts/watcher/default.nix. # # Re-run any time the watcher's NixOS config changes if you want fresh boots # from a current image. Routine config updates after boot use nixos-rebuild # instead (no image rebuild required). set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$REPO_ROOT" IMAGE_NAME="${TF_VAR_watcher_image_name:-nixos-watcher}" : "${OS_AUTH_URL:?terraform/infomaniak/.env not loaded — run inside 'nix develop'}" echo "==> building QCOW2 (this takes a few minutes the first time)" nix build .#watcher-image # nixos-generators names the file with the channel revision, e.g. # nixos-image-openstack-25.05.20260102.ac62194-x86_64-linux.qcow2 QCOW=$(ls "$(readlink -f result)"/*.qcow2 | head -1) [ -f "$QCOW" ] || { echo "no qcow2 found under result/" >&2; exit 1; } ls -lh "$QCOW" echo "==> uploading to Infomaniak Glance as '$IMAGE_NAME'" # If an older copy exists, delete it first (Glance image names aren't unique). if openstack image show "$IMAGE_NAME" -f value -c id >/dev/null 2>&1; then echo " older image found — deleting" openstack image delete "$IMAGE_NAME" fi openstack image create \ --disk-format qcow2 \ --container-format bare \ --file "$QCOW" \ --progress \ "$IMAGE_NAME" echo "==> done. Image:" openstack image show "$IMAGE_NAME" -f table -c id -c name -c status -c size