187 lines
5.9 KiB
Python
187 lines
5.9 KiB
Python
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()
|
|
isRegistered = PosteLinuxMint.isRegistered()
|
|
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("-s", "--section", help="Section du fichier à utiliser (prod par défaut)", default="prod")
|
|
parser.add_argument("--runCompliance", help="Ne présente pas le menu et exécuter la conformité", action=argparse.BooleanOptionalAction)
|
|
args = parser.parse_args()
|
|
|
|
config = readConfig(args.config, args.section)
|
|
|
|
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.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()
|