Compare commits

..
Author SHA1 Message Date
community-scripts-pr-app[bot]andgithub-actions[bot] 25b9f5f8c7 Update CHANGELOG.md (#18356)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-31 21:30:12 +00:00
CanbiZ (MickLesk) 694f899575 Debian VM: keep a static IP without a snippets storage (#18346)
The MAC-matched network snippet is a workaround for Ubuntu 26.04's NIC rename. Without a storage for snippets the run failed after the VM was built; Debian now keeps the static ipconfig0 Proxmox already set, as it did before September.
2026-10-31 22:29:45 +01:00
community-scripts-pr-app[bot]andgithub-actions[bot] b9a2d39851 Update CHANGELOG.md (#18355)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-31 21:14:13 +00:00
CanbiZ (MickLesk) bcb72dc9b8 Ubuntu VM: check for a snippets storage before building a static-IP VM (#18347)
Ubuntu 26.04 needs the MAC-matched network snippet, and without a storage for snippets the run failed only after the VM was created. It now stops before downloading the image.
2026-10-31 22:13:45 +01:00
community-scripts-pr-app[bot]andgithub-actions[bot] e65ff59c97 Update CHANGELOG.md (#18354)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-31 20:52:06 +00:00
CanbiZ (MickLesk) f4388eacb3 Docker VM: take the imported disk from vm_import_disk (#18341)
Same parser as haos-vm: PVE 9.2's import message and the pvesm fallback both missed the new volume.
2026-10-31 21:51:31 +01:00
community-scripts-pr-app[bot]andgithub-actions[bot] 33f8cd35cd Update CHANGELOG.md (#18353)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-31 20:46:32 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] d19be124e4 Update CHANGELOG.md (#18351)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-31 20:46:11 +00:00
CanbiZ (MickLesk) a03b9d6471 Twenty: move to Node.js 26 (#18337)
Twenty v2.54 requires node ^26.5.1 and yarn install refuses Node 24.
2026-10-31 21:46:03 +01:00
CanbiZ (MickLesk) 5598553755 Norish: fetch Obscura from the repo Norish pins (#18338)
* Norish: fetch Obscura from the repo Norish pins

Norish now builds Obscura from norish-recipes/obscura (pin.env OBSCURA_REPO); the v0.2.5-norish.1 tag does not exist in h4ckf0r0day/obscura, so installs and updates stopped with a GitHub 404.

* Norish: run the v0.26 server on Node.js 26

v0.26.0 dropped dist-server and starts with node --import tsx server/index.ts from apps/web, and requires Node 26. Updates rewrite the unit.
2026-10-31 21:45:48 +01:00
community-scripts-pr-app[bot]andgithub-actions[bot] ff9dabb4f4 Update CHANGELOG.md (#18350)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-31 20:45:02 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] fa4d0d1ede Update CHANGELOG.md (#18349)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-31 20:44:39 +00:00
CanbiZ (MickLesk) 507d70ad57 HAOS VM: take the imported disk from vm_import_disk (#18342)
PVE 9.2 reports the import as 'Successfully imported disk as unused0:...', which the local parser missed, and its pvesm fallback matched the VMID column, so imports on local-zfs ended in 'Unable to determine imported disk reference'.
2026-10-31 21:44:33 +01:00
CanbiZ (MickLesk) 5e78d293e6 Aurral: build the pnpm workspace and run backend/server.ts (#18340)
* Aurral: build the pnpm workspace and run backend/server.ts

v2.12.0 moved from npm workspaces to pnpm and the backend entry to server.ts, so npm ci --workspace frontend found no workspace. Updates point existing units at server.ts.

* Aurral: install only the frontend and backend packages

The workspace root's prepare script runs vp config, which needs git; the upstream image filters the install to the two packages as well.

* Aurral: install git for the workspace prepare script

The root prepare script runs vp config, which aborts when git is missing and only notes the absent .git directory otherwise.
2026-10-31 21:44:15 +01:00
CanbiZ (MickLesk) 35de3d31cd PS5-MQTT: build the yarn workspace and run the packaged server (#18339)
* PS5-MQTT: build the yarn workspace and run the packaged server

v1.8.0 turned the repo into a yarn 4 workspace with Plug'n'Play: ps5-mqtt/package.json is gone and npm install there fails. The server now runs from the packaged tree with its own node_modules, as upstream's image does; updates move the unit's working directory.

* PS5-MQTT: give the build 2 GB of RAM

Building the client and server bundles with rspack is killed by the OOM killer at 512 MB.
2026-10-31 21:44:09 +01:00
community-scripts-pr-app[bot]andgithub-actions[bot] 08f9c31c92 Update CHANGELOG.md (#18345)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-31 18:55:37 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 9d364c3d4e Update CHANGELOG.md (#18344)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-31 18:53:41 +00:00
community-scripts-pr-app[bot]andgithub-actions[bot] 8a5daca0ed Update CHANGELOG.md (#18343)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-31 18:52:21 +00:00
11 changed files with 65 additions and 66 deletions

No files matched your search

+17
View File
@@ -574,6 +574,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### 🐞 Bug Fixes
- Docker VM: take the imported disk from vm_import_disk [@MickLesk](https://github.com/MickLesk) ([#18341](https://github.com/community-scripts/ProxmoxVE/pull/18341))
- Twenty: move to Node.js 26 [@MickLesk](https://github.com/MickLesk) ([#18337](https://github.com/community-scripts/ProxmoxVE/pull/18337))
- Norish: fetch Obscura from the repo Norish pins [@MickLesk](https://github.com/MickLesk) ([#18338](https://github.com/community-scripts/ProxmoxVE/pull/18338))
- HAOS VM: take the imported disk from vm_import_disk [@MickLesk](https://github.com/MickLesk) ([#18342](https://github.com/community-scripts/ProxmoxVE/pull/18342))
- Aurral: build the pnpm workspace and run backend/server.ts [@MickLesk](https://github.com/MickLesk) ([#18340](https://github.com/community-scripts/ProxmoxVE/pull/18340))
- PS5-MQTT: build the yarn workspace and run the packaged server [@MickLesk](https://github.com/MickLesk) ([#18339](https://github.com/community-scripts/ProxmoxVE/pull/18339))
- Jellyseerr, Overseerr, Paperless-ngx, Vikunja: skip migration prompts when unattended [@florianpunz](https://github.com/florianpunz) ([#18321](https://github.com/community-scripts/ProxmoxVE/pull/18321))
- Discourse: track the Ruby version Discourse requires [@MickLesk](https://github.com/MickLesk) ([#18329](https://github.com/community-scripts/ProxmoxVE/pull/18329))
@@ -581,6 +587,17 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- MatterJS-Server: Add time sync [@tomfrenzel](https://github.com/tomfrenzel) ([#18330](https://github.com/community-scripts/ProxmoxVE/pull/18330))
- #### 🔧 Refactor
- Debian VM: keep a static IP without a snippets storage [@MickLesk](https://github.com/MickLesk) ([#18346](https://github.com/community-scripts/ProxmoxVE/pull/18346))
- Ubuntu VM: check for a snippets storage before building a static-IP VM [@MickLesk](https://github.com/MickLesk) ([#18347](https://github.com/community-scripts/ProxmoxVE/pull/18347))
### 💾 Core
- feat: add setup_java_memory: size Java services from the CT's RAM on Proxmox [@MickLesk](https://github.com/MickLesk) ([core#181](https://github.com/community-scripts/core/pull/181))
- analytics: name the Proxmox tasks when a container stops mid-install [@MickLesk](https://github.com/MickLesk) ([core#184](https://github.com/community-scripts/core/pull/184))
- PVE: do not abort when the spinner PID file cannot be written [@MickLesk](https://github.com/MickLesk) ([core#183](https://github.com/community-scripts/core/pull/183))
### 📂 Github
- Drop the legacy engine copies from misc/ [@MickLesk](https://github.com/MickLesk) ([#18294](https://github.com/community-scripts/ProxmoxVE/pull/18294))
+6 -7
View File
@@ -37,19 +37,16 @@ function update_script() {
msg_ok "Stopped Service"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "aurral" "lklynet/aurral" "tarball"
NODE_VERSION="26" setup_nodejs
NODE_VERSION="26" NODE_MODULE="pnpm" setup_nodejs
ensure_dependencies git
msg_info "Updating Aurral"
cd /opt/aurral
export VITE_APP_VERSION="$(cat ~/.aurral)"
export VITE_GITHUB_REPO="lklynet/aurral"
export VITE_RELEASE_CHANNEL="stable"
# aurral's .npmrc sets engine-strict=true and pins an exact node patch (e.g. 26.8.x),
# which NodeSource can't match since it only ships the latest patch per major.
export npm_config_engine_strict=false
$STD npm ci --workspace frontend --include-workspace-root=false
$STD npm run build --workspace frontend
$STD npm ci --workspace backend --omit=dev --include=optional --include-workspace-root=false
$STD pnpm install --frozen-lockfile --config.engine-strict=false --filter aurral-frontend --filter aurral-backend
$STD pnpm --filter aurral-frontend run build
mkdir -p /opt/aurral_data
cat <<EOF >/opt/aurral/aurral.env
NODE_ENV=production
@@ -57,6 +54,8 @@ PORT=3001
AURRAL_DATA_DIR=/opt/aurral_data
APP_VERSION=$(cat ~/.aurral)
EOF
sed -i 's#backend/server.js#backend/server.ts#' /etc/systemd/system/aurral.service
systemctl daemon-reload
msg_ok "Updated Aurral"
msg_info "Starting Service"
+4 -2
View File
@@ -37,9 +37,9 @@ function update_script() {
msg_ok "Stopped Norish"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "norish" "norish-recipes/norish" "tarball"
NODE_VERSION="22" NODE_MODULE="pnpm@$(jq -r '.packageManager | split("@")[1]' /opt/norish/package.json)" setup_nodejs
NODE_VERSION="26" NODE_MODULE="pnpm@$(jq -r '.packageManager | split("@")[1]' /opt/norish/package.json)" setup_nodejs
PYTHON_VERSION="3.14" setup_uv
fetch_and_deploy_gh_release "obscura" "h4ckf0r0day/obscura" "prebuild" "v$(sed -n 's/^OBSCURA_VERSION=//p' /opt/norish/docker/obscura/pin.env)" "/opt/obscura" "obscura-$(arch_resolve "x86_64" "aarch64")-linux-stealth.tar.gz"
fetch_and_deploy_gh_release "obscura" "$(sed -n 's#^OBSCURA_REPO=https://github.com/##p' /opt/norish/docker/obscura/pin.env)" "prebuild" "v$(sed -n 's/^OBSCURA_VERSION=//p' /opt/norish/docker/obscura/pin.env)" "/opt/obscura" "obscura-$(arch_resolve "x86_64" "aarch64")-linux-stealth.tar.gz"
fetch_and_deploy_gh_release "yt-dlp" "yt-dlp/yt-dlp" "singlefile" "latest" "/usr/local/bin" "$(arch_resolve "yt-dlp_linux" "yt-dlp_linux_aarch64")"
msg_info "Building Norish"
@@ -48,6 +48,8 @@ function update_script() {
$STD uv sync --project /opt/norish/apps/parser-api --locked
NODE_ENV=production SKIP_ENV_VALIDATION=1 NEXT_TELEMETRY_DISABLED=1 $STD pnpm turbo run build --filter "@norish/web"
rm -rf /opt/norish/apps/web/.next/cache /opt/norish/apps/web/.next/standalone
sed -i -e "s|^WorkingDirectory=.*|WorkingDirectory=/opt/norish/apps/web|" -e "s|^ExecStart=.*|ExecStart=/usr/bin/node --import tsx server/index.ts|" /etc/systemd/system/norish.service
systemctl daemon-reload
msg_ok "Built Norish"
msg_info "Starting Norish"
+9 -5
View File
@@ -9,7 +9,7 @@ source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_
APP="PS5-MQTT"
var_tags="${var_tags:-smarthome;automation}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-3}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
@@ -37,12 +37,16 @@ function update_script() {
systemctl stop ps5-mqtt
msg_ok "Stopped service"
fetch_and_deploy_gh_release "ps5-mqtt" "FunkeyFlo/ps5-mqtt" "tarball"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "ps5-mqtt" "FunkeyFlo/ps5-mqtt" "tarball"
msg_info "Configuring ${APP}"
cd /opt/ps5-mqtt/ps5-mqtt/
$STD npm install
$STD npm run build
cd /opt/ps5-mqtt
$STD corepack yarn install --immutable
$STD env PREPARE_ONLY=1 corepack yarn workspace @ps5-mqtt/server run package
cd /opt/ps5-mqtt/ps5-mqtt/server/.packaged/server
$STD npm install --omit=dev --omit=optional
sed -i 's|^WorkingDirectory=.*|WorkingDirectory=/opt/ps5-mqtt/ps5-mqtt/server/.packaged|' /etc/systemd/system/ps5-mqtt.service
systemctl daemon-reload
msg_ok "Configured ${APP}"
msg_info "Starting service"
+5 -8
View File
@@ -16,13 +16,14 @@ update_os
msg_info "Installing Dependencies"
$STD apt install -y \
build-essential \
git \
python3 \
ffmpeg \
fontconfig \
fonts-dejavu-core
msg_ok "Installed Dependencies"
NODE_VERSION="26" setup_nodejs
NODE_VERSION="26" NODE_MODULE="pnpm" setup_nodejs
fetch_and_deploy_gh_release "yt-dlp" "yt-dlp/yt-dlp" "singlefile" "latest" "/usr/local/bin" "yt-dlp"
fetch_and_deploy_gh_release "aurral" "lklynet/aurral" "tarball"
@@ -32,12 +33,8 @@ cd /opt/aurral
export VITE_APP_VERSION="$(cat ~/.aurral)"
export VITE_GITHUB_REPO="lklynet/aurral"
export VITE_RELEASE_CHANNEL="stable"
# aurral's .npmrc sets engine-strict=true and pins an exact node patch (e.g. 26.8.x),
# which NodeSource can't match since it only ships the latest patch per major.
export npm_config_engine_strict=false
$STD npm ci --workspace frontend --include-workspace-root=false
$STD npm run build --workspace frontend
$STD npm ci --workspace backend --omit=dev --include=optional --include-workspace-root=false
$STD pnpm install --frozen-lockfile --config.engine-strict=false --filter aurral-frontend --filter aurral-backend
$STD pnpm --filter aurral-frontend run build
msg_ok "Built Aurral"
msg_info "Creating Service"
@@ -58,7 +55,7 @@ Type=simple
User=root
WorkingDirectory=/opt/aurral
EnvironmentFile=/opt/aurral/aurral.env
ExecStart=/usr/bin/node backend/server.js
ExecStart=/usr/bin/node backend/server.ts
Restart=on-failure
RestartSec=5
+4 -4
View File
@@ -22,8 +22,8 @@ PG_DB_NAME="norish" PG_DB_USER="norish" setup_postgresql_db
PYTHON_VERSION="3.14" setup_uv
fetch_and_deploy_gh_release "norish" "norish-recipes/norish" "tarball"
NODE_VERSION="22" NODE_MODULE="pnpm@$(jq -r '.packageManager | split("@")[1]' /opt/norish/package.json)" setup_nodejs
fetch_and_deploy_gh_release "obscura" "h4ckf0r0day/obscura" "prebuild" "v$(sed -n 's/^OBSCURA_VERSION=//p' /opt/norish/docker/obscura/pin.env)" "/opt/obscura" "obscura-$(arch_resolve "x86_64" "aarch64")-linux-stealth.tar.gz"
NODE_VERSION="26" NODE_MODULE="pnpm@$(jq -r '.packageManager | split("@")[1]' /opt/norish/package.json)" setup_nodejs
fetch_and_deploy_gh_release "obscura" "$(sed -n 's#^OBSCURA_REPO=https://github.com/##p' /opt/norish/docker/obscura/pin.env)" "prebuild" "v$(sed -n 's/^OBSCURA_VERSION=//p' /opt/norish/docker/obscura/pin.env)" "/opt/obscura" "obscura-$(arch_resolve "x86_64" "aarch64")-linux-stealth.tar.gz"
fetch_and_deploy_gh_release "yt-dlp" "yt-dlp/yt-dlp" "singlefile" "latest" "/usr/local/bin" "$(arch_resolve "yt-dlp_linux" "yt-dlp_linux_aarch64")"
msg_info "Building Norish"
@@ -75,9 +75,9 @@ Wants=obscura.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/norish
WorkingDirectory=/opt/norish/apps/web
EnvironmentFile=/opt/norish_data/.env
ExecStart=/usr/bin/node /opt/norish/dist-server/index.mjs
ExecStart=/usr/bin/node --import tsx server/index.ts
Restart=on-failure
RestartSec=5
+6 -4
View File
@@ -23,9 +23,11 @@ NODE_VERSION="24" NODE_MODULE="playactor" setup_nodejs
fetch_and_deploy_gh_release "ps5-mqtt" "FunkeyFlo/ps5-mqtt" "tarball"
msg_info "Configuring PS5-MQTT"
cd /opt/ps5-mqtt/ps5-mqtt/
$STD npm install
$STD npm run build
cd /opt/ps5-mqtt
$STD corepack yarn install --immutable
$STD env PREPARE_ONLY=1 corepack yarn workspace @ps5-mqtt/server run package
cd /opt/ps5-mqtt/ps5-mqtt/server/.packaged/server
$STD npm install --omit=dev --omit=optional
mkdir -p /opt/.config/ps5-mqtt/
mkdir -p /opt/.config/ps5-mqtt/playactor
cat <<EOF >/opt/.config/ps5-mqtt/config.json
@@ -66,7 +68,7 @@ Description=PS5-MQTT Daemon
After=syslog.target network.target
[Service]
WorkingDirectory=/opt/ps5-mqtt/ps5-mqtt
WorkingDirectory=/opt/ps5-mqtt/ps5-mqtt/server/.packaged
Environment="CONFIG_PATH=/opt/.config/ps5-mqtt/config.json"
Environment="DEBUG='@ha:ps5:*'"
Restart=always
+4 -1
View File
@@ -191,7 +191,10 @@ if [ "$USE_CLOUD_INIT" == "yes" ] && declare -f setup_cloud_init >/dev/null 2>&1
"${CLOUDINIT_GW:-}" \
"${CLOUDINIT_DNS:-${CLOUDINIT_DNS_SERVERS:-1.1.1.1 8.8.8.8}}"
if [[ "${CLOUDINIT_NETWORK_MODE:-dhcp}" == "static" ]]; then
if [[ "${CLOUDINIT_NETWORK_MODE:-dhcp}" == "static" && -z "${CLOUDINIT_SNIPPET_STORAGE:-}" ]] &&
! pvesm status -content snippets 2>/dev/null | awk 'NR > 1 && $3 == "active" {found = 1} END {exit !found}'; then
msg_warn "No storage with 'snippets' content: the static IP uses Proxmox's own cloud-init network config"
elif [[ "${CLOUDINIT_NETWORK_MODE:-dhcp}" == "static" ]]; then
setup_cloud_init_network_no_rename \
"$VMID" \
"$MAC" \
+2 -19
View File
@@ -391,24 +391,7 @@ msg_ok "Created VM shell"
# ==============================================================================
# DISK IMPORT
# ==============================================================================
msg_info "Importing disk into storage ($STORAGE)"
if qm disk import --help >/dev/null 2>&1; then
IMPORT_CMD=(qm disk import)
else
IMPORT_CMD=(qm importdisk)
fi
IMPORT_OUT="$("${IMPORT_CMD[@]}" "$VMID" "$WORK_FILE" "$STORAGE" ${DISK_IMPORT:-} 2>&1 || true)"
DISK_REF_IMPORTED="$(printf '%s\n' "$IMPORT_OUT" | sed -n "s/.*successfully imported disk '\([^']\+\)'.*/\1/p" | tr -d "\r\"'")"
[[ -z "$DISK_REF_IMPORTED" ]] && DISK_REF_IMPORTED="$(pvesm list "$STORAGE" | awk -v id="$VMID" '$5 ~ ("vm-"id"-disk-") {print $1":"$5}' | sort | tail -n1)"
[[ -z "$DISK_REF_IMPORTED" ]] && {
msg_error "Unable to determine imported disk reference."
echo "$IMPORT_OUT"
exit 226
}
msg_ok "Imported disk (${CL}${BL}${DISK_REF_IMPORTED}${CL})"
vm_import_disk "$VMID" "$WORK_FILE" "$STORAGE" "${DISK_IMPORT#--format }" || exit 226
# Clean up work file
rm -f "$WORK_FILE"
@@ -420,7 +403,7 @@ msg_info "Attaching EFI and root disk"
qm set "$VMID" \
--efidisk0 "${STORAGE}:0,efitype=4m" \
--scsi0 "${DISK_REF_IMPORTED},${DISK_CACHE}${THIN%,}" \
--scsi0 "${VM_IMPORTED_DISK},${DISK_CACHE}${THIN%,}" \
--boot order=scsi0 \
--serial0 socket >/dev/null
+2 -16
View File
@@ -128,28 +128,14 @@ msg_ok "Created VM shell"
vm_extract_image "$CACHE_FILE" || exit 115
FILE_IMG="$VM_IMAGE_FILE"
msg_info "Importing disk into storage ($STORAGE)"
if qm disk import --help >/dev/null 2>&1; then
IMPORT_CMD=(qm disk import)
else
IMPORT_CMD=(qm importdisk)
fi
IMPORT_OUT="$("${IMPORT_CMD[@]}" "$VMID" "$FILE_IMG" "$STORAGE" --format raw 2>&1 || true)"
DISK_REF="$(printf '%s\n' "$IMPORT_OUT" | sed -n "s/.*successfully imported disk '\([^']\+\)'.*/\1/p" | tr -d "\r\"'")"
[[ -z "$DISK_REF" ]] && DISK_REF="$(pvesm list "$STORAGE" | awk -v id="$VMID" '$5 ~ ("vm-"id"-disk-") {print $1":"$5}' | sort | tail -n1)"
[[ -z "$DISK_REF" ]] && {
msg_error "Unable to determine imported disk reference."
echo "$IMPORT_OUT"
exit 226
}
msg_ok "Imported disk (${CL}${BL}${DISK_REF}${CL})"
vm_import_disk "$VMID" "$FILE_IMG" "$STORAGE" raw || exit 226
rm -f "$FILE_IMG"
msg_info "Attaching EFI and root disk"
qm set $VMID \
--efidisk0 ${STORAGE}:0,efitype=4m \
--scsi0 ${DISK_REF},${DISK_CACHE}ssd=1,discard=on \
--scsi0 ${VM_IMPORTED_DISK},${DISK_CACHE}ssd=1,discard=on \
--boot order=scsi0 \
--serial0 socket >/dev/null
qm set $VMID --agent enabled=1 >/dev/null
+6
View File
@@ -130,6 +130,12 @@ vm_prompt_cloud_init "ubuntu"
if [ "$USE_CLOUD_INIT" != "yes" ]; then
msg_warn "Without Cloud-Init this Ubuntu image gets no network configuration or credentials; configure them in the guest yourself."
fi
if [[ "$USE_CLOUD_INIT" == "yes" && "${CLOUDINIT_NETWORK_MODE:-dhcp}" == "static" && -z "${CLOUDINIT_SNIPPET_STORAGE:-}" ]] &&
! pvesm status -content snippets 2>/dev/null | awk 'NR > 1 && $3 == "active" {found = 1} END {exit !found}'; then
msg_error "A static IP needs a storage with 'snippets' content, and none is active"
msg_warn "Enable Snippets under Datacenter > Storage on a directory storage, or choose DHCP"
exit 1
fi
post_to_api_vm
vm_select_storage "$HN"
vm_define_disk_references 2