Skip to content

Commit

Permalink
storaged: filter podman btrfs subvolumes
Browse files Browse the repository at this point in the history
Podman btrfs subvolumes are an implementation detail of podman and not
interesting for a Cockpit user in the storage page.

Closes: #20912
  • Loading branch information
jelly committed Aug 30, 2024
1 parent 188e1b5 commit 5d76bf8
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
8 changes: 7 additions & 1 deletion pkg/storaged/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -248,12 +248,18 @@ export async function btrfs_poll() {
for (const line of output.split("\n")) {
const m = line.match(/ID (\d+).*parent (\d+).*parent_uuid (.*)uuid (.*) path (<FS_TREE>\/)?(.*)/);
if (m) {
const pathname = m[6];
// Ignore podman btrfs subvolumes, they are an implementation detail.
if (pathname.includes("containers/storage/btrfs/subvolumes")) {
continue;
}

// The parent uuid is the uuid of which this subvolume is a snapshot.
// https://github.com/torvalds/linux/blob/8d025e2092e29bfd13e56c78e22af25fac83c8ec/include/uapi/linux/btrfs.h#L885
let parent_uuid = m[3].trim();
// BTRFS_UUID_SIZE is 16
parent_uuid = parent_uuid.length < 16 ? null : parent_uuid;
subvols.push({ pathname: m[6], id: Number(m[1]), parent: Number(m[2]), uuid: m[4], parent_uuid });
subvols.push({ pathname, id: Number(m[1]), parent: Number(m[2]), uuid: m[4], parent_uuid });
}
}
uuids_subvols[uuid] = subvols;
Expand Down
15 changes: 15 additions & 0 deletions test/verify/check-storage-btrfs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,21 @@ class TestStorageBtrfs(storagelib.StorageCase):
b.go("#/")
b.wait_visible(self.card("Storage"))

# podman subvolumes are hidden, Cockpit hides everything matching "containers/storage/btrfs/subvolumes"
m.execute(f"""
mkdir -p /run/kitchen/containers/storage/btrfs/subvolumes
btrfs subvolume create /run/kitchen/containers/storage/btrfs/subvolumes/containername
mkdir -p /run/kitchen/.local/share/containers/storage/btrfs/subvolumes
btrfs subvolume create /run/kitchen/.local/share/containers/storage/btrfs/subvolumes/grafana
btrfs subvolume create {subvol_mount_point}/pancake
""")

b.wait_in_text(self.card_row("Storage", name="pancake"), "btrfs subvolume")
b.wait_not_in_text("div[data-test-card-title='Storage']", "containername")
b.wait_not_in_text("div[data-test-card-title='Storage']", "grafana")

# mount outside of fstab, should be cleaned up when re-formatting
m.execute(f"""
btrfs subvolume create {mount_point}/nonfstab
Expand Down

0 comments on commit 5d76bf8

Please sign in to comment.