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