在 Ansible 自动化平台中执行同步模块导致文件未找到

在 Ansible 自动化平台中执行同步模块导致文件未找到

最近我们切换到了 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,则任务将失败。

如果要同步的文件是包含剧本的项目的一部分,那么它就存在于容器内。如果要同步的文件/文件夹位于其他地方,则需要将该任务委托给要同步的文件所在的源系统。

谢谢您的帮助

相关内容