2017-04-12 109 views
1

我目前正在撰寫的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返回一個路徑。

回答

2

這看起來像一個路徑問題,即新創建的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

相關問題