Skip to content

Commit c9811ac

Browse files
committed
feat: PUC-1650: Separate disks by size when defining logical disks during enroll.
1 parent c5b9b48 commit c9811ac

1 file changed

Lines changed: 23 additions & 11 deletions

File tree

‎python/understack-workflows/understack_workflows/main/get_raid_devices.py‎

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,15 @@ def parse_controller_details(client: Sushy) -> dict:
5555
"""Parse available RAID controller details for execution."""
5656
result = {"controller": None, "physical_disks": []}
5757
system_objects = client.get_system_collection().get_members()
58-
system = system_objects[0]
58+
system = system_objects.pop()
5959
for c in system.storage.get_members():
60-
if "RAID" in c.identity:
60+
if "RAID" in c.identity.upper():
6161
result["controller"] = c.identity
6262
for d in c.drives:
63-
result["physical_disks"].append(d.identity)
63+
capacity = d.capacity_bytes / (10**9)
64+
result["physical_disks"].append(
65+
{"name": d.identity, "size_gb": f"{capacity:.0f}"}
66+
)
6467
break
6568
return result
6669

@@ -75,19 +78,28 @@ def get_raid_type(disk_count: int) -> int:
7578

7679
def build_raid_config(raid_config: dict):
7780
"""Return a raid config supported by ironic for cleanup tasks."""
78-
raid_level = get_raid_type(len(raid_config["physical_disks"]))
79-
result = {
80-
"logical_disks": [
81+
sizes = sorted({int(d["size_gb"]) for d in raid_config["physical_disks"]})
82+
base_config = {"logical_disks": []}
83+
for size in sizes:
84+
_root_vol = bool(size == sizes[0]) or bool(
85+
len(sizes) == 1
86+
) # First size or only size.
87+
disks = [
88+
d["name"]
89+
for d in raid_config["physical_disks"]
90+
if int(d["size_gb"]) == size
91+
]
92+
raid_level = get_raid_type(len(disks))
93+
base_config["logical_disks"].append(
8194
{
8295
"controller": raid_config["controller"],
83-
"is_root_volume": True,
84-
"physical_disks": raid_config["physical_disks"],
96+
"is_root_volume": _root_vol,
97+
"physical_disks": disks,
8598
"raid_level": str(raid_level),
8699
"size_gb": "MAX",
87100
}
88-
]
89-
}
90-
return result
101+
)
102+
return base_config
91103

92104

93105
if __name__ == "__main__":

0 commit comments

Comments
 (0)