ansible: sudo -iu pour shell interactif

Existe-t-il une meilleure façon d’écrire sudo -iu username -command- pour chaque commande en mode commande quand un shell interactif est nécessaire?

Exemple:

 - name: Install nodejs {{ node_version }} shell: sudo -iu {{ nvm_user }} nvm install {{ node_version }} && sudo -iu {{ nvm_user }} nvm alias default {{ node_version }} when: not np.stat.isdir is defined 

Vous pouvez demander Ansible à sudo pour vous et invoquer bash directement comme ceci:

 - name: Install nodejs {{ node_version }} sudo_user: "{{ nvm_user }}" sudo: true shell: bash -lc 'nvm install {{ node_version }} && nvm alias default {{ node_version }}' when: np.stat.isdir is not defined 

Quelques notes:

  • Install nodejs {{ node_version }} ne sera pas interpolé
  • Vous pouvez remplacer not x is defined avec le plus naturel x is not defined
  • Vous voudrez peut-être append ‘ changed_when: pour contrôler l’état modifié de votre commande, donc votre taks est idempotent (mais il semble que vous exécutez la tâche uniquement quand un répertoire n’existe pas déjà, donc je suppose que l’état de la tâche ne peut être que skipped / changed )