import curses import json import os CONFIGS_DIR = "/tmp/opengnsys-installer-configs" os.makedirs(CONFIGS_DIR, exist_ok=True) def main(stdscr): # Inicializar colores curses.start_color() curses.init_pair(1, curses.COLOR_WHITE, curses.COLOR_BLUE) # Texto blanco sobre fondo azul stdscr.bkgd(' ', curses.color_pair(1)) # Aplicar fondo azul a la pantalla curses.curs_set(0) # Ocultar el cursor en el menú de selección stdscr.clear() # Paso 1: Seleccionar componentes components = ["ogCore", "ogGui", "ogDhcp", "ogBoot", "ogRepository"] selected_components = [] current_index = 0 # Índice para saber en qué componente está el cursor # Mostrar instrucciones y opciones de componentes stdscr.addstr(1, 2, "Selecciona los componentes (usa Flechas para navegar, Espacio para seleccionar, Enter para continuar):", curses.color_pair(1) | curses.A_BOLD) while True: # Mostrar el estado actual de selección de cada componente for idx, comp in enumerate(components): if comp in selected_components: stdscr.addstr(idx + 3, 4, f"[X] {comp}", curses.color_pair(1)) else: stdscr.addstr(idx + 3, 4, f"[ ] {comp}", curses.color_pair(1)) # Mueve el cursor visualmente para resaltar la selección actual stdscr.addstr(current_index + 3, 4, f"> {components[current_index]}", curses.color_pair(1)) key = stdscr.getch() if key == curses.KEY_UP and current_index > 0: # Navegar hacia arriba current_index -= 1 elif key == curses.KEY_DOWN and current_index < len(components) - 1: # Navegar hacia abajo current_index += 1 elif key == ord(" "): # Marcar/desmarcar con espacio component = components[current_index] if component in selected_components: selected_components.remove(component) else: selected_components.append(component) elif key == ord("\n"): # Confirma la selección con Enter break stdscr.refresh() # Ahora pasamos a la configuración específica de cada componente seleccionado curses.echo() # Activar eco para mostrar la entrada for component in selected_components: stdscr.clear() stdscr.addstr(1, 2, f"Configuración para {component}:", curses.color_pair(1) | curses.A_BOLD) curses.curs_set(1) # Mostrar el cursor para las entradas de configuración config_data = {} if component == "ogCore": stdscr.addstr(3, 4, "Usuario administrador:", curses.color_pair(1)) user = stdscr.getstr(3, 26, 20).decode("utf-8") stdscr.addstr(4, 4, "Contraseña:", curses.color_pair(1)) password = stdscr.getstr(4, 26, 20).decode("utf-8") stdscr.addstr(5, 4, "Tag del contenedor:", curses.color_pair(1)) container_tag = stdscr.getstr(5, 26, 20).decode("utf-8") config_data = {"username": user, "password": password, "container_version": container_tag} elif component == "ogGui": stdscr.addstr(3, 4, "IP del servidor de ogCore:", curses.color_pair(1)) ogcore_ip = stdscr.getstr(3, 32, 20).decode("utf-8") stdscr.addstr(4, 4, "Tag del contenedor:", curses.color_pair(1)) container_version = stdscr.getstr(4, 32, 20).decode("utf-8") config_data = {"ogcore_ip": ogcore_ip, "container_version": container_version} elif component == "ogDhcp": stdscr.addstr(3, 4, "Configuración IP servidor de Boot:", curses.color_pair(1)) ogbootIP = stdscr.getstr(3, 37, 20).decode("utf-8") stdscr.addstr(4, 4, "Interfaces Boot (separadas por coma):", curses.color_pair(1)) interfaces = stdscr.getstr(4, 40, 20).decode("utf-8") json_array_interfaces = interfaces.split(",") config_data = {"ogbootIP": ogbootIP, "interfaces": json_array_interfaces} elif component == "ogBoot": stdscr.addstr(3, 4, "ogCore Ip Server:", curses.color_pair(1)) ogcore_ip = stdscr.getstr(3, 28, 20).decode("utf-8") stdscr.addstr(4, 4, "ogCore Server:", curses.color_pair(1)) ogcore_server = stdscr.getstr(4, 28, 20).decode("utf-8") stdscr.addstr(5, 4, "ogCore Dir:", curses.color_pair(1)) ogcore_dir = stdscr.getstr(5, 28, 20).decode("utf-8") stdscr.addstr(6, 4, "ogBoot GitRepo:", curses.color_pair(1)) ogboot_gitrepo = stdscr.getstr(6, 28, 20).decode("utf-8") stdscr.addstr(7, 4, "ogBoot Samba User:", curses.color_pair(1)) ogboot_samba_user = stdscr.getstr(7, 28, 20).decode("utf-8") stdscr.addstr(8, 4, "ogBoot Samba Pass:", curses.color_pair(1)) ogboot_samba_pass = stdscr.getstr(8, 28, 20).decode("utf-8") config_data = { "ogcore_ip": ogcore_ip, "ogcore_server": ogcore_server, "ogcore_dir": ogcore_dir, "ogboot_gitrepo": ogboot_gitrepo, "ogboot_samba_user": ogboot_samba_user, "ogboot_samba_pass": ogboot_samba_pass, } elif component == "ogRepository": stdscr.addstr(3, 4, "ogRepository IP Server: ", curses.color_pair(1)) ogrepository_ip = stdscr.getstr(3, 28, 20).decode("utf-8") stdscr.addstr(4, 4, "ogRepository Sambauser: ", curses.color_pair(1)) ogrepository_samba_user = stdscr.getstr(4, 28, 20).decode("utf-8") stdscr.addstr(5, 4, "ogRepository Sambapass: ", curses.color_pair(1)) ogrepository_samba_pass = stdscr.getstr(5, 28, 20).decode("utf-8") config_data = { "ogrepository_ip": ogrepository_ip, "ogrepository_samba_user": ogrepository_samba_user, "ogrepository_samba_pass": ogrepository_samba_pass, } # Guardar en archivo JSON config_file = os.path.join(CONFIGS_DIR, f"config_{component}.json") with open(config_file, "w") as f: json.dump(config_data, f) stdscr.clear() stdscr.addstr(2, 2, f"Configuración de {component} guardada en {config_file}", curses.color_pair(1)) stdscr.refresh() stdscr.getch() curses.noecho() # Desactivar el eco después de la entrada curses.wrapper(main)