76 lines
2.8 KiB
Python
76 lines
2.8 KiB
Python
import paramiko
|
|
import time
|
|
import re
|
|
|
|
nodes = {
|
|
"Node 1 (snaihvs0lnx01)": "140.44.44.121",
|
|
"Node 2 (snaihvs0lnx02)": "140.44.44.122",
|
|
"Node 3 (snaihvs0lnx03)": "140.44.44.123",
|
|
"Node 4 (idrac-spacedock4)": "140.44.44.124",
|
|
}
|
|
|
|
results = {}
|
|
|
|
for name, ip in nodes.items():
|
|
print(f"Connecting to {name} ({ip})...")
|
|
node_data = {}
|
|
try:
|
|
c = paramiko.SSHClient()
|
|
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
c.connect(ip, username="root", password="Katzir476!", timeout=10)
|
|
chan = c.invoke_shell()
|
|
time.sleep(2)
|
|
if chan.recv_ready():
|
|
chan.recv(4096)
|
|
|
|
def send_and_recv(cmd, wait_time=2.5):
|
|
chan.send(cmd + "\r\n")
|
|
time.sleep(wait_time)
|
|
out = ""
|
|
while chan.recv_ready():
|
|
out += chan.recv(8192).decode('utf-8', errors='ignore')
|
|
time.sleep(0.5)
|
|
return out
|
|
|
|
# 1. BIOS Settings
|
|
raw_bios = send_and_recv("racadm get bios.SysProfileSettings", 2)
|
|
for key in ["SysProfile", "ProcCStates", "ProcC1E", "ProcTurboMode", "ProcPwrPerf"]:
|
|
m = re.search(rf"{key}\s*=\s*(\w+)", raw_bios)
|
|
node_data[key] = m.group(1) if m else "Unknown"
|
|
|
|
raw_proc = send_and_recv("racadm get bios.ProcSettings", 2)
|
|
for key in ["ProcVirtualization", "ProcExecuteDisable", "LogicalProc"]:
|
|
m = re.search(rf"{key}\s*=\s*(\w+)", raw_proc)
|
|
node_data[key] = m.group(1) if m else "Unknown"
|
|
|
|
raw_dev = send_and_recv("racadm get bios.IntegratedDevices", 2)
|
|
for key in ["SriovGlobalEnable"]:
|
|
m = re.search(rf"{key}\s*=\s*(\w+)", raw_dev)
|
|
node_data[key] = m.group(1) if m else "Unknown"
|
|
|
|
# 2. Storage / RAID
|
|
raw_ctrl = send_and_recv("racadm raid get controllers", 2)
|
|
controllers = [line.strip() for line in raw_ctrl.splitlines() if "RAID." in line or "PERC" in line or "AHCI." in line]
|
|
node_data["Controllers"] = ", ".join(controllers) if controllers else "None"
|
|
|
|
raw_vdisks = send_and_recv("racadm raid get vdisks", 3)
|
|
vdisks = [line.strip() for line in raw_vdisks.splitlines() if line.startswith("Disk.Virtual")]
|
|
node_data["VirtualDisks"] = len(vdisks)
|
|
node_data["VirtualDisksList"] = vdisks
|
|
|
|
raw_pdisks = send_and_recv("racadm raid get pdisks", 4)
|
|
pdisk_lines = [line.strip() for line in raw_pdisks.splitlines() if line.startswith("Disk.Bay")]
|
|
node_data["PhysicalDisks"] = len(pdisk_lines)
|
|
node_data["PDisksSummary"] = raw_pdisks
|
|
|
|
c.close()
|
|
except Exception as e:
|
|
node_data["Error"] = str(e)
|
|
|
|
results[name] = node_data
|
|
|
|
print("\n\n========================= SUMMARY MATRIX =========================")
|
|
import json
|
|
print(json.dumps(results, indent=2))
|
|
|