Add GPU/macvlan passthrough, container edit/update, image prune/tag
Create Container form: - GPU passthrough dropdown (AMD/Intel via /dev/dri detection, NVIDIA excluded since it needs a different runtime) - device paths strictly validated server-side against the host's own detected list. - Macvlan network support: selecting a macvlan network reveals a static IP field and hides port mappings (meaningless once the container has its own LAN address), matching Unraid Docker Manager's "Custom: br0" behavior. Networks panel gained a matching macvlan network-creation flow, with the parent-interface dropdown read from Unraid's own network.cfg so it lists exactly what Docker Manager itself offers. Containers panel: - Edit: reopens the create form pre-filled from the container's current config (image/ports/volumes/env/network/restart policy/GPU/static IP); saving stops+removes the old container and recreates it under the same settings, since podman/Docker have no in-place "modify" API for most of this. - Update: same stop/remove/recreate flow, but pulls the current image first. "Check for Updates" compares each in-use image's local digest against its origin registry (Docker Hub/GHCR/self-hosted registries all verified live) with no podman-side feature backing it - implemented via the registry's own HTTP API. A small log-modal shows progress for both actions instead of a silent wait. - Fixed a real bug hit live: PodmanClient's flat 15s HTTP timeout aborted real image pulls/container creates mid-request; bumped to 600s (nginx already allows up to 640s for this plugin's requests). Images panel: - "Prune unused" (removes every image with zero containers referencing it, not just dangling ones - confirmation copy says so explicitly since this is more aggressive than it sounds) and per-image "Tag". Also several real UI bugs found via live screenshots: unused-image prune having no visible effect until reloaded, table action-button columns drifting row to row (a bare "display:flex" on a <td> was fighting the table layout algorithm), Templates category badges dumping raw multi-tag strings from real Unraid templates, and low-contrast search/filter controls that were nearly invisible against the card background. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -185,7 +185,12 @@
|
||||
.podman-table-wrap { overflow-x: auto; }
|
||||
.podman-row-name { display: flex; align-items: center; gap: 10px; font-weight: 600; }
|
||||
.podman-row-name-btn {
|
||||
appearance: none; border: none; background: none; padding: 0; cursor: pointer;
|
||||
/* !important for the same reason as .podman-btn-ghost/-primary — Unraid's
|
||||
own site-wide button theme otherwise still shows its default border
|
||||
at rest (only losing to plain rules on hover), so a name link one
|
||||
click away from every table row still looked like a bordered button
|
||||
forever, not a plain label. */
|
||||
appearance: none; border: none !important; background: none !important; padding: 0; cursor: pointer;
|
||||
color: var(--text); font-family: var(--font-ui); font-size: 13px; text-align: left;
|
||||
}
|
||||
.podman-row-name-btn:hover { color: var(--accent-strong); }
|
||||
@@ -207,13 +212,47 @@
|
||||
.podman-actions { text-align: right; white-space: nowrap; }
|
||||
.podman-actions-row { display: inline-flex; gap: 4px; justify-content: flex-end; }
|
||||
|
||||
/*
|
||||
* Segmented toggle (Containers' All/Running/Stopped filter, Logs' Follow/
|
||||
* Paused) — previously just an inline-styled wrapper <div> around plain
|
||||
* <button>s with no CSS of their own at all, so every option (not just the
|
||||
* active one) showed Unraid's own default button border permanently,
|
||||
* all three chips looking identically "selected". !important for the same
|
||||
* site-wide-theme-override reason as .podman-btn-ghost/-primary.
|
||||
*/
|
||||
.podman-segmented { display: flex; gap: 2px; background: var(--surface-3); border: 1px solid var(--text-faint); padding: 3px; border-radius: 8px; }
|
||||
.podman-segmented button {
|
||||
appearance: none; border: none !important; background: transparent !important; color: var(--text-dim) !important;
|
||||
padding: 6px 12px; border-radius: 6px; font-size: 12px; font-weight: 700; cursor: pointer;
|
||||
font-family: var(--font-ui); transition: background .12s, color .12s;
|
||||
}
|
||||
.podman-segmented button:hover { color: var(--text) !important; }
|
||||
/* Filled with the accent color (not just a slightly different neutral
|
||||
shade) — the previous var(--surface) vs. var(--surface-2) contrast
|
||||
between active/inactive was too close in the dark theme to notice at a
|
||||
glance (found live). */
|
||||
.podman-segmented button.active { background: var(--accent) !important; color: var(--accent-contrast) !important; box-shadow: var(--shadow); }
|
||||
|
||||
.podman-usage-mini { display: flex; align-items: center; gap: 8px; min-width: 110px; }
|
||||
.podman-usage-mini .track { flex: 1; height: 5px; border-radius: 3px; background: var(--surface-3); overflow: hidden; }
|
||||
.podman-usage-mini .track > span { display: block; height: 100%; background: var(--accent); }
|
||||
.podman-usage-mini .num { font-size: 11.5px; color: var(--text-dim); width: 34px; text-align: right; }
|
||||
|
||||
.podman-toolbar { display: flex; align-items: center; gap: 10px; padding: 14px 18px; border-bottom: 1px solid var(--border); flex-wrap: wrap; }
|
||||
.podman-search { flex: 1; min-width: 180px; background: var(--surface-2); border: 1px solid var(--border); border-radius: 7px; padding: 7px 11px; font-size: 13px; color: var(--text); font-family: var(--font-ui); }
|
||||
/*
|
||||
* !important throughout: Unraid's own webGui/styles/default-base.css
|
||||
* targets input[type="text"] with an attribute selector (higher
|
||||
* specificity than our single .podman-search class, :where() around it
|
||||
* notwithstanding) forcing border-width:0 / border-bottom-width:1px /
|
||||
* background:transparent — an underline-only text field, not a boxed one.
|
||||
* Found live: our border/background were being silently dropped even
|
||||
* though this rule appears later in the stylesheet.
|
||||
*/
|
||||
.podman-search {
|
||||
flex: 1; min-width: 180px; max-width: 320px; font-size: 13px; color: var(--text); font-family: var(--font-ui);
|
||||
background: var(--surface-3) !important; border: 1px solid var(--text-faint) !important;
|
||||
border-radius: 7px !important; padding: 7px 11px !important;
|
||||
}
|
||||
.podman-search::placeholder { color: var(--text-faint); }
|
||||
|
||||
.podman-two-col { display: grid; grid-template-columns: 1.3fr 1fr; gap: 14px; align-items: start; }
|
||||
@@ -247,8 +286,18 @@
|
||||
}
|
||||
.podman-template-name { font-weight: 700; font-size: 13.5px; }
|
||||
.podman-template-overview { font-size: 12px; color: var(--text-dim); line-height: 1.4; }
|
||||
.podman-template-actions { display: flex; gap: 8px; margin-top: auto; padding-top: 4px; }
|
||||
.podman-template-actions .podman-btn { flex: 1; justify-content: center; padding: 6px 10px; font-size: 12px; }
|
||||
.podman-template-actions { display: flex; gap: 6px; margin-top: auto; padding-top: 4px; }
|
||||
/*
|
||||
* min-width: 0 overrides the flex-item default of min-width: auto, which
|
||||
* otherwise refuses to shrink a button below its own label's intrinsic
|
||||
* width — without it, "Delete" (the widest label, and uppercased by
|
||||
* Unraid's own site-wide button theme) pushed past the card's right edge
|
||||
* instead of actually sharing the row evenly with Use/Export (found live).
|
||||
*/
|
||||
.podman-template-actions .podman-btn {
|
||||
flex: 1; min-width: 0; justify-content: center; padding: 6px 8px; font-size: 11.5px;
|
||||
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.podman-local-template-list { max-height: 220px; overflow-y: auto; border: 1px solid var(--border); border-radius: 7px; margin-top: 8px; }
|
||||
.podman-local-template-item {
|
||||
|
||||
Reference in New Issue
Block a user