2017-06-01 74 views
1

我正在致力於Ansible playbook以執行我的一些任務。在我的一個任務中,我需要切換到特定的目錄,然後使用sudo執行命令,但是我需要先切換到root用戶來完成所有這些操作,否則它將無法工作。所以一般這是我做的不ansible:通過切換到root用戶執行命令

[email protected]:/tmp/parallel-20140422$ sudo su 
[email protected]:/tmp/parallel-20140422# sudo ./configure && make && make install 

完成以上步驟之後,我看到GNU並行庫安裝到我的系統正常。但通過使用Ansible的以下步驟,我沒有看到我的GNU庫被安裝。

- name: install gnu parallel 
    command: chdir=/tmp/parallel-20140422 sudo ./configure && make && make install 

現在我的問題是如何切換到root用戶並執行特定的命令。我正在運行Ansible 1.5.4,看起來像我無法升級。我甚至低於嘗試,但它仍然無法正常工作:

- name: install gnu parallel 
    command: chdir=/tmp/parallel-20140422 sudo ./configure && make && make install 
    sudo: true 
    sudo_user: root 

我使用下面的命令運行我的劇本:

ansible-playbook -e 'host_key_checking=False' setup.yml -u david --ask-pass --sudo -U root --ask-sudo-pass 
+0

我不確定關於1.5.4,但是在Ansible 2.x中,當你想執行任意shell表達式時,你應該使用'shell'而不是'command'。爲什麼在'root'帳戶下使用'sudo',你已經擁有最大的權限? –

+0

是真正的使用sudo如果我已經切換到根。如果我已經切換到root用戶,我可以更改該部分以不再使用sudo。 – john

+0

我知道命令模塊工作正常bcoz我驗證了其他任務,他們工作正常..不知何故這個任務的問題是我需要切換到root用戶,然後只執行該命令。而且我不確定我該如何使用可靠的方法來做到這一點。 – john

回答

0

您需要become directive

例如,要啓動一個服務爲根:

- name: Ensure the httpd service is running 
    service: 
    name: httpd 
    state: started 
    become: true 

你也可以成爲另一個用戶,比如Apache用戶:

- name: Run a command as the apache user 
    command: somecommand 
    become: true 
    become_user: apache 

對於你的情況,這將是:

- name: install gnu parallel 
    command: chdir=/tmp/parallel-20140422 sudo ./configure && make && make install 
    become: true 
+0

在正確的1.5.4中,我不相信嗎?對?我無法升級看起來像 – 2017-06-07 20:41:05

0

從您的評論:

我知道命令模塊工作正常bcoz我驗證了其他任務,他們工作正常。

command模塊可能是打工的命令,但在這個例子中,你使用的shell語法(&&)執行多個命令。此語法在command模塊中不起作用(因爲此模塊直接從Python運行命令並且不支持組合命令)。

在這種情況下,您需要使用shell模塊。

- name: install gnu parallel 
    shell: ./configure && make && make install 
    args: 
    chdir=/tmp/parallel-20140422 
    sudo: true 
    sudo_user: root