135 lines
6.3 KiB
Python
135 lines
6.3 KiB
Python
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)
|