gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:04:18 25 4
gpt4 key购买 nike

我正在构建一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com