create-stateful-vm

Create VM, PXE boot, install Alpine to disk, set boot order, reboot from disk

v13174d77c7 steps

Steps

auth

Authenticate with Proxmox via keebDev02

keebDev02.auth
Configuration
apiUrl: https://10.0.0.4:8006
username: root
password: ${{ vault.get("proxmox-vault", "password") }}
realm: pam
node: keeb-dev-02
skipTlsVerify: true
create-vm

Create VM with persistent disk (PXE-first boot order)

fleet.create

← depends on: auth (on succeeded)

Configuration
apiUrl: https://10.0.0.4:8006
ticket: ${{ model.keebDev02.resource.node.node.attributes.ticket }}
csrfToken: ${{ model.keebDev02.resource.node.node.attributes.csrfToken }}
node: keeb-dev-02
skipTlsVerify: true
start-vm

Start VM (PXE boots into diskless Alpine)

fleet.start

← depends on: create-vm (on succeeded)

Configuration
apiUrl: https://10.0.0.4:8006
ticket: ${{ model.keebDev02.resource.node.node.attributes.ticket }}
csrfToken: ${{ model.keebDev02.resource.node.node.attributes.csrfToken }}
node: keeb-dev-02
skipTlsVerify: true
install-alpine

Install Alpine to disk via setup-alpine + post-install chroot

alpineInstaller.install

← depends on: start-vm (on succeeded)

Configuration
sshHost: ${{ model.fleet.resource.vm[inputs.vmName].attributes.ip }}
sshUser: root
set-boot-order

Set boot order to disk-first (scsi0 then net0)

fleet.setBootOrder

← depends on: install-alpine (on succeeded)

Configuration
apiUrl: https://10.0.0.4:8006
ticket: ${{ model.keebDev02.resource.node.node.attributes.ticket }}
csrfToken: ${{ model.keebDev02.resource.node.node.attributes.csrfToken }}
node: keeb-dev-02
skipTlsVerify: true
stop-vm

Stop VM before rebooting from disk

fleet.stop

← depends on: set-boot-order (on succeeded)

Configuration
apiUrl: https://10.0.0.4:8006
ticket: ${{ model.keebDev02.resource.node.node.attributes.ticket }}
csrfToken: ${{ model.keebDev02.resource.node.node.attributes.csrfToken }}
node: keeb-dev-02
skipTlsVerify: true
start-from-disk

Start VM from disk (boots installed Alpine, waits for IP)

fleet.start

← depends on: stop-vm (on succeeded)

Configuration
apiUrl: https://10.0.0.4:8006
ticket: ${{ model.keebDev02.resource.node.node.attributes.ticket }}
csrfToken: ${{ model.keebDev02.resource.node.node.attributes.csrfToken }}
node: keeb-dev-02
skipTlsVerify: true