filesystem: handle empty string fstype partitions

This should not result in a format object being created, which curtin
doesn't like.  Normalize to None as the fstype to skip format object
creation.

LP: #2058394
This commit is contained in:
Dan Bungert 2024-03-22 16:33:21 -06:00
parent 03b68337d9
commit fc05e77a4c
2 changed files with 25 additions and 1 deletions

View File

@ -1199,9 +1199,11 @@ class FilesystemController(SubiquityController, FilesystemManipulator):
raise ValueError("new partition too large")
if requested_size < 1:
requested_size = data.gap.size
# empty string is an unformatted partition
fstype = data.partition.format or None
spec = {
"size": requested_size,
"fstype": data.partition.format,
"fstype": fstype,
"mount": data.partition.mount,
}

View File

@ -782,6 +782,28 @@ class TestAdd(TestAPI):
with self.assertRaises(ClientResponseError, msg=f"data {data}"):
await inst.post("/storage/v2/add_partition", data)
@timeout()
async def test_add_unformatted_ok(self):
disk_id = "disk-sda"
async with start_server("examples/machines/simple.json") as inst:
for fmt in ("", None):
await inst.post("/storage/v2/reset")
disk_id = "disk-sda"
resp = await inst.get("/storage/v2")
[sda] = match(resp["disks"], id=disk_id)
[gap] = sda["partitions"]
data = {
"disk_id": disk_id,
"gap": gap,
"partition": dict(format=fmt, mount="/"),
}
await inst.post("/storage/v2/add_partition", data)
v1resp = await inst.get("/storage")
empties = match(v1resp["config"], type="format", fstype="")
self.assertEqual(0, len(empties), "invalid format object")
@timeout()
async def test_add_default_size_handling(self):
async with start_server("examples/machines/simple.json") as inst: