Ruby 如何以特定用户身份运行Ansible任务

Ruby 如何以特定用户身份运行Ansible任务,ruby,ansible,Ruby,Ansible,我目前正在编写的Ansible剧本的一部分包括创建一个新用户作为root用户,为该特定用户安装rvm,然后切换到它们以运行rvm。然而,这似乎并不需要花费时间。以下是我目前正在运行的程序 --- - name: Install pexpect yum: name: pexpect state: latest - name: Create rvm group group: name: rvm state: present - name: Create rvm

我目前正在编写的Ansible剧本的一部分包括创建一个新用户作为root用户,为该特定用户安装
rvm
,然后切换到它们以运行
rvm
。然而,这似乎并不需要花费时间。以下是我目前正在运行的程序

---
- 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
(这些特定的shell步骤似乎是安装特定版本Ruby的首选方法;我尝试使用
yum
安装RPM,但
gem
失败。)

基本上,当它进入“安装Ruby”步骤时,它失败了,因为它找不到
rvm
,这强烈表明它仍在尝试以root用户身份运行该命令。以下是错误:

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": []}
是我做得不对,还是在幕后出了什么问题


编辑:我已确认用户创建正确。运行前五个步骤后,我可以通过SSH进入机器,切换到
rvmuser
,查看
哪个rvm
返回路径。

这看起来像路径问题,即新创建的
rvmuser
在其
$path
中没有
rvm

在本任务中,尝试到
rvm
的完整路径:

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

不幸的是,情况并非如此。如果我手动SSH到机器中并切换到rvmuser,
哪个rvm
成功。它所在的目录也出现在
PATH
变量中。Ansible在传输模块和执行模块时不使用登录shell,这就是为什么它不选择
rvm
用户的
$PATH
。您可以使用完整路径运行
rvm
,也可以在shell任务中生成env:pseudocode
-shell:/etc/environment&&commandhere
Ahh,这很有道理。这似乎成功了!现在我需要弄清楚你的期望。谢谢这是怎么解决的?我现在也有同样的问题。你能帮我分享你的解决方案吗?@alexventuraio预期的答案解决了我的问题(以及下面的评论)。