Commit b82752ac55c4d171722834edb46927c3380b3165
1 parent
b4df3bc3
Exists in
dev
Move obsconfig/config folder into obsconfig
Showing
3 changed files
with
104 additions
and
14 deletions
Show diff stats
CHANGELOG
1 | +01-09-2023 (AKo): V0.6.30.0 | |
2 | + - Add install-dependecies command | |
3 | + - Move obsconfig/config folder into obsconfig | |
4 | + | |
1 | 5 | 01-09-2023 (AKo): V0.6.29.0 |
2 | 6 | - Add fn context to channels in obsconfig class |
3 | - | |
7 | + - Add makedirs in fn_context definition | |
8 | + - Fix agent protocol path in A_SST | |
9 | + | |
4 | 10 | 28-07-2023 (AKo): V0.6.28.0 |
5 | 11 | - Add command in A_SCP_Manager to generate ephemeris files of sun & moon for a period |
6 | 12 | - Fix AgentSST start one agent | ... | ... |
pyros.py
... | ... | @@ -60,8 +60,8 @@ AGENTS = { |
60 | 60 | "AgentM": "env_monitor", |
61 | 61 | "AgentSP": "scientific_programs", |
62 | 62 | "AgentScheduler": "scheduling", |
63 | - "AgentImagesProcessor": "observation_manager", | |
64 | - "AgentImagesCalibrator": "observation_manager", | |
63 | + "AgentImagesProcessor": "img_process", | |
64 | + "AgentImagesCalibrator": "img_analysis", | |
65 | 65 | "A_SST": "majordome/agent", |
66 | 66 | "Agent": "majordome/agent", |
67 | 67 | "Agent2": "majordome/agent", |
... | ... | @@ -815,6 +815,84 @@ def initdb(): |
815 | 815 | return True |
816 | 816 | |
817 | 817 | |
818 | + | |
819 | +@pyros_launcher.command(help="Install dependencies") | |
820 | +# @global_test_options | |
821 | +@click.option('--observatory', '-o', help='the observatory name to be used') | |
822 | +@click.option('--unit', '-u', help='the unit name to be used') | |
823 | +@click.option("--foreground","-fg", is_flag=True, help="Print stdout and error in terminal") | |
824 | +def install_dependencies(observatory: str, unit: str, foreground: bool): | |
825 | + if observatory == None or len(observatory) == 0: | |
826 | + observatory = "default" | |
827 | + default_obsconfig_folder = os.path.join( | |
828 | + os.path.abspath(PYROS_DJANGO_BASE_DIR), "../../../config/pyros_observatory/") | |
829 | + path_to_obs_config_folder = default_obsconfig_folder+"pyros_observatory_"+observatory+"/" | |
830 | + else: | |
831 | + observatories_configuration_folder = os.path.join( | |
832 | + os.path.abspath(PYROS_DJANGO_BASE_DIR), "../../../../PYROS_OBSERVATORY/") | |
833 | + if len(glob.glob(observatories_configuration_folder+"pyros_observatory_"+observatory+"/")) != 1: | |
834 | + # Observatory configuration folder not found | |
835 | + print( | |
836 | + f"Observatory configuration folder for observatory '{observatory}' not found in {observatories_configuration_folder}") | |
837 | + print("Available observatories configuration :") | |
838 | + for obs_conf_folder in os.listdir(observatories_configuration_folder): | |
839 | + print(obs_conf_folder) | |
840 | + exit(1) | |
841 | + | |
842 | + path_to_obs_config_folder = observatories_configuration_folder+"pyros_observatory_"+observatory | |
843 | + obs_config_file_name = "" | |
844 | + # Search for observatory config file | |
845 | + obs_config_file_name = glob.glob( | |
846 | + path_to_obs_config_folder+"/observatory*.yml")[0] | |
847 | + | |
848 | + obs_config_file_path = os.path.join( | |
849 | + path_to_obs_config_folder, obs_config_file_name) | |
850 | + os.environ["PATH_TO_OBSCONF_FILE"] = obs_config_file_path | |
851 | + os.environ["PATH_TO_OBSCONF_FOLDER"] = path_to_obs_config_folder | |
852 | + os.environ["unit_name"] = unit if unit else '' | |
853 | + | |
854 | + # add path to pyros_django folder as the config class is supposed to work within this folder | |
855 | + cmd_test_obs_config = f"-c \"from src.core.pyros_django.obs_config.obsconfig_class import OBSConfig\nOBSConfig('{obs_config_file_path}')\"" | |
856 | + if not execProcessFromVenv(cmd_test_obs_config,foreground=True): | |
857 | + # Observatory configuration has an issue | |
858 | + exit(1) | |
859 | + else: | |
860 | + from src.core.pyros_django.obs_config.obsconfig_class import OBSConfig | |
861 | + try: | |
862 | + from git import Repo, GitError | |
863 | + except: | |
864 | + pip = "pip" if IS_WINDOWS else "pip3" | |
865 | + if WITH_DOCKER: | |
866 | + process = subprocess.Popen( | |
867 | + pip + " install --user --upgrade GitPython", shell=True) | |
868 | + else: | |
869 | + process = subprocess.Popen( | |
870 | + pip + " install --upgrade GitPython", shell=True) | |
871 | + process.wait() | |
872 | + if process.returncode == 0: | |
873 | + # self.addExecuted(self.current_command, command) | |
874 | + from git import Repo, GitError | |
875 | + else: | |
876 | + log.error("GitPython package (required for obsconfig class) installation failed") | |
877 | + VENDOR_PATH = os.path.join(os.getcwd(), "./vendor/") | |
878 | + import socket | |
879 | + obsconfig = OBSConfig(obs_config_file_path) | |
880 | + computer_hostname = socket.gethostname() | |
881 | + dependencies = obsconfig.get_dependencies() | |
882 | + for computer_name in obsconfig.get_computers().keys(): | |
883 | + if computer_hostname == obsconfig.get_computers().get(computer_name).get("computer_config").get("hostname"): | |
884 | + computer = computer_name | |
885 | + os.chdir("vendor") | |
886 | + for dependency in dependencies: | |
887 | + if computer in dependency["computers"]: | |
888 | + for cmd in dependency["commands"]: | |
889 | + print(cmd) | |
890 | + process = subprocess.Popen(cmd, shell=True) | |
891 | + process.wait() | |
892 | + if process.returncode == 0: | |
893 | + continue | |
894 | + | |
895 | + | |
818 | 896 | @pyros_launcher.command(help="Launch an agent") |
819 | 897 | # @global_test_options |
820 | 898 | @click.argument('agent') |
... | ... | @@ -881,7 +959,7 @@ def start(agent: str, configfile: str, observatory: str, unit: str, computer_hos |
881 | 959 | print(obs_conf_folder) |
882 | 960 | exit(1) |
883 | 961 | |
884 | - path_to_obs_config_folder = observatories_configuration_folder+"pyros_observatory_"+observatory+"/config/" | |
962 | + path_to_obs_config_folder = observatories_configuration_folder+"pyros_observatory_"+observatory | |
885 | 963 | obs_config_file_name = "" |
886 | 964 | # Search for observatory config file |
887 | 965 | obs_config_file_name = glob.glob( |
... | ... | @@ -1096,7 +1174,7 @@ def new_start(configfile: str, observatory: str, unit: str, computer_hostname: s |
1096 | 1174 | print(obs_conf_folder) |
1097 | 1175 | exit(1) |
1098 | 1176 | |
1099 | - path_to_obs_config_folder = observatories_configuration_folder+"pyros_observatory_"+observatory+"/config/" | |
1177 | + path_to_obs_config_folder = observatories_configuration_folder+"pyros_observatory_"+observatory | |
1100 | 1178 | obs_config_file_name = "" |
1101 | 1179 | # Search for observatory config file |
1102 | 1180 | obs_config_file_name = glob.glob( | ... | ... |
src/core/pyros_django/obs_config/obsconfig_class.py
... | ... | @@ -901,11 +901,13 @@ class OBSConfig: |
901 | 901 | agents = self.get_agents(self.unit_name) |
902 | 902 | for agent in agents: |
903 | 903 | computer_name = agents[agent]["computer"] |
904 | - computer_hostname = self.get_computers().get(computer_name).get("computer_config").get("hostname") | |
905 | - if(computer_hostname not in agents_per_computer.keys()): | |
906 | - agents_per_computer[computer_hostname] = [agent] | |
907 | - else: | |
908 | - agents_per_computer[computer_hostname].append(agent) | |
904 | + # computer_name is a string so we have to check if it's different of string None | |
905 | + if computer_name != "None": | |
906 | + computer_hostname = self.get_computers().get(computer_name).get("computer_config").get("hostname") | |
907 | + if(computer_hostname not in agents_per_computer.keys()): | |
908 | + agents_per_computer[computer_hostname] = [agent] | |
909 | + else: | |
910 | + agents_per_computer[computer_hostname].append(agent) | |
909 | 911 | return agents_per_computer |
910 | 912 | |
911 | 913 | def get_agents_per_device(self, unit_name: str) -> dict: |
... | ... | @@ -1319,22 +1321,26 @@ class OBSConfig: |
1319 | 1321 | dependencies = self.get_unit_by_name(unit).get("DEPENDENCIES") |
1320 | 1322 | dependencies_return = [] |
1321 | 1323 | for dependency in dependencies: |
1324 | + dependency = dependency.get("DEPENDENCY") | |
1322 | 1325 | computers = dependency.get("computers") |
1323 | 1326 | commands = [] |
1324 | 1327 | for link in dependency.get("links"): |
1328 | + link = link.get("link") | |
1325 | 1329 | type = link.get("type") |
1326 | 1330 | url = link.get("url") |
1331 | + name = link.get("name") | |
1327 | 1332 | cmd = "" |
1328 | 1333 | if type == "git": |
1329 | - cmd += f"git clone {url}" | |
1334 | + cmd += f"git clone {url}.git {name}" | |
1330 | 1335 | elif type == "wget": |
1331 | 1336 | cmd += f"wget {url}" |
1332 | 1337 | commands.append(cmd) |
1333 | 1338 | path_projet_root = os.environ['PROJECT_ROOT_PATH'] |
1334 | 1339 | install_section = link.get("install") |
1335 | - install_cmd = f"{install_section.get('shell')} {path_projet_root}{install_section.get('script')}" | |
1336 | - cmd.append(install_cmd) | |
1337 | - dependencies_return.append((computers,commands)) | |
1340 | + #script_path = os.path.join(path_projet_root, "vendor", name, install_section.get('script')) | |
1341 | + install_cmd = f"{install_section.get('shell')} {install_section.get('script')}" | |
1342 | + commands.append(install_cmd) | |
1343 | + dependencies_return.append({"computers":computers, "commands":commands}) | |
1338 | 1344 | return dependencies_return |
1339 | 1345 | |
1340 | 1346 | ... | ... |