From 1cd3404ff669c27a1bfcebeec161fae0cb8b27bd Mon Sep 17 00:00:00 2001 From: "ines.maya" <ines.maya@etu.hesge.ch> Date: Sun, 2 Apr 2023 14:16:36 +0200 Subject: [PATCH] add fichier congif python --- config.py | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 config.py diff --git a/config.py b/config.py new file mode 100644 index 0000000..f793211 --- /dev/null +++ b/config.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 + +import requests +import jinja2 +import json +import sys +import os + +API_BASE_URL = 'https://gns3.hepiapp.ch/v2' + +# effectue une requête GET à une API pour obtenir la liste des projets, +# puis recherche un projet particulier dans la liste en comparant le nom du projet +# avec un nom de projet spécifié en entrée. +# Si le projet est trouvé, renvoie l'identifiant du projet, sinon renvoie None. +def get_project_uuid(project_name): + url = API_BASE_URL + '/projects' + response = requests.get(url) + response_json = response.json() + for project in response_json: + if project['name'] == project_name: + return project['project_id'] + return None + +def get_node_data(project_uuid): + url = API_BASE_URL + f'/projects/{project_uuid}/nodes' + response = requests.get(url) + response_json = response.json() + node_data = [] + for node in response_json: + node_data.append({ + 'name': node['name'], + 'console_host': node['console_host'], + 'console_port': node['console'] + }) + return node_data + +def generate_ssh_config(node_data): + template = '''{% for node in node_data %} + {% if node.console_port != None %} + Host {{ node.name }} + User root + Hostname {{ node.console_host }} + Port {{ node.console_port +1}} + StrictHostKeyChecking no + UserKnownHostsFile /dev/null + IdentityFile ~/.ssh/gns3.rsa + {% endif %} + {% endfor %}''' + ssh_config = jinja2.Template(template).render(node_data=node_data) + return ssh_config + +def main(): + if len(sys.argv) != 2: + print(f"Usage: {sys.argv[0]} PROJECT_NAME") + return + + project_name = sys.argv[1] + project_uuid = get_project_uuid(project_name) + + if project_uuid is None: + print(f"Project not found: {project_name}") + return + + node_data = get_node_data(project_uuid) + ssh_config = generate_ssh_config(node_data) + + ssh_config_dir = os.path.expanduser("~/.ssh/config.d") + if not os.path.exists(ssh_config_dir): + os.makedirs(ssh_config_dir) + + ssh_config_file = os.path.join(ssh_config_dir, f"{project_name}.conf") + with open(ssh_config_file, 'w') as f: + f.write(ssh_config) + + print(f"SSH config written to {ssh_config_file}") + print("Include config.d/* line must be added to your ~/.ssh/config file.") + +if __name__ == '__main__': + main() -- GitLab