我试图用ansible解压缩tar.gz文件(我做了很多事情),但是由于某种原因,我这次无法解决该错误。
我不断得到:
"msg": "Failed to find handler for \"/tmp/ansible_mnXJGp/internalbuildscripts1.tar.gz\". Make sure the required command to extract the file is installed. Command \"/bin/tar\" could not handle archive. Command \"/usr/bin/unzip\" could not handle archive."
奇怪的是,它似乎试图在tar.gz文件上使用解压缩。
任务看起来像这样:
- name: Download build scripts
unarchive:
src: https://sblah.com/internalbuildscripts1.tar.gz
dest: /home/xxxx/buildscripts
remote_src: yes
答案 0 :(得分:2)
所以我遇到了同样的问题,最终调试了非归档模块,以找出为什么它认为无法处理文件。
TL; DR我的dest
是相对路径。 unarchive
检查gtar
是否可以处理文件的检查是这样的:
/usr/local/bin/gtar --list -C ./my/dest/path -z -f /Users/fransf/.ansible/tmp/ansible-tmp-1603283396.0748851-45418-232955281061540/source
但这是在将工作目录ALSO设置为./my/dest/path
的情况下完成的,因此它实际上是在尝试解压缩到不存在的./my/dest/path/my/dest/path中。 !
所以这就是我的问题。我改用绝对路径,unarchive
很高兴。我确实认为这是一个错误,并且显然不是unarchive
测试套件中的测试用例。
在ANSIBLE_KEEP_REMOTE_FILES
环境变量设置为1
(即ANSIBLE_KEEP_REMOTE_FILES=1 ansible-playbook -vvvv deploy.yml
)的情况下运行您的剧本。在输出中的某处(如果您使用-vvvv
运行),您将看到类似以下内容的内容:
EXEC /bin/sh -c '/usr/local/Cellar/ansible/2.9.10/libexec/bin/python3.8 /Users/fransf/.ansible/tmp/ansible-tmp-1603283396.0748851-45418-232955281061540/AnsiballZ_unarchive.py && sleep 0'
运行相同的命令,但带有explode
参数,如下所示:
/usr/local/Cellar/ansible/2.9.10/libexec/bin/python3.8 /Users/fransf/.ansible/tmp/ansible-tmp-1603283396.0748851-45418-232955281061540/AnsiballZ_unarchive.py explode
您将获得一些输出,告诉您爆炸模块源的写入位置,例如
2955281061540/AnsiballZ_unarchive.py explode
Module expanded into:
/Users/fransf/.ansible/tmp/ansible-tmp-1603283396.0748851-45418232955281061540/debug_dir
现在,您已经可以使用print
语句或通过实际的调试器运行的Python源代码。要运行该模块,请使用与爆炸相同的命令,但指定execute
而不是explode
:
/usr/local/Cellar/ansible/2.9.10/libexec/bin/python3.8 /Users/fransf/.ansible/tmp/ansible-tmp-1603283396.0748851-45418-232955281061540/AnsiballZ_unarchive.py execute
您可以从命令行或从IDE中执行此操作。我已经在使用IntelliJ Ultimate并安装Python插件,这是我能够通过调试器运行此模块,设置断点,查看变量以及找出问题所在的全部条件。
希望这可以帮助其他有类似问题的人。