|
1 | 1 | #!/usr/bin/python
|
2 | 2 |
|
3 |
| -from argparse import ArgumentParser |
4 | 3 | import os
|
| 4 | + |
| 5 | +# Activate virtual environment |
| 6 | +# This must be executed only if this file has been executed as a |
| 7 | +# script (instead of a module) |
| 8 | +if __name__ == '__main__': |
| 9 | + # Check if .venv file exists |
| 10 | + if os.path.exists('.venv'): |
| 11 | + with open('.venv', 'r') as venv_file: |
| 12 | + # Get virtualenv path from .venv file |
| 13 | + venv_path = venv_file.read() |
| 14 | + # Get path of the activation script |
| 15 | + venv_path = os.path.join(venv_path, 'bin/activate_this.py') |
| 16 | + if not os.path.exists(venv_path): |
| 17 | + print('Virtual environment path specified in .venv ' |
| 18 | + 'points to an invalid path\n') |
| 19 | + exit(-2) |
| 20 | + with open(venv_path) as f: |
| 21 | + # Read the activation script |
| 22 | + code = compile(f.read(), venv_path, 'exec') |
| 23 | + # Execute the activation script to activate the venv |
| 24 | + exec(code, {'__file__': venv_path}) |
| 25 | + |
| 26 | +from argparse import ArgumentParser |
5 | 27 | import shutil
|
6 | 28 | from dotenv import load_dotenv
|
7 | 29 | from mininet.topo import Topo
|
|
19 | 41 | PRIVDIR = '/var/priv'
|
20 | 42 |
|
21 | 43 | START_NODE_MANAGERS = False
|
22 |
| -NODE_MANAGER_PATH = '' |
23 | 44 |
|
24 | 45 | # Load environment variables from .env file
|
25 | 46 | load_dotenv()
|
26 | 47 |
|
27 | 48 | # Get node manager path
|
28 |
| -NODE_MANAGER_PATH = os.getenv('NODE_MANAGER_PATH') |
29 |
| -NODE_MANAGER_PATH.join(NODE_MANAGER_PATH, 'srv6_manager.py') |
| 49 | +NODE_MANAGER_PATH = os.getenv('NODE_MANAGER_PATH', None) |
| 50 | +if NODE_MANAGER_PATH is not None: |
| 51 | + NODE_MANAGER_PATH = os.path.join(NODE_MANAGER_PATH, |
| 52 | + 'srv6_manager.py') |
30 | 53 | # Get gRPC server port
|
31 |
| -NODE_MANAGER_GRPC_PORT = os.getenv('NODE_MANAGER_GRPC_PORT') |
32 |
| -NODE_MANAGER_GRPC_PORT.join(NODE_MANAGER_GRPC_PORT, 'srv6_manager.py') |
| 54 | +NODE_MANAGER_GRPC_PORT = os.getenv('NODE_MANAGER_GRPC_PORT', None) |
33 | 55 |
|
34 | 56 |
|
35 | 57 | class BaseNode(Host):
|
@@ -107,8 +129,8 @@ def config(self, **kwargs):
|
107 | 129 | BaseNode.config(self, **kwargs)
|
108 | 130 | # Start node managers
|
109 | 131 | if START_NODE_MANAGERS:
|
110 |
| - self.cmd('python %s --grpc_port %s' |
111 |
| - % (NODE_MANAGER_PATH % NODE_MANAGER_GRPC_PORT)) |
| 132 | + self.cmd('python %s --grpc-port %s &' |
| 133 | + % (NODE_MANAGER_PATH, NODE_MANAGER_GRPC_PORT)) |
112 | 134 |
|
113 | 135 |
|
114 | 136 | class Switch(OVSBridge):
|
@@ -313,17 +335,21 @@ def parse_arguments():
|
313 | 335 | # Define whether to start node manager on routers or not
|
314 | 336 | START_NODE_MANAGERS = args.start_node_managers
|
315 | 337 | if START_NODE_MANAGERS:
|
316 |
| - if NODE_MANAGER_PATH: |
| 338 | + if NODE_MANAGER_PATH is None: |
| 339 | + print('Error: --start-node-managers requires NODE_MANAGER_PATH ' |
| 340 | + 'variable') |
| 341 | + print('NODE_MANAGER_PATH variable not set in .env file\n') |
| 342 | + exit(-2) |
| 343 | + if not os.path.exists(NODE_MANAGER_PATH): |
317 | 344 | print('Error: --start-node-managers requires NODE_MANAGER_PATH '
|
318 | 345 | 'variable')
|
319 |
| - print('NODE_MANAGER_PATH variable is not set in .env file or ' |
320 |
| - 'the variable points to a non existing folder') |
| 346 | + print('NODE_MANAGER_PATH defined in .env file ' |
| 347 | + 'points to a non existing folder\n') |
321 | 348 | exit(-2)
|
322 |
| - if NODE_MANAGER_GRPC_PORT: |
| 349 | + if NODE_MANAGER_GRPC_PORT is None: |
323 | 350 | print('Error: --start-node-managers requires '
|
324 | 351 | 'NODE_MANAGER_GRPC_PORT variable')
|
325 |
| - print('NODE_MANAGER_GRPC_PORT variable is not set in .env file or ' |
326 |
| - 'the variable points to a non existing folder') |
| 352 | + print('NODE_MANAGER_GRPC_PORT variable not set in .env file\n') |
327 | 353 | exit(-2)
|
328 | 354 | # Tell mininet to print useful information
|
329 | 355 | setLogLevel('info')
|
|
0 commit comments