@@ -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+
924982class BaremetalMaintenanceSet (Command ):
925983 def get_parser (self , prog_name ):
926984 parser = super (BaremetalMaintenanceSet , self ).get_parser (prog_name )
0 commit comments