* filesystem: fix bcachefs get_fs_size() for new bcachefs-tools output format (#12259)
* filesystem: fix ruff formatting and enable bcachefs UUID tests
Fix ruff format violations (spaces around ** operators, single-quoted
regex string) and set bcachefs new_uuid to 'random' since it supports
UUID setting via -U/--uuid, fixing the set_fs_uuid_on_creation test
assertion failure on Arch Linux.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* filesystem: skip reset_fs_uuid test for bcachefs
bcachefs supports UUID at creation (-U/--uuid) but has no CHANGE_UUID
tool for resetting UUID on existing filesystems, so skip the
reset_fs_uuid test to avoid a get_bin_path(None) crash.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* filesystem: address review comments on bcachefs size parsing
* changelog: correct bcachefs-tools version to v1.38.4
The output format change (commit e635903b95) first appeared in
bcachefs-tools v1.38.4, not v1.37.0.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* changelog: add PR link to changelog fragment
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(filesystem): handle BusyBox blkid output when detecting existing filesystem
BusyBox blkid ignores util-linux -o/-s flags and outputs the full device
info line instead of just the filesystem type. Parse the TYPE= field from
the raw output when it does not look like a plain type name.
Fixes#7283
* changelog: add fragment for PR 12235
* Make all doc fragments private.
* Make all plugin utils private.
* Make all module utils private.
* Reformat.
* Changelog fragment.
* Update configs and ignores.
* Adjust unit test names.
* ensure standard locale in run_command (group3-batch1)
* add changelog frag
* fix changelog fragment: bugfixes, not minor_changes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix changelog fragment: American English, separate code spans per variable
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Internally XFS uses allocation groups. Allocation groups have a maximum
size of 1 TiB - 1 block. For devices >= 4 TiB XFS uses max size
allocation groups. If a filesystem is extended and the last allocation
group is already at max size, a new allocation group is added. An
allocation group seems to require at least 64 4 KiB blocks.
For devices with integer TiB size (>4), this creates a filesystem that
has initially has 1 unused block per TiB size. The `resize` option
detects this unused space, and tries to resize the filesystem. The
xfs_growfs call is successful (exit 0), but does not increase the file
system size. This is detected as repeated change in the task.
Test case:
```
- hosts: localhost
tasks:
- ansible.builtin.command:
cmd: truncate -s 4T /media/xfs.img
creates: /media/xfs.img
notify: loopdev xfs
- ansible.builtin.meta: flush_handlers
- name: pickup xfs.img resize
ansible.builtin.command:
cmd: losetup -c /dev/loop0
changed_when: false
- community.general.filesystem:
dev: "/dev/loop0"
fstype: "xfs"
- ansible.posix.mount:
src: "/dev/loop0"
fstype: "xfs"
path: "/media/xfs"
state: "mounted"
# always shows a diff even for newly created filesystems
- community.general.filesystem:
dev: "/dev/loop0"
fstype: "xfs"
resizefs: true
handlers:
- name: loopdev xfs
ansible.builtin.command:
cmd: losetup /dev/loop0 /media/xfs.img
```
NB: If the last allocation group is not yet at max size, the filesystem
can be resized. Detecting this requires considering the XFS topology.
Other filesystems (at least ext4) also seem to require a minimum
increment after the initial device size, but seem to use the entire
device after initial creation.
Fun observation: creating a 64(+) TiB filesystem leaves a 64(+) block
gap at the end, that is allocated in a subsequent xfs_growfs call.
Co-authored-by: Johannes Naab <johannes.naab@hetzner-cloud.de>
* Adjust all __future__ imports:
for i in $(grep -REl "__future__.*absolute_import" plugins/ tests/); do
sed -e 's/from __future__ import .*/from __future__ import annotations/g' -i $i;
done
* Remove all UTF-8 encoding specifications for Python source files:
for i in $(grep -REl '[-][*]- coding: utf-8 -[*]-' plugins/ tests/); do
sed -e '/^# -\*- coding: utf-8 -\*-/d' -i $i;
done
* Remove __metaclass__ = type:
for i in $(grep -REl '__metaclass__ = type' plugins/ tests/); do
sed -e '/^__metaclass__ = type/d' -i $i;
done
* filesystem: add UUID change feature
* Add changelog fragment for 6680
* Do not test XFS filesystem UUID reset on FreeBSD
FreeBSD error: xfs_admin: only 'rewrite' supported on V5 fs
* Apply suggestions from code review #1
Co-authored-by: Felix Fontein <felix@fontein.de>
* Set filesystem UUID on FS creation
* Fix tests - switch to ansible.builtion.to_uuid
* Fix tests - Refactor to avoid FS remove tasks
* Fail if uuid option not yet supported for fstype
* Set resizefs and uuid options mutually exclusive
* Apply suggestions from code review no 2.
Co-authored-by: Felix Fontein <felix@fontein.de>
---------
Co-authored-by: Felix Fontein <felix@fontein.de>