from InquirerPy import inquirer from InquirerPy import prompt from rich.console import Console from rich.table import Table import PosteLinuxMint import libreticmenuBranch import argparse import yaml import syslog import os ### Cartouche de status def print_status(): # Récupération des infos hostname = PosteLinuxMint.getHostName() domain = PosteLinuxMint.getDomain() isCompliant = PosteLinuxMint.isCompliant() currentBranch = libreticmenuBranch.getlibreticmenuBranch() # Affichage du statut console = Console() console.print() console.print("=== Menu de configuration - poste Linux Mint ===", style="bold red") console.print() table = Table(show_header=True, header_style="bold dim") table.add_column("Paramètre", style="bold magenta") table.add_column("Valeur") table.add_column("Statut", justify="center") table.add_row("Environnement du poste", currentBranch, "[green]OK" if currentBranch == "main" else "[yellow]Attention") table.add_row("Hostname", hostname, "[green]OK" if hostname != "unassigned-hostname" else "[red]KO") table.add_row("Poste configuré", str(isCompliant), "[green]OK" if isCompliant else "[red]KO") console.print(table) console.print() ### Menu du choix hostname def hostnameChoice(config, branch): questions = [ { "type": "input", "message": "Renseigner le nom de la machine : ", }, ] result = prompt(questions) fqdn = result[0] + "." + result[1] proceed = inquirer.confirm( message ="Définir {} comme nom de machine ?".format(fqdn), confirm_letter = "o", default=False).execute() if proceed: PosteLinuxMint.setFQDN(fqdn) else: print("Annulation") def complianceChoice(config, branch): PosteLinuxMint.runCompliance(config, branch) def libreticmenuBranchChoice(config, branch): questions = [ { "type": "list", "message": "Choisir le type d'environnement de ce poste :", "choices": ["main", "preprod"], "default": "main", }, ] result = prompt(questions) proceed = inquirer.confirm( message ="Définir {} comme environnement pour ce poste ?".format(result[0]), confirm_letter = "o", default=False).execute() if proceed: libreticmenuBranch.setlibreticmenuBranch(result[0]) console = Console() console.print() console.print("=== Relancer libreticmenu.sh pour bénéficier du changement d'environnement ===", style="bold red") console.print() exit() else: print("Annulation") # Chargement du fichier de configuration def readConfig(configFile): try: with open(configFile, "r") as file: config = yaml.safe_load(file) syslog.syslog(syslog.LOG_DEBUG, "Lecture du fichier de configuration {0}, contient: {1}".format(configFile, config)) return config except: syslog.syslog(syslog.LOG_DEBUG, "Impossible de lire le fichier de configuration {0}".format(configFile)) raise def addLocalAdminChoice(config, branch): questions = [ { "type": "input", "message": "Utilisateur devant être administrateur local : ", }, ] result = prompt(questions) proceed = inquirer.confirm( message ="Définir {} comme administrateur de ce poste ?".format(result[0]), confirm_letter = "o", default=False).execute() if proceed: PosteLinuxMint.addLocalAdmin(config, result[0]) else: print("Annulation") def removeLocalAdminChoice(config, branch): userlist = PosteLinuxMint.getLocalAdmins(config) if len(userlist) == 0: console = Console() console.print("=== Aucun administrateur local à supprimer ===", style="bold red") return questions = [ { "type": "list", "message": "Utilisateur ne devant plus être administrateur local : ", "choices": userlist, }, ] result = prompt(questions) proceed = inquirer.confirm( message ="Retirer {} des administrateurs de ce poste ?".format(result[0]), confirm_letter = "o", default=False).execute() if proceed: PosteLinuxMint.removeLocalAdmin(config, result[0]) else: print("Annulation") # Menu principal def main(): parser = argparse.ArgumentParser(prog="libreticmenu.py", description="Menu de configuration poste Linux Mint") parser.add_argument("-c", "--config", help="Fichier de configuration (config.yml par défaut)", default="config.yml") parser.add_argument("--cubic", help="Ne présente pas le menu et exécute le setup pour cubic", action=argparse.BooleanOptionalAction) parser.add_argument("--runCompliance", help="Ne présente pas le menu et exécute la conformité", action=argparse.BooleanOptionalAction) args = parser.parse_args() config = readConfig(args.config) menu_main = { "Définir le hostname": hostnameChoice, "Exécuter la configuration du poste": complianceChoice, "Changer le type d'environnement": libreticmenuBranchChoice, "Ajouter sudoer": addLocalAdminChoice, "Supprimer sudoer": removeLocalAdminChoice, "Quitter": None } currentBranch = libreticmenuBranch.getlibreticmenuBranch() if args.cubic: PosteLinuxMint.runCubic(config, currentBranch) exit() if args.runCompliance: PosteLinuxMint.runCompliance(config, currentBranch) exit() while True: print_status() console = Console() console.print("Choisir une des options suivantes", style="bold blue") action = inquirer.select( message = "Que souhaitez-vous faire ?", choices = menu_main.keys(), default = None).execute() if menu_main[action] != None: menu_main[action](config, currentBranch) else: break if __name__ == "__main__": main()