Ansible Synchronize 无法以 root 身份创建目录

标签 ansible

我正在构建一个 Ansible 剧本,在将剧本应用到远程服务器之前,我使用 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

当我运行它时,我得到了这个:

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

如果我提供 sudo: yes 是不是所有命令都应该以 root 身份运行,包括 Synchronize?

最佳答案

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

The remote user for the dest path will always be the remote_user, not the sudo_user.

有人建议用 sudo 包装 rsync ,如下所示:

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

还有一个建议是使用详细信息来调试真正发生的事情。在这种情况下,这意味着将 -vvv 甚至 -vvvv 添加到您的 ansible-playbook 命令行执行中。

最后,这是使用适当权限的好时机,尤其是对于 www 目录等非系统文件。这将解决您在此过程中遇到的问题。

# 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

关于Ansible Synchronize 无法以 root 身份创建目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26321384/

相关文章:

ansible - 如何让ansible使用服务而不是systemctl?

ansible - 使用 Ansible 读取远程节点上的 INI 文件中的选项的正确方法是什么?

amazon-web-services - Ansible - 如何启动(购买)保留的 EC2 实例

Ansible非root sudo用户和 "become"权限提升

ansible - 包含和标签在 ansible 中不起作用

ansible - 运行 ansible 剧本时出现模糊弃用错误

variables - 命令行中的 Ansible 嵌套变量

ansible - 是否可以在 Ansible 中定义 playbook 全局变量?

docker - docker_container:如何添加多个卷

arrays - Ansible 解析来自 Register 的 JSON 数组