-
released this
2026-09-21 12:19:48 +00:00 | 24 commits to main since this releaseOverview
Storage management across the board — a new Storage Pools page (pool inventory, available
disks, pool creation) plus custom volume create/attach from both the Storage Volumes page and
the instance menu — a round of static-IP fixes that simplified instance networking, and reliable
System deletion with a new type-to-confirm safety gate. This release includes everything
previously shipped piecemeal as the0.5.4-betaand0.5.5-betaimages since v0.5.2.New Features
Storage Pools Page
- New top-level Storage Pools page: pick a system to see its configured pools (driver,
usage bars) alongside the physical disks that are free for new pools (Available Disks). - New:
POST /api/systems/{id}/storage-pools— admins can create a storage pool from an
available source (403 for non-admins). Backed byGET /{id}/storage-pools(configured) and
GET /{id}/storage-pools/available(unconfigured disks from host resources).
Create Custom Storage Volumes
- New:
POST /api/systems/{id}/storage-pools/{pool}/volumescreates a filesystem custom volume
(name + size, e.g.10GiB). Gated to admin/tenant_admin, validates the name and size format, and
checks pool free space before creating (400 on insufficient capacity, 502 on Incus errors). - UI: A Create Volume button on the Storage Volumes page (admin/tenant_admin) opens a modal
to pick system, pool, name, and size.
Attach Existing / New Volumes to Instances
- New:
POST /api/systems/{id}/instances/{name}/storage/attachattaches an existing custom
volume as a disk device on a container or VM (admin, tenant admin, or instance owner). - UI: The instance Attach Storage modal now has modes: Storage Template (as before),
Existing Volume (pool → volume → mount point), and New Volume for admins (creates the
volume then attaches it in one action). With no templates available the modal opens in
Existing Volume mode.
Bug Fixes
Static IP during instance creation failed with "Unsupported device type"
- Fixed: Creating a container with a static IP (modal Network Configuration) against a profile
whose NIC usesnictype: bridged/parent:(ornetwork:) failed with:
Invalid devices: Device validation failed for "eth0": Failed loading device "eth0": Unsupported device type. - Root cause: The static-IP NIC override submitted to Incus only carried
type,name, and
the IP keys. Incus validates the submitted device before applying profile overrides, so a NIC
without aparent/networkreference has no determinable device type and is rejected. - Fix: The override now inherits the profile NIC's base keys (
nictype/parentornetwork)
before the IP keys are applied. - Fixed (follow-up): Containers with a static IP then failed to start with
Failed to start device "eth0": "ipv4.gateway" is only supported on OCI containers. Incus only
acceptsipv4.gatewayon a NIC for OCI app containers — system containers/VMs must get the
gateway from the managed network's DHCP or configure it inside the guest. The API now never
submitsipv4.gateway(the deprecatedipv4_gatewayfield is accepted but ignored). - Removed: The Network Configuration section (static IP / gateway inputs) is gone from the
Create Instance modal. Containers now simply boot with DHCP from their network (managed = Incus
DHCP, unmanaged bridge = LAN router DHCP); pin addresses with a router DHCP reservation or
guest-side netplan. Thenetwork_configAPI field remains for managed-network use.
"Failed to delete system" when removing a registered host
- Fixed: Deleting a system from the Systems page failed with a generic error whenever the
system had any activity history.delete_systemonly cleaned up four tables, while six others
hold non-cascade foreign keys to it (audit_logs,background_tasks,storage_templates,
local_images,federated_instances,console_tokens), so the database rejected the delete. - Fix: The endpoint now runs in a single transaction: audit log and background task history
are preserved (detached from the deleted system; the activity log keeps its system name),
and all system-scoped artifacts (templates, attachments, local image records, federated
instances, console tokens) are removed. This makes it possible to cleanly delete a system whose
Incus host no longer exists. - UI: The delete error toast now shows the server's error detail instead of only a generic
message.
System deletion now requires confirmation by name
- Safety: Deleting a system now requires typing the system name to confirm (same pattern as
instance Destroy) — the Delete button stays disabled until the name matches exactly, preventing
accidental removal of the wrong host.
Technical Changes
backend/app/api/systems.py: addedcreate_storage_pool,create_storage_pool_volumeand
attach_existing_volumeendpoints;delete_systemnow performs transactional cleanup of all FK
dependents (history preserved);create_system_instancestatic-IP handling now merges profile
NIC base keys and never submitsipv4.gateway.backend/app/services/incus.py: addedcreate_storage_pool()connector method.backend/app/utils/human.py: addedparse_size_to_bytes()size-string parser.frontend/src/views/StoragePoolsView.vue: new pools + available-disks page with admin pool
creation.frontend/src/components/CreateStorageVolumeModal.vue: new shared create-volume modal.frontend/src/views/StorageVolumesView.vue: Create Volume button (role-gated).frontend/src/views/InstancesView.vue,SystemInstancesView.vue: multi-mode Attach Storage modal.frontend/src/views/SystemsView.vue: type-to-confirm delete modal (replaces the plain confirm).frontend/src/components/CreateInstanceModal.vue: Network Configuration section removed
(~200 lines of NIC/IP/gateway inputs, validation, and conflict checks).
Breaking Changes
- None at the database or authentication level. The instance-create UI no longer offers static
IP entry (thenetwork_configAPI field andcheck-ipendpoint remain, API-only); the
deprecatedipv4_gatewayfield innetwork_configis now accepted but ignored.
Upgrade Notes
- No migration required. Pull the new Docker image (
bmcgonag/incus-commander:0.5.5or
latest) and restart the container. - Hard-refresh the browser (Ctrl+Shift+R) after upgrading to pick up the new frontend build.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- New top-level Storage Pools page: pick a system to see its configured pools (driver,