2017-04-12 1 views
1

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.

Répondre

2

qui ressemble à un problème de chemin, à savoir la nouvelle rvmuser n'a pas rvm dans son $PATH:

Essayez chemin complet rvm dans cette tâche:

- name: Install Ruby 
    shell: "rvm install 2.2.1" 
    become: True 
    become_user: rvmuser 
+0

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

+3

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

+0

Ahh, ça a du sens. Cela semble avoir fait l'affaire! Maintenant, je dois comprendre attendre. Merci! – TheSoundDefense