2014-10-12 16 views
2

我正在構建一個Ansible操作手冊,我將Vagrant用作測試平臺,然後再將該操作手冊應用到遠程服務器。Ansible同步無法創建目錄作爲根

我有問題讓Synchronize工作。作爲部署的一部分,我有一些需要移動到服務器的文件。

這是我的劇本。我將shell: whoami放在那裏以確保命令以root身份運行。

--- 
- hosts: all 
    sudo: yes 
    tasks: 
    - name: who am I 
     shell: whoami 
    - name: Sync up www folder 
     synchronize: src=www dest=/var 

當我運行此我得到這個:

failed: [default] => {"cmd": "rsync --delay-updates -FF --compress --archive --rsh 'ssh -i /Users/dan/.vagrant.d/insecure_private_key -o StrictHostKeyChecking=no -o Port=2222' --out-format='<<CHANGED>>%i %n%L' www [email protected]:/var", "failed": true, "rc": 23} 
msg: rsync: recv_generator: mkdir "/var/www" failed: Permission denied (13) 
*** Skipping any contents from this failed directory *** 
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1236) [sender=3.1.1] 


FATAL: all hosts have already failed -- aborting 

如果我提供sudo: yes不應該所有的命令以root身份運行,包括同步?

回答

5

Ansible Synchronize module page有一些大毛毛警告:

爲DEST路徑遠程用戶永遠是REMOTE_USER,不 的sudo_user。

有一個建議,包裹rsyncsudo這樣的:

# Synchronize using an alternate rsync command 
synchronize: src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync" 

還有使用冗長調試到底發生了什麼上的建議。在這種情況下,這意味着將-vvv甚至-vvvv添加到您的劇本命令行執行中。

最後,這是使用適當權限的好時機,尤其是對於非系統文件,如www dir。這將解決您在此過程中的問題。

# don't use recurse here unless you are confident how it works with directories. 
- file: dest=/var/www state=directory owner=www-data group=www-data mode=0755 
- synchronize: src=www dest=/var 
+0

喜歡關於正確權限的建議。所以我試了一下,但是我得到了'msg:不支持的module:user'參數。 – Daniel 2014-10-12 03:30:37

+0

將'user'更改爲'owner',它工作。 – Daniel 2014-10-12 03:39:09

+0

@丹尼爾編輯了答案,糾正了這一點。很高興它的工作! – tedder42 2014-10-12 06:39:54