@@ -27,7 +27,7 @@ def from_event_dict(cls, data: dict) -> Self:
27
27
28
28
payload_data = payload .get ("ironic_object.data" )
29
29
if payload_data is None :
30
- raise Exception ("Invalid event. No 'ironic_object.data' in payload" )
30
+ raise ValueError ("Invalid event. No 'ironic_object.data' in payload" )
31
31
32
32
return cls (
33
33
owner = payload_data ["owner" ],
@@ -41,12 +41,13 @@ def from_event_dict(cls, data: dict) -> Self:
41
41
def handle_provision_end (conn : Connection , _ : Nautobot , event_data : dict ) -> int :
42
42
"""Operates on an Ironic Node provisioning END event."""
43
43
# Check if the project is configured with tags.
44
-
45
44
event = IronicProvisionSetEvent .from_event_dict (event_data )
45
+ logger .info ("Checking if project %s is tagged with UNDERSTACK_SVM" , event .lessee )
46
46
if not is_project_svm_enabled (conn , event .lessee ):
47
47
return 0
48
48
49
49
# Check if the server instance has an appropriate property.
50
+ logger .info ("Looking up Nova instance %s" , event .instance_uuid )
50
51
server = conn .get_server_by_id (event .instance_uuid )
51
52
52
53
if not server :
@@ -62,4 +63,21 @@ def handle_provision_end(conn: Connection, _: Nautobot, event_data: dict) -> int
62
63
63
64
save_output ("node_uuid" , str (event .node_uuid ))
64
65
save_output ("instance_uuid" , str (event .instance_uuid ))
66
+
67
+ create_volume_connector (conn , event )
65
68
return 0
69
+
70
+
71
+ def create_volume_connector (conn : Connection , event : IronicProvisionSetEvent ):
72
+ logger .info ("Creating baremetal volume connector." )
73
+ connector = conn .baremetal .create_volume_connector ( # pyright: ignore
74
+ node_uuid = event .node_uuid ,
75
+ type = "iqn" ,
76
+ connector_id = instance_nqn (event .instance_uuid ),
77
+ )
78
+ logger .debug ("Created connector: %s" , connector )
79
+ return connector
80
+
81
+
82
+ def instance_nqn (instance_id : UUID ):
83
+ return f"nqn.2014-08.org.nvmexpress:uuid:{ instance_id } "
0 commit comments