From d76e0ddb98372ab8c887b47d46b54175e70f8398 Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra Date: Mon, 13 Oct 2025 12:15:11 +0200 Subject: [PATCH] await SSH availability, resolving a race condition Signed-off-by: Kiara Grouwstra --- deployment/run/tf-proxmox/main.tf | 22 ++++++++++++++++++++++ deployment/run/tf-proxmox/tf.nix | 1 + 2 files changed, 23 insertions(+) diff --git a/deployment/run/tf-proxmox/main.tf b/deployment/run/tf-proxmox/main.tf index e1e4ca4d..1a71a5ff 100644 --- a/deployment/run/tf-proxmox/main.tf +++ b/deployment/run/tf-proxmox/main.tf @@ -187,8 +187,30 @@ resource "proxmox_virtual_environment_vm" "nix_vm" { # } } +resource "null_resource" "wait_for_ssh" { + depends_on = [ + proxmox_virtual_environment_vm.nix_vm + ] + provisioner "local-exec" { + command = <<-EOT + for i in $(seq 1 30); do + if ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@${proxmox_virtual_environment_vm.nix_vm.ipv4_addresses[1][0]} "true" 2>/dev/null; then + exit 0 + fi + echo "Waiting for SSH (attempt #$i)..." + sleep 5 + done + echo "SSH never came up!" >&2 + exit 1 + EOT + } +} + # FIXME expose (and handle thru) [`exec`](https://pve.proxmox.com/pve-docs/api-viewer/#/nodes/{node}/qemu/{vmid}/agent/exec) endpoint in proxmox TF provider? wait, what command would i use it for?: https://github.com/bpg/terraform-provider-proxmox/issues/1576 module "nixos-rebuild" { + depends_on = [ + null_resource.wait_for_ssh + ] source = "../tf-single-host" nixos_conf = var.nixos_conf # username = var.ssh_user # refers to the proxmox ssh user, not the VM one diff --git a/deployment/run/tf-proxmox/tf.nix b/deployment/run/tf-proxmox/tf.nix index 6838de2b..ba39d186 100644 --- a/deployment/run/tf-proxmox/tf.nix +++ b/deployment/run/tf-proxmox/tf.nix @@ -35,6 +35,7 @@ in ).withPlugins (p: [ p.external + p.null (mkProvider { owner = "bpg"; repo = "terraform-provider-proxmox";