@@ -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 ,
66+ 'size_gb' : f"{ capacity :.0f} " })
6467 break
6568 return result
6669
@@ -75,19 +78,25 @@ def get_raid_type(disk_count: int) -> int:
7578
7679def 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+ disks = [
85+ d ["name" ]
86+ for d in raid_config ["physical_disks" ]
87+ if int (d ["size_gb" ]) == size
88+ ]
89+ raid_level = get_raid_type (len (disks ))
90+ base_config ["logical_disks" ].append (
8191 {
8292 "controller" : raid_config ["controller" ],
83- "is_root_volume" : True ,
84- "physical_disks" : raid_config [ "physical_disks" ] ,
93+ "is_root_volume" : True if size == 480 else False ,
94+ "physical_disks" : disks ,
8595 "raid_level" : str (raid_level ),
8696 "size_gb" : "MAX" ,
8797 }
88- ]
89- }
90- return result
98+ )
99+ return base_config
91100
92101
93102if __name__ == "__main__" :
0 commit comments