最近我们切换到了 Ansible 自动化平台 2.3。我的执行环境是ee-支持-rhel8其中包含 Ansible.posix.synchronize 模块。
当我执行同步模块时,出现以下错误:
“src:/tmp/memo.txt 没有此文件”。
它在 Tower 1.2 中运行,没有任何问题。
- Name: Install rsync on the Target
package:
name: rsync
state: present
- Name: Synchronize file from local to remote
synchronize:
src: /tmp/memo.txt
dest: /temp/test
错误
“命令”:
"/usr/bin/rsync --delay-updates -F --compress --archive --rsh='/usr/bin/ssh -S none -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' --out-format='<<CHANGED>>%i %n%L' /tmp/memo.txt root@xyz1234:/tmp/test"
,
“msg”:“警告:已将‘xyz1234,148.168.65.73’(ECDSA)永久添加到已知主机列表中。\r\n警告!\n此系统……有关更多信息,请查阅当地企业的员工隐私声明或联系您当地的隐私官。\nrsync:link_stat“/tmp/memo.txt”失败:没有此文件或目录(2)\nrsync 错误:某些文件/属性未传输(请参阅前面的错误)(代码 23)在 main.c(1189) [sender=3.1.3]\n”,
我将源文件保存在控制节点和执行节点中,但仍然失败。
我还将源保存在单独的远程服务器中。这也失败了。它抛出了错误:源和目标都不能位于远程。
请提出建议。
答案1
错误说:
rsync:link_stat“/tmp/memo.txt”失败:没有此文件或目录
简短回答:文件/tmp/备忘录.txt控制器上缺少。
详情:第一例子展示如何使用该模块
- name: Synchronization of src on the control machine to dest on the remote hosts
ansible.posix.synchronize:
src: some/relative/path
dest: /some/absolute/path
例如,下面的游戏
- hosts: test_01
tasks:
- package:
name: rsync
- synchronize:
src: /tmp/memo.txt
dest: /tmp/test
同步文件/tmp/备忘录.txt在控制器上对文件/tmp/测试在远程主机上测试_01. 给定控制器上的文件
shell> cat /tmp/memo.txt
test rsync
确保文件已同步到远程主机
shell> ssh admin@test_01 cat /tmp/test
test rsync
可以通过删除文件来重现该错误/tmp/备忘录.txt来自控制器:
致命:[test_01]:失败!=> 已更改=false cmd:/usr/bin/rsync --delay-updates -F --compress --archive --rsh='/usr/bin/ssh -S none -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' --rsync-path='sudo -u root rsync' --out-format='<>%i %n%L' /tmp/memo.txt admin@test_01:/tmp/test msg:|- 警告:已将“test_01”(ED25519)永久添加到已知主机列表中。 rsync:[发送方] link_stat“/tmp/memo.txt”失败:没有该文件或目录(2)rsync 错误:某些文件/属性未传输(参见前面的错误)(代码 23)位于 main.c(1338) [sender=3.2.7] rc: 23
答案2
我找到了解决方案。
AAP 使用容器作为执行环境。如果容器无法识别 /tmp/memo.txt,则任务将失败。
如果要同步的文件是包含剧本的项目的一部分,那么它就存在于容器内。如果要同步的文件/文件夹位于其他地方,则需要将该任务委托给要同步的文件所在的源系统。
谢谢您的帮助