对从 Ansible Tower (awx) 执行的 fetch_module 进行故障排除

2023-12-22

我正在尝试从远程主机执行一个非常简单的获取文件。不知怎的,我从来没有让它发挥作用。

从远程 Linux 机器获取到 Ansible Tower (awx) 主机(也是 Linux 机器)。

这是 Ansible 代码:

---
- name: get new private key for user
  hosts: tag_Name_ansible_kali
  become: yes
  gather_facts: no
  
 - name: fetch file
    fetch:
       src: /tmp/key
       dest: /tmp/received/
       flat: yes

这是显示提取成功的结果:

{
    "changed": true,
    "md5sum": "42abaa3160ba875051f2cb20be0233ba",
    "dest": "/tmp/received/key",
    "remote_md5sum": null,
    "checksum": "9416f6f64b94c331cab569035fb6bb825053bc15",
    "remote_checksum": "9416f6f64b94c331cab569035fb6bb825053bc15",
    "_ansible_no_log": false
}

然而,前往/tmp/received目录和ls -lah显示...

[root@ansibleserver received]# ls -lah
total 4.0K
drwxr-xr-x.  2 awx  awx     6 Mar 12 15:48 .
drwxrwxrwt. 10 root root 4.0K Mar 12 15:49 ..

我已经测试过了,如果我选择一个目标src如果文件不存在,它将无法工作,因此它显然正在连接到远程主机。问题是无论我指向哪里dest在 Ansible 服务器上,该文件实际上并未写入其中。甚至不确定它如何拥有不存在的文件的校验和。我搜索了整个驱动器,但该文件不存在。是否有另一个日志可以让我查看它实际写入文件的位置?它也不在远程主机上。

任何意见,将不胜感激。这里真的让我挠头。


在具有 Ansible 2.9.25、Python 2.7.5、Ansible Tower 3.7.x 的 RHEL 7.9.9 系统上,Tower 服务器上的用户在 CLI 上的临时获取任务的输出如下所示

ansible test --user ${USER} --ask-pass --module-name fetch --args "src=/home/{{ ansible_user }}/test.txt dest=/tmp/ flat=yes"
SSH password:
test1.example.com | CHANGED => {
    "changed": true,
    "checksum": "4e1243bd22c66e76c2ba9eddc1f91394e57f9f83",
    "dest": "/tmp/test.txt",
    "md5sum": "d8e8fca2dc0f896fd7cb4cb0031ba249",
    "remote_checksum": "4e1243bd22c66e76c2ba9eddc1f91394e57f9f83",
    "remote_md5sum": null
}
test2.example.com | FAILED! => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "msg": "file not found: /home/user/test.txt"
}

文件就留在那儿了。但该命令是在用户下启动并执行的。

与带有参数的临时命令一样从 Ansible Tower 执行src=/home/user/test.txt dest=/tmp/ flat=yes报道

test2.example.com | FAILED! => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "msg": "file not found: /home/user/test.txt"
}
test1.example..com | CHANGED => {
    "changed": true, 
    "checksum": "4e1243bd22c66e76c2ba9eddc1f91394e57f9f83", 
    "dest": "/tmp/test.txt", 
    "md5sum": "d8e8fca2dc0f896fd7cb4cb0031ba249", 
    "remote_checksum": "4e1243bd22c66e76c2ba9eddc1f91394e57f9f83", 
    "remote_md5sum": null
}

你的观察是正确的,Ansible Tower 上没有文件(awx) 服务器。如果已有文件,则将目标目录更改为报告的用户

}
test1.example.com | FAILED! => {
    "changed": false, 
    "checksum": null, 
    "dest": "/home/user/test.txt", 
    "file": "/home/user/test.txt", 
    "md5sum": null, 
    "msg": "checksum mismatch", 
    "remote_checksum": "4e1243bd22c66e76c2ba9eddc1f91394e57f9f83", 
    "remote_md5sum": null
}

已经有一个文件了。但是,如果没有文件,它也会失败。

将目标目录更改为 Ansible Tower 下运行的用户后(awx) 通过参数src=/home/user/test.txt dest=/home/awx/ flat=yes

test1.example.com | CHANGED => {
    "changed": true, 
    "checksum": "4e1243bd22c66e76c2ba9eddc1f91394e57f9f83", 
    "dest": "/home/awx/test.txt", 
    "md5sum": "d8e8fca2dc0f896fd7cb4cb0031ba249", 
    "remote_checksum": "4e1243bd22c66e76c2ba9eddc1f91394e57f9f83", 
    "remote_md5sum": null
}

文件正确地留在那里

ls -al /home/awx/
-rw-r--r--.  1 awx  awx     5 Nov  6 10:42 test.txt

关于

问题是无论我将目标指向 Ansible 服务器上的哪个位置,文件实际上都不会写入那里。 ... 任何意见,将不胜感激。 ...

看起来它是由用户上下文和缺少访问/写入权限以及可能其他观察结果引起的,例如“事实证明,Ansible Tower 实际上并没有将文件获取到自身,而只是将它们复制到远程服务器上的临时目录” https://stackoverflow.com/a/66478587/6771046.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对从 Ansible Tower (awx) 执行的 fetch_module 进行故障排除 的相关文章

随机推荐