Add check if node is registered

Avoids reprovisioning existing nodes until they are manually removed
from the database.
This commit is contained in:
Joshua Boniface 2022-10-26 17:51:00 +00:00
parent b4796ef4c9
commit 1c3c59b6f0
1 changed files with 30 additions and 16 deletions

View File

@ -50,24 +50,38 @@ def dnsmasq_checkin(config, data):
) )
cspec = git.load_cspec_yaml(config) cspec = git.load_cspec_yaml(config)
is_in_bootstrap_map = True if data["macaddr"] in cspec["bootstrap"] else False is_in_bootstrap_map = True if data["macaddr"] in cspec["bootstrap"] else False
if is_in_bootstrap_map: try:
notifications.send_webhook(config, "info", f"New host checkin from MAC {data['macaddr']} as host {cspec['bootstrap'][data['macaddr']]['node']['fqdn']} in cluster {cspec['bootstrap'][data['macaddr']]['node']['cluster']}") if is_in_bootstrap_map
if ( cspec_cluster = cspec["bootstrap"][data["macaddr"]]["node"]["cluster"]
cspec["bootstrap"][data["macaddr"]]["bmc"].get("redfish", None) is_registered = True if data["macaddr"] in [x.bmc_macaddr for x in db.get_nodes_in_cluster(config, cspec_cluster)] else False
is not None
):
if cspec["bootstrap"][data["macaddr"]]["bmc"]["redfish"]:
is_redfish = True
else:
is_redfish = False
else: else:
is_redfish = redfish.check_redfish(config, data) raise Exception()
except Exception:
is_registered = False
logger.info(f"Is device '{data['macaddr']}' Redfish capable? {is_redfish}") if not is_in_bootstrap_map:
if is_redfish:
redfish.redfish_init(config, cspec, data)
else:
logger.warn(f"Device '{data['macaddr']}' not in bootstrap map; ignoring.") logger.warn(f"Device '{data['macaddr']}' not in bootstrap map; ignoring.")
return
if is_registered:
logger.info(f"Device '{data['macaddr']}' has already been bootstrapped; ignoring.")
return
notifications.send_webhook(config, "info", f"New host checkin from MAC {data['macaddr']} as host {cspec['bootstrap'][data['macaddr']]['node']['fqdn']} in cluster {cspec['bootstrap'][data['macaddr']]['node']['cluster']}")
if (
cspec["bootstrap"][data["macaddr"]]["bmc"].get("redfish", None)
is not None
):
if cspec["bootstrap"][data["macaddr"]]["bmc"]["redfish"]:
is_redfish = True
else:
is_redfish = False
else:
is_redfish = redfish.check_redfish(config, data)
logger.info(f"Is device '{data['macaddr']}' Redfish capable? {is_redfish}")
if is_redfish:
redfish.redfish_init(config, cspec, data)
return return
@ -142,7 +156,7 @@ def host_checkin(config, data):
target_state = "completed" target_state = "completed"
for node in all_nodes: for node in all_nodes:
host.set_boot_state(config, cspec, node, target_state) host.set_boot_state(config, cspec, data, target_state)
# Hosts will now power down ready for real activation in production # Hosts will now power down ready for real activation in production
sleep(60) sleep(60)