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

问题描述:

我目前正在撰写的Ansible手册的一部分包括以root用户身份创建新用户,为该特定用户安装rvm,然后切换到它们以运行rvm。但似乎并不需要。这是我目前正在运行的。如何以特定用户身份运行Ansible任务

--- 
- 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 

(这些特定的壳步骤似乎是安装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并看到which rvm返回一个路径。

这看起来像一个路径问题,即新创建的rvmuser没有在其$PATHrvm

尽量完整路径rvm这个任务:

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

不幸的是,这是不是这样的。如果我手动SSH进入机器并切换到rvmuser,那么'哪个rvm'成功。它所在的目录也出现在'PATH'变量中。 – TheSoundDefense

+3

Ansible在传输模块并执行它们时不使用登录shell,这就是为什么它没有选择'rvm'用户的'$ PATH'。您可以使用完整路径运行'rvm'或者在shell任务中输入env:伪代码' - shell:。/etc/environment && commandhere' – Zlemini

+0

啊,这很有道理。这似乎已经成功了!现在我需要弄清楚预期。谢谢! – TheSoundDefense