ci: storage VM moves to DHCP and is addressed by FQDN (2/2)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
goodolclint-claude[bot]
2026-08-31 20:54:14 +00:00
committed by GitHub
parent 25746a94e3
commit 59a47e3fab
+10 -16
View File
@@ -43,9 +43,9 @@
# MODULE_ARTIFACT Path to built module DLLs (default: ./publish/netstandard2.0) # MODULE_ARTIFACT Path to built module DLLs (default: ./publish/netstandard2.0)
# PVE_VERSIONS Space-separated versions to provision (default: "9"; "9 8" still works) # PVE_VERSIONS Space-separated versions to provision (default: "9"; "9 8" still works)
# STORAGE_ISCSI_IQN iSCSI IQN for storage target (default: iqn.2024-01.local.test:storage) # STORAGE_ISCSI_IQN iSCSI IQN for storage target (default: iqn.2024-01.local.test:storage)
# STORAGE_VM_IP Static CIDR address for the storage VM on the CI VLAN, # STORAGE_VM_FQDN DNS name of the storage VM; it boots via DHCP with
# outside the DHCP range (default: 172.16.60.60/24) # hostname pvetest-storage and must be resolvable from
# STORAGE_VM_GATEWAY Gateway + DNS for the storage VM (default: 172.16.60.1) # the runner and the CI VLAN (default: pvetest-storage.test.local)
# STORAGE_VMID VMID for the storage VM (default: 5080) # STORAGE_VMID VMID for the storage VM (default: 5080)
set -euo pipefail set -euo pipefail
@@ -66,10 +66,8 @@ MODULE_ARTIFACT="${MODULE_ARTIFACT:-$REPO_ROOT/publish/netstandard2.0}"
PVE_VERSIONS="${PVE_VERSIONS:-9}" PVE_VERSIONS="${PVE_VERSIONS:-9}"
SKIP_PROVISION="${SKIP_PROVISION:-false}" SKIP_PROVISION="${SKIP_PROVISION:-false}"
STORAGE_ISCSI_IQN="${STORAGE_ISCSI_IQN:-iqn.2024-01.local.test:storage}" STORAGE_ISCSI_IQN="${STORAGE_ISCSI_IQN:-iqn.2024-01.local.test:storage}"
STORAGE_VM_IP="${STORAGE_VM_IP:-172.16.60.60/24}" STORAGE_VM_FQDN="${STORAGE_VM_FQDN:-pvetest-storage.test.local}"
STORAGE_VM_GATEWAY="${STORAGE_VM_GATEWAY:-172.16.60.1}"
STORAGE_VMID="${STORAGE_VMID:-5080}" STORAGE_VMID="${STORAGE_VMID:-5080}"
STORAGE_VM_HOST="${STORAGE_VM_IP%%/*}"
# Keypair for SSH to the storage VM (cloud images refuse password SSH) # Keypair for SSH to the storage VM (cloud images refuse password SSH)
STORAGE_VM_SSH_KEY="${STORAGE_VM_SSH_KEY:-$WORK_DIR/storage-vm-key}" STORAGE_VM_SSH_KEY="${STORAGE_VM_SSH_KEY:-$WORK_DIR/storage-vm-key}"
# Must match CLOUD_IMAGE_FILENAME in ensure-cloud-images.sh # Must match CLOUD_IMAGE_FILENAME in ensure-cloud-images.sh
@@ -95,7 +93,7 @@ pve_iso() {
pve_auto_iso() { pve_auto_iso() {
local base local base
base="$(pve_iso "$1")" base="$(pve_iso "$1")"
echo "${base%.iso}-auto-${STORAGE_VM_HOST//./-}.iso" echo "${base%.iso}-auto-${STORAGE_VM_FQDN//./-}.iso"
} }
pve_vmid() { pve_vmid() {
@@ -224,7 +222,7 @@ cmd_provision() {
log "Starting provisioning..." log "Starting provisioning..."
log " Versions: $provision_versions" log " Versions: $provision_versions"
log " Nodes:$provision_nodes" log " Nodes:$provision_nodes"
log " Storage: dedicated VM at $STORAGE_VM_HOST (NFS + iSCSI + answer server)" log " Storage: dedicated VM at $STORAGE_VM_FQDN (NFS + iSCSI + answer server)"
require_env PVE_ENDPOINT require_env PVE_ENDPOINT
require_env PVE_API_TOKEN require_env PVE_API_TOKEN
require_env PVE_PASSWORD require_env PVE_PASSWORD
@@ -280,7 +278,7 @@ cmd_provision() {
log "Preparing HTTP auto-install ISO for PVE $v..." log "Preparing HTTP auto-install ISO for PVE $v..."
proxmox-auto-install-assistant prepare-iso \ proxmox-auto-install-assistant prepare-iso \
--fetch-from http \ --fetch-from http \
--url "http://${STORAGE_VM_HOST}:8000/answer" \ --url "http://${STORAGE_VM_FQDN}:8000/answer" \
--on-first-boot "$SCRIPT_DIR/first-boot.sh" \ --on-first-boot "$SCRIPT_DIR/first-boot.sh" \
--tmp "$WORK_DIR" \ --tmp "$WORK_DIR" \
--output "$generic_iso" \ --output "$generic_iso" \
@@ -348,8 +346,6 @@ cmd_provision() {
TF_VAR_target_node="$PVE_TARGET_NODE" \ TF_VAR_target_node="$PVE_TARGET_NODE" \
TF_VAR_test_vm_password="$PVE_PASSWORD" \ TF_VAR_test_vm_password="$PVE_PASSWORD" \
TF_VAR_cloud_image_path="$CLOUD_IMAGE_PATH" \ TF_VAR_cloud_image_path="$CLOUD_IMAGE_PATH" \
TF_VAR_storage_vm_ip="$STORAGE_VM_IP" \
TF_VAR_storage_vm_gateway="$STORAGE_VM_GATEWAY" \
TF_VAR_storage_vmid="$STORAGE_VMID" \ TF_VAR_storage_vmid="$STORAGE_VMID" \
TF_VAR_storage_vm_ssh_public_key="$(cat "${STORAGE_VM_SSH_KEY}.pub")" \ TF_VAR_storage_vm_ssh_public_key="$(cat "${STORAGE_VM_SSH_KEY}.pub")" \
terraform apply -auto-approve -input=false -state="$TF_STATE_FILE" -var-file="$tfvars" "$@") terraform apply -auto-approve -input=false -state="$TF_STATE_FILE" -var-file="$tfvars" "$@")
@@ -360,9 +356,9 @@ cmd_provision() {
-target=proxmox_virtual_environment_file.storage_cloud_image \ -target=proxmox_virtual_environment_file.storage_cloud_image \
-target=proxmox_virtual_environment_vm.storage -target=proxmox_virtual_environment_vm.storage
log "Configuring storage VM at $STORAGE_VM_HOST..." log "Configuring storage VM at $STORAGE_VM_FQDN..."
bash "$SCRIPT_DIR/setup-storage-server.sh" \ bash "$SCRIPT_DIR/setup-storage-server.sh" \
"$STORAGE_VM_HOST" "$STORAGE_VM_SSH_KEY" "$STORAGE_ISCSI_IQN" "$WORK_DIR/answer-server" "$STORAGE_VM_FQDN" "$STORAGE_VM_SSH_KEY" "$STORAGE_ISCSI_IQN" "$WORK_DIR/answer-server"
log "Running Terraform apply (PVE nodes)..." log "Running Terraform apply (PVE nodes)..."
local tf_targets="" local tf_targets=""
@@ -424,7 +420,7 @@ cmd_provision() {
config=$(jq \ config=$(jq \
--arg cloud_image "${CLOUD_IMAGE_PATH:-}" \ --arg cloud_image "${CLOUD_IMAGE_PATH:-}" \
--arg ova "${OVA_PATH:-}" \ --arg ova "${OVA_PATH:-}" \
--arg storage_ip "$STORAGE_VM_HOST" \ --arg storage_ip "$STORAGE_VM_FQDN" \
--arg storage_iqn "$STORAGE_ISCSI_IQN" \ --arg storage_iqn "$STORAGE_ISCSI_IQN" \
'. + { '. + {
storage: {ip: $storage_ip, iscsi_iqn: $storage_iqn, nfs_export: ($storage_ip + ":/srv/nfs/shared")}, storage: {ip: $storage_ip, iscsi_iqn: $storage_iqn, nfs_export: ($storage_ip + ":/srv/nfs/shared")},
@@ -661,8 +657,6 @@ cmd_cleanup() {
TF_VAR_proxmox_api_token="$PVE_API_TOKEN" \ TF_VAR_proxmox_api_token="$PVE_API_TOKEN" \
TF_VAR_target_node="$PVE_TARGET_NODE" \ TF_VAR_target_node="$PVE_TARGET_NODE" \
TF_VAR_test_vm_password="${PVE_PASSWORD:-placeholder}" \ TF_VAR_test_vm_password="${PVE_PASSWORD:-placeholder}" \
TF_VAR_storage_vm_ip="$STORAGE_VM_IP" \
TF_VAR_storage_vm_gateway="$STORAGE_VM_GATEWAY" \
TF_VAR_storage_vmid="$STORAGE_VMID" \ TF_VAR_storage_vmid="$STORAGE_VMID" \
terraform destroy -auto-approve -input=false -state="$TF_STATE_FILE" -var-file="$tfvars" $tf_targets) terraform destroy -auto-approve -input=false -state="$TF_STATE_FILE" -var-file="$tfvars" $tf_targets)