diff --git a/ansible/ajoute-utilisateur.yml b/ansible/ajoute-utilisateur.yml index 6c219c7..efb3682 100644 --- a/ansible/ajoute-utilisateur.yml +++ b/ansible/ajoute-utilisateur.yml @@ -8,13 +8,13 @@ - users - lpadmin - sambashare - vars_prompt: - - name: username - prompt: "Identifiant de l'utilisateur concerné" - private: false - - name: prenom_nom - prompt: "Prénom et nom de l'utilisateur" - private: false + # vars_prompt: + # - name: username + # prompt: "Identifiant de l'utilisateur concerné" + # private: false + # - name: prenom_nom + # prompt: "Prénom et nom de l'utilisateur" + # private: false tasks: - name: Configure un compte pour {{ username }} diff --git a/config.yml b/config.yml index 43f9023..814943b 100644 --- a/config.yml +++ b/config.yml @@ -1,10 +1,31 @@ +### Chemin dans lequel se trouvent les playbooks ansible base_path: ansible -ansiblemenu: + +### Liste des playbooks ansible +# ansible_playbooks: +# cle_monplaybook: +# # Obligatoire : le nom du fichier playbook +# playbook: monplaybook.yml +# # Si précisé, texte de la ligne présentée dans le menu pour une exécution +# menu_title: "Excuter cle_monplaybook" +# # Si précisé, texte d'explication de l'argument à fournir pour exécuter le playbook, l'argument étant à passer sous la forme de --cle_monplaybook +# argument_help: "Executer cle_monplaybook" +# # Si précisé, liste de questions (syntaxe inquirerpy) à poser avant de lancer le playbook, chaque réponse +# # étant fournie au playbook par une entrée ayant pour nom la valeur de var_name dans l'extra_vars fourni à ansible-playbook +# questions: +# - var_name: valeur1 +# - type: input +# - message: Quelle est la valeur 1 ? +# # Si précisé, des variables supplémentaires à passer au playbook à travers l'option --extra_vars d'ansible-playbook +# extra_vars: +# extra_packages: +# # facultatif, pour s'appuyer sur un proxy cache apt tel que apt-cacher-ng (doit répondre à l'adresse `apt-proxy`) +# - auto-apt-proxy + +ansible_playbooks: firstboot: - menu_title: Exécuter la préparation au premier démarrage argument_help: Ne présente pas le menu et prépare le système au premier démarrage playbook: firstboot.yml - menu_hidden: true extra_vars: extra_packages: # facultatif, pour s'appuyer sur un proxy cache apt tel que apt-cacher-ng (doit répondre à l'adresse `apt-proxy`) @@ -24,6 +45,13 @@ ansiblemenu: menu_title: Ajoute un utilisateur argument_help: Ne présente pas le menu et ajoute un utilisateur playbook: ajoute-utilisateur.yml + questions: + - var_name: username + type: input + message: "Identifiant de l'utilisateur concerné" + - var_name: prenom_nom + type: input + message: "Prénom et nom de l'utilisateur" ajoute-sudoer: menu_title: Ajoute un administrateur diff --git a/linuxinstaller/AnsibleActions.py b/linuxinstaller/AnsibleActions.py index b9d3f46..95c549d 100644 --- a/linuxinstaller/AnsibleActions.py +++ b/linuxinstaller/AnsibleActions.py @@ -1,13 +1,23 @@ import subprocess import json +from InquirerPy import inquirer +from InquirerPy import prompt def runAnsiblePlaybook(config, key): - if 'extra_vars' in config['ansiblemenu'][key]: - subprocess.check_call(['ansible-playbook', config['ansiblemenu'][key]['playbook'], - '--extra-vars', json.dumps(config['ansiblemenu'][key]['extra_vars']) ], + extra_vars={} + if 'questions' in config['ansible_playbooks'][key]: + for question in config['ansible_playbooks'][key]['questions']: + extra_vars[question['var_name']] = prompt(questions) + + if 'extra_vars' in config['ansible_playbooks'][key]: + extra_vars = extra_vars | config['ansible_playbooks'][key]['extra_vars'] + + if len(extra_vars) > 0: + subprocess.check_call(['ansible-playbook', config['ansible_playbooks'][key]['playbook'], + '--extra-vars', json.dumps(config['ansible_playbooks'][key]['extra_vars']) ], cwd=config['base_path']) else: - subprocess.check_call(['ansible-playbook', config['ansiblemenu'][key]['playbook']], cwd=config['base_path']) + subprocess.check_call(['ansible-playbook', config['ansible_playbooks'][key]['playbook']], cwd=config['base_path']) def pullAnsiblePlaybook(url, playbook): subprocess.check_call(['ansible-pull', '-U', url, playbook]) diff --git a/linuxinstaller/linuxinstaller.py b/linuxinstaller/linuxinstaller.py index ed4d89b..eaf6e19 100644 --- a/linuxinstaller/linuxinstaller.py +++ b/linuxinstaller/linuxinstaller.py @@ -127,18 +127,20 @@ def main(): currentBranch = GitActions.getBranch() parser = argparse.ArgumentParser(prog="linuxinstaller.py", description="Menu de configuration Libretic") - for entry in config['ansiblemenu']: - parser.add_argument("--" + entry, help=config['ansiblemenu'][entry]['argument_help'], action='store_true') + for entry in config['ansible_playbooks']: + if 'argument_help' in config['ansible_playbooks'][entry]: + parser.add_argument("--" + entry, help=config['ansible_playbooks'][entry]['argument_help'], action='store_true') + args = parser.parse_args() menu_main = { "Définir le hostname": hostnameChoice, } - for entry in config['ansiblemenu']: - if not config['ansiblemenu'][entry].get('menu_hidden', False): + for entry in config['ansible_playbooks']: + if 'menu_title' in config['ansible_playbooks'][entry]: menu_main = menu_main | { - config['ansiblemenu'][entry]['menu_title']: lambda e=entry: AnsibleActions.runAnsiblePlaybook(config, e) + config['ansible_playbooks'][entry]['menu_title']: lambda e=entry: AnsibleActions.runAnsiblePlaybook(config, e) } menu_main = menu_main | { @@ -149,7 +151,7 @@ def main(): # Exécute les options passées sur la ligne de commande cmdlineOptionPassed = False - for entry in config['ansiblemenu']: + for entry in config['ansible_playbooks']: if entry in list(arg for arg in vars(args) if getattr(args, arg)): AnsibleActions.runAnsiblePlaybook(config, entry) cmdlineOptionPassed = True