DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
set_rc_controller_port Namespace Reference

Functions

 set_rc_controller_port (oksfile, session_name, rc_port=0)
 

Function Documentation

◆ set_rc_controller_port()

set_rc_controller_port.set_rc_controller_port ( oksfile,
session_name,
rc_port = 0 )
Script to set the value of the RC Controller Service port used by the specified Session
in the specified OKS database file. If the new port is not specified,
it is set to a random available k8s NodePort.

Definition at line 6 of file set_rc_controller_port.py.

6def set_rc_controller_port(oksfile, session_name, rc_port=0):
7 """
8 Script to set the value of the RC Controller Service port used by the specified Session
9 in the specified OKS database file. If the new port is not specified,
10 it is set to a random available k8s NodePort.
11 """
12 try:
13 db = conffwk.Configuration("oksconflibs:" + oksfile)
14 except Exception as e:
15 print(f"Error: Could not open OKS file {oksfile}. Make sure OKS_CONFLIBS_PATH is set.")
16 print(f"Details: {e}")
17 return 0
18
19 if not session_name:
20 print("Error: The session name needs to be specified")
21 return 0
22 else:
23 try:
24 session = db.get_dal("Session", session_name)
25 except Exception:
26 print(f"Error: Could not find Session '{session_name}' in file '{oksfile}'")
27 return 0
28
29 # Find a new port if one isn't specified
30 k8s_min_port, k8s_max_port = 30000, 32767
31 if rc_port == 0:
32 new_port = find_free_port(k8s_min_port, k8s_max_port)
33 print(f"Found free Kubernetes NodePort: {new_port}")
34 else:
35 new_port = rc_port
36 if not (k8s_min_port <= new_port <= k8s_max_port):
37 print(f"Warning: Port {new_port} is outside the standard k8s NodePort range ({k8s_min_port}-{k8s_max_port}).")
38
39 # Traverse from Session -> Segment -> Controller -> Service
40 service_to_update = None
41 try:
42 if not hasattr(session, 'segment') or session.segment is None:
43 print(f"Error: Session '{session_name}' has no 'segment' defined.")
44 return 0
45
46 segment = session.segment
47 if not hasattr(segment, 'controller') or segment.controller is None:
48 print(f"Error: Segment '{segment.id}' has no 'controller' defined.")
49 return 0
50
51 controller = segment.controller
52 if not hasattr(controller, 'exposes_service') or not controller.exposes_service:
53 # Check if the attribute exists AND if the list is not empty
54 print(f"Error: Controller '{controller.id}' has no 'exposes_service' defined or the list is empty.")
55 return 0
56
57 service_list = controller.exposes_service
58
59 if len(service_list) > 1:
60 print(f"Warning: Controller '{controller.id}' exposes multiple services. Only updating the first one ('{service_list[0].id}').")
61
62 service_to_update = service_list[0]
63
64 if service_to_update is None:
65 print(f"Error: Controller '{controller.id}' has a null service in its 'exposes_service' list.")
66 return 0
67
68 except Exception as e:
69 print(f"Error: Failed to navigate object graph from Session '{session_name}'.")
70 print(f"Details: {e}")
71 return 0
72
73 # Update the Service
74 if service_to_update:
75 service_to_update.port = new_port
76 db.update_dal(service_to_update)
77 print(f"Updated RC Controller Service '{service_to_update.id}' to use port {new_port}")
78
79 db.commit()
80 print(f"Successfully configured RC controller port for session '{session_name}'.")
81 return new_port
82 else:
83 # This case is mostly covered by the checks above, but serves as a fallback.
84 print(f"Error: Could not find the RC Controller Service for session '{session_name}'.")
85 return 0
86