questions

This commit is contained in:
Navas 2024-10-19 17:14:13 +02:00
parent dba429c1c6
commit 867b635ba1
4 changed files with 60 additions and 20 deletions

View file

@ -8,13 +8,13 @@
- users - users
- lpadmin - lpadmin
- sambashare - sambashare
vars_prompt: # vars_prompt:
- name: username # - name: username
prompt: "Identifiant de l'utilisateur concerné" # prompt: "Identifiant de l'utilisateur concerné"
private: false # private: false
- name: prenom_nom # - name: prenom_nom
prompt: "Prénom et nom de l'utilisateur" # prompt: "Prénom et nom de l'utilisateur"
private: false # private: false
tasks: tasks:
- name: Configure un compte pour {{ username }} - name: Configure un compte pour {{ username }}

View file

@ -1,10 +1,31 @@
### Chemin dans lequel se trouvent les playbooks ansible
base_path: 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: 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 argument_help: Ne présente pas le menu et prépare le système au premier démarrage
playbook: firstboot.yml playbook: firstboot.yml
menu_hidden: true
extra_vars: extra_vars:
extra_packages: extra_packages:
# facultatif, pour s'appuyer sur un proxy cache apt tel que apt-cacher-ng (doit répondre à l'adresse `apt-proxy`) # 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 menu_title: Ajoute un utilisateur
argument_help: Ne présente pas le menu et ajoute un utilisateur argument_help: Ne présente pas le menu et ajoute un utilisateur
playbook: ajoute-utilisateur.yml 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: ajoute-sudoer:
menu_title: Ajoute un administrateur menu_title: Ajoute un administrateur

View file

@ -1,13 +1,23 @@
import subprocess import subprocess
import json import json
from InquirerPy import inquirer
from InquirerPy import prompt
def runAnsiblePlaybook(config, key): def runAnsiblePlaybook(config, key):
if 'extra_vars' in config['ansiblemenu'][key]: extra_vars={}
subprocess.check_call(['ansible-playbook', config['ansiblemenu'][key]['playbook'], if 'questions' in config['ansible_playbooks'][key]:
'--extra-vars', json.dumps(config['ansiblemenu'][key]['extra_vars']) ], 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']) cwd=config['base_path'])
else: 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): def pullAnsiblePlaybook(url, playbook):
subprocess.check_call(['ansible-pull', '-U', url, playbook]) subprocess.check_call(['ansible-pull', '-U', url, playbook])

View file

@ -127,18 +127,20 @@ def main():
currentBranch = GitActions.getBranch() currentBranch = GitActions.getBranch()
parser = argparse.ArgumentParser(prog="linuxinstaller.py", description="Menu de configuration Libretic") parser = argparse.ArgumentParser(prog="linuxinstaller.py", description="Menu de configuration Libretic")
for entry in config['ansiblemenu']: for entry in config['ansible_playbooks']:
parser.add_argument("--" + entry, help=config['ansiblemenu'][entry]['argument_help'], action='store_true') 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() args = parser.parse_args()
menu_main = { menu_main = {
"Définir le hostname": hostnameChoice, "Définir le hostname": hostnameChoice,
} }
for entry in config['ansiblemenu']: for entry in config['ansible_playbooks']:
if not config['ansiblemenu'][entry].get('menu_hidden', False): if 'menu_title' in config['ansible_playbooks'][entry]:
menu_main = menu_main | { 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 | { menu_main = menu_main | {
@ -149,7 +151,7 @@ def main():
# Exécute les options passées sur la ligne de commande # Exécute les options passées sur la ligne de commande
cmdlineOptionPassed = False 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)): if entry in list(arg for arg in vars(args) if getattr(args, arg)):
AnsibleActions.runAnsiblePlaybook(config, entry) AnsibleActions.runAnsiblePlaybook(config, entry)
cmdlineOptionPassed = True cmdlineOptionPassed = True