saving files
This commit is contained in:
Executable
+80
@@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env python3
|
||||
import os
|
||||
import sys
|
||||
import re
|
||||
|
||||
# Physical mapping updated to 1-based indexing: (Row 1-6, Column 1-4)
|
||||
BAY_MAP = {
|
||||
"0000:01": {
|
||||
"phy0": (1, 1), "phy1": (1, 2), "phy2": (1, 3), "phy3": (1, 4),
|
||||
"phy4": (2, 1), "phy5": (2, 2), "phy6": (2, 3), "phy7": (2, 4),
|
||||
},
|
||||
"0000:02": {
|
||||
"phy0": (3, 4), "phy1": (3, 3), "phy2": (3, 2), "phy3": (3, 1),
|
||||
"phy4": (4, 4), "phy5": (4, 3), "phy6": (4, 2), "phy7": (4, 1),
|
||||
},
|
||||
"0000:04": {
|
||||
"phy0": (5, 4), "phy1": (5, 3), "phy2": (5, 2), "phy3": (5, 1),
|
||||
"phy4": (6, 4), "phy5": (6, 3), "phy6": (6, 2), "phy7": (6, 1),
|
||||
}
|
||||
}
|
||||
|
||||
def main():
|
||||
export_mapping = (len(sys.argv) > 1 and sys.argv[1] == "--mapping")
|
||||
|
||||
# Initialize a 6x4 empty grid (1-indexed rows 1-6, columns 1-4)
|
||||
# We use size 7x5 internally so we can just use the indices 1 to 6 and 1 to 4 directly
|
||||
grid = [["[ EMPTY ]" for _ in range(5)] for _ in range(7)]
|
||||
path_dir = "/dev/disk/by-path"
|
||||
|
||||
if not os.path.exists(path_dir):
|
||||
if not export_mapping:
|
||||
print(f"Error: {path_dir} does not exist.")
|
||||
return
|
||||
|
||||
sas_regex = re.compile(r"pci-(0000:\d{2}):\d{2}\.\d-sas-(phy\d)-lun-0")
|
||||
mappings = {}
|
||||
|
||||
for filename in os.listdir(path_dir):
|
||||
match = sas_regex.match(filename)
|
||||
if match:
|
||||
pci_addr = match.group(1)
|
||||
phy_id = match.group(2)
|
||||
|
||||
if pci_addr in BAY_MAP and phy_id in BAY_MAP[pci_addr]:
|
||||
row, col = BAY_MAP[pci_addr][phy_id]
|
||||
full_path = os.path.join(path_dir, filename)
|
||||
try:
|
||||
target = os.readlink(full_path)
|
||||
dev_name = os.path.basename(target)
|
||||
grid[row][col] = f"[ /dev/{dev_name} ]"
|
||||
mappings[dev_name] = f"R{row}-C{col}"
|
||||
except OSError:
|
||||
grid[row][col] = "[ ERROR ]"
|
||||
|
||||
# Bash Mode: Output "sda:R1-C3" format
|
||||
if export_mapping:
|
||||
for dev, bay in mappings.items():
|
||||
print(f"{dev}:{bay}")
|
||||
return
|
||||
|
||||
# Visual Mode: Print your layout chart for the operators
|
||||
print("\n" + "="*53)
|
||||
print(" DRIVE WIPING BAY LAYOUT ")
|
||||
print("="*53)
|
||||
|
||||
# Iterate from Row 1 to 6
|
||||
for row_idx in range(1, 7):
|
||||
# Slice columns 1 through 4
|
||||
row_cells = grid[row_idx][1:5]
|
||||
row_str = " | ".join(f"{cell:<11}" for cell in row_cells)
|
||||
print(f"Row {row_idx}: | {row_str} |")
|
||||
|
||||
# Add visual separation between shelf units
|
||||
if row_idx in [2, 4]:
|
||||
print("-" * 53)
|
||||
|
||||
print("="*53 + "\n")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user