Split Static Ip configuration and Disable DHCP commands
This commit is contained in:
@@ -604,26 +604,10 @@ def apply_configuration(cfg: ShelfConfig) -> bool:
|
|||||||
results = []
|
results = []
|
||||||
all_ok = True
|
all_ok = True
|
||||||
for iom_cfg in [cfg.iom1, cfg.iom2]:
|
for iom_cfg in [cfg.iom1, cfg.iom2]:
|
||||||
if iom_cfg.dhcp:
|
success, detail = _apply_iom(cfg.password, iom_cfg)
|
||||||
payload = {"DHCPv4": {"DHCPEnabled": True}}
|
status = _c(C.GRN, "OK") if success else _c(C.RED, "FAIL")
|
||||||
else:
|
results.append([iom_cfg.iom, status, detail])
|
||||||
payload = {
|
if not success:
|
||||||
"DHCPv4": {"DHCPEnabled": False},
|
|
||||||
"IPv4StaticAddresses": [{
|
|
||||||
"Address": iom_cfg.ip,
|
|
||||||
"Gateway": iom_cfg.gateway,
|
|
||||||
"SubnetMask": iom_cfg.netmask,
|
|
||||||
}],
|
|
||||||
}
|
|
||||||
|
|
||||||
path = f"/redfish/v1/Managers/{iom_cfg.iom}/EthernetInterfaces/1"
|
|
||||||
success, data = _redfish_request(cfg.password, "PATCH", path, payload)
|
|
||||||
|
|
||||||
if success:
|
|
||||||
mode = "DHCP" if iom_cfg.dhcp else f"Static {iom_cfg.ip}"
|
|
||||||
results.append([iom_cfg.iom, _c(C.GRN, "OK"), f"Configured: {mode}"])
|
|
||||||
else:
|
|
||||||
results.append([iom_cfg.iom, _c(C.RED, "FAIL"), str(data)[:60]])
|
|
||||||
all_ok = False
|
all_ok = False
|
||||||
|
|
||||||
draw_table(["IOM", "Result", "Detail"], results, [6, 8, 50])
|
draw_table(["IOM", "Result", "Detail"], results, [6, 8, 50])
|
||||||
@@ -631,6 +615,60 @@ def apply_configuration(cfg: ShelfConfig) -> bool:
|
|||||||
return all_ok
|
return all_ok
|
||||||
|
|
||||||
|
|
||||||
|
def _apply_iom(password: str, iom_cfg: IOMConfig) -> tuple:
|
||||||
|
"""
|
||||||
|
Apply network config to a single IOM.
|
||||||
|
|
||||||
|
DHCP: single PATCH enabling DHCPv4.
|
||||||
|
|
||||||
|
Static: two sequential PATCHes to work around a firmware bug in the
|
||||||
|
current ES24N release that prevents disabling DHCP and setting a static
|
||||||
|
address in the same request.
|
||||||
|
Pass 1 -- set the static IP/gateway/netmask (DHCP still on)
|
||||||
|
Pass 2 -- disable DHCP (address is already committed)
|
||||||
|
"""
|
||||||
|
path = f"/redfish/v1/Managers/{iom_cfg.iom}/EthernetInterfaces/1"
|
||||||
|
|
||||||
|
if iom_cfg.dhcp:
|
||||||
|
# DHCP -- single call, no firmware quirk involved
|
||||||
|
ok_flag, data = _redfish_request(
|
||||||
|
password, "PATCH", path,
|
||||||
|
{"DHCPv4": {"DHCPEnabled": True}},
|
||||||
|
)
|
||||||
|
if ok_flag:
|
||||||
|
return True, "Configured: DHCP"
|
||||||
|
return False, str(data)[:80]
|
||||||
|
|
||||||
|
# Static -- Pass 1: set address while DHCP is still enabled
|
||||||
|
info(f" {iom_cfg.iom} pass 1/2 -- setting static address {iom_cfg.ip}...")
|
||||||
|
ok_flag, data = _redfish_request(
|
||||||
|
password, "PATCH", path,
|
||||||
|
{
|
||||||
|
"IPv4StaticAddresses": [{
|
||||||
|
"Address": iom_cfg.ip,
|
||||||
|
"Gateway": iom_cfg.gateway,
|
||||||
|
"SubnetMask": iom_cfg.netmask,
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if not ok_flag:
|
||||||
|
return False, f"Pass 1 failed: {str(data)[:70]}"
|
||||||
|
|
||||||
|
# Brief pause to allow the IOM to commit the address before the next call
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
# Static -- Pass 2: disable DHCP now that the static address is committed
|
||||||
|
info(f" {iom_cfg.iom} pass 2/2 -- disabling DHCP...")
|
||||||
|
ok_flag, data = _redfish_request(
|
||||||
|
password, "PATCH", path,
|
||||||
|
{"DHCPv4": {"DHCPEnabled": False}},
|
||||||
|
)
|
||||||
|
if not ok_flag:
|
||||||
|
return False, f"Pass 2 failed: {str(data)[:70]}"
|
||||||
|
|
||||||
|
return True, f"Configured: Static {iom_cfg.ip}"
|
||||||
|
|
||||||
|
|
||||||
# ── Step 5b: Print applied-settings summary ───────────────────────────────────
|
# ── Step 5b: Print applied-settings summary ───────────────────────────────────
|
||||||
def print_summary(cfg: ShelfConfig, changed: bool):
|
def print_summary(cfg: ShelfConfig, changed: bool):
|
||||||
rule("Summary")
|
rule("Summary")
|
||||||
|
|||||||
Reference in New Issue
Block a user