Dan*_*iel 2 ansible ansible-playbook
我正在构建一个Ansible playbook,在将playbook应用到远程服务器之前,我正在使用Vagrant作为测试平台.
我在让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
Run Code Online (Sandbox Code Playgroud)
当我运行这个我得到这个:
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 vagrant@127.0.0.1:/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
Run Code Online (Sandbox Code Playgroud)
如果我提供的话,sudo: yes不应该以root身份运行所有命令,包括Synchronize?
该Ansible同步模块页面有一些大毛茸茸的警告:
dest路径的远程用户将始终是remote_user,而不是sudo_user.
有一个建议,换rsync用sudo这样的:
# Synchronize using an alternate rsync command
synchronize: src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync"
Run Code Online (Sandbox Code Playgroud)
还有一个建议是使用详细程度来调试真正发生的事情.在这种情况下,它意味着添加-vvv甚至-vvvv是你的ansible-playbook命令行执行.
最后,这是使用适当权限的好时机,特别是对于像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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5982 次 |
| 最近记录: |