Skip to content

Commit 6f82a60

Browse files
authored
Add baremetal provide command to move nodes from manageable to available state (#1819)
AI-assisted: Claude Code Signed-off-by: Christian Berendt <[email protected]>
1 parent 5833420 commit 6f82a60

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

osism/commands/baremetal.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -921,6 +921,64 @@ def take_action(self, parsed_args):
921921
return
922922

923923

924+
class BaremetalProvide(Command):
925+
def get_parser(self, prog_name):
926+
parser = super(BaremetalProvide, self).get_parser(prog_name)
927+
928+
parser.add_argument(
929+
"name",
930+
nargs="?",
931+
type=str,
932+
help="Provide given baremetal node when in provision state manageable",
933+
)
934+
parser.add_argument(
935+
"--all",
936+
default=False,
937+
help="Provide all baremetal nodes in provision state manageable",
938+
action="store_true",
939+
)
940+
return parser
941+
942+
def take_action(self, parsed_args):
943+
all_nodes = parsed_args.all
944+
name = parsed_args.name
945+
946+
if not all_nodes and not name:
947+
logger.error("Please specify a node name or use --all")
948+
return
949+
950+
conn = get_cloud_connection()
951+
952+
if all_nodes:
953+
provide_nodes = list(conn.baremetal.nodes(details=True))
954+
else:
955+
node = conn.baremetal.find_node(name, ignore_missing=True, details=True)
956+
if not node:
957+
logger.warning(f"Could not find node {name}")
958+
return
959+
provide_nodes = [node]
960+
961+
for node in provide_nodes:
962+
if not node:
963+
continue
964+
965+
if node.provision_state == "manageable" and not node["maintenance"]:
966+
try:
967+
conn.baremetal.set_node_provision_state(node.id, "provide")
968+
logger.info(
969+
f"Successfully initiated provide for node {node.name} ({node.id})"
970+
)
971+
except Exception as exc:
972+
logger.warning(
973+
f"Node {node.name} ({node.id}) could not be moved to available state: {exc}"
974+
)
975+
continue
976+
else:
977+
logger.warning(
978+
f"Node {node.name} ({node.id}) not in supported state! Provision state: {node.provision_state}, maintenance mode: {node['maintenance']}"
979+
)
980+
981+
924982
class BaremetalMaintenanceSet(Command):
925983
def get_parser(self, prog_name):
926984
parser = super(BaremetalMaintenanceSet, self).get_parser(prog_name)

setup.cfg

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ osism.commands:
5050
baremetal ping = osism.commands.baremetal:BaremetalPing
5151
baremetal power off = osism.commands.baremetal:BaremetalPowerOff
5252
baremetal power on = osism.commands.baremetal:BaremetalPowerOn
53+
baremetal provide = osism.commands.baremetal:BaremetalProvide
5354
baremetal undeploy = osism.commands.baremetal:BaremetalUndeploy
5455
compose = osism.commands.compose:Run
5556
configuration sync = osism.commands.configuration:Sync
@@ -107,6 +108,7 @@ osism.commands:
107108
manage baremetal ping = osism.commands.baremetal:BaremetalPing
108109
manage baremetal power off = osism.commands.baremetal:BaremetalPowerOff
109110
manage baremetal power on = osism.commands.baremetal:BaremetalPowerOn
111+
manage baremetal provide = osism.commands.baremetal:BaremetalProvide
110112
manage baremetal undeploy = osism.commands.baremetal:BaremetalUndeploy
111113
netbox = osism.commands.netbox:Console
112114
netbox show = osism.commands.netbox:Show

0 commit comments

Comments
 (0)