Une partie du livre de jeu Ansible que j'écris actuellement implique la création d'un nouvel utilisateur en tant qu'utilisateur root, en installant rvm
pour cet utilisateur spécifique, puis en basculant vers eux pour exécuter rvm
. Il ne semble pas prendre, cependant. Voici ce que je cours actuellement.Comment exécuter des tâches Ansible en tant qu'utilisateur spécifique
---
- name: Install pexpect
yum:
name: pexpect
state: latest
- name: Create rvm group
group:
name: rvm
state: present
- name: Create rvmuser
user:
name: rvmuser
state: present
group: rvm
password: "{{vault_rvm_password}}"
- name: Download signing key
shell: "command curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -"
become: True
become_user: rvmuser
- name: RVM single-user install
shell: "curl -L https://get.rvm.io | bash -s stable"
become: True
become_user: rvmuser
- name: Install Ruby
shell: "rvm install 2.2.1"
become: True
become_user: rvmuser
(Ces particulières étapes shell semblent être le meilleur moyen d'installer une version spécifique de Ruby, j'ai essayé d'utiliser yum
d'installer un RPM, mais gem
échoue.)
En fait, quand il obtient à l'étape "Install Ruby", il échoue car il ne peut pas trouver rvm
, ce qui est une indication forte qu'il essaie toujours d'exécuter la commande en tant que root. Voici l'erreur:
TASK [ruby : Install Ruby] *****************************************************
fatal: [10.121.250.21]: FAILED! => {"changed": true, "cmd": "rvm install 2.2.1", "delta": "0:00:00.007545", "end": "2017-04-12 16:14:35.974732", "failed": true, "rc": 127, "start": "2017-04-12 16:14:35.967187", "stderr": "/bin/sh: rvm: command not found", "stdout": "", "stdout_lines": [], "warnings": []}
Est-ce que je fais cela de manière incorrecte, ou est-ce que quelque chose d'autre va mal dans les coulisses?
EDIT: L'utilisateur a été créé correctement, j'ai confirmé. Après avoir exécuté les cinq premières étapes, je peux SSH dans la machine, passer à rvmuser
et voir que which rvm
renvoie un chemin.
Malheureusement, ce n'est pas le cas. Si je manuellement SSH dans la machine et passez à rvmuser, 'quel rvm' réussit. Le répertoire dans lequel il se trouve apparaît également dans la variable 'PATH'. – TheSoundDefense
Ansible n'utilise pas de shell de connexion lorsqu'il transfère des modules et les exécute, c'est pourquoi il ne récupère pas le '$ PATH' de l'utilisateur' rvm'. Vous pouvez exécuter 'rvm' avec le chemin d'accès complet ou l'envoyer dans une tâche shell: pseudocode' - shell:./etc/environment && commandhere' – Zlemini
Ahh, ça a du sens. Cela semble avoir fait l'affaire! Maintenant, je dois comprendre attendre. Merci! – TheSoundDefense