我正在下载带有一些文本的文件,并且希望将此文本附加到另一个文件。
在localhost上下载inet_licence_5文件之后。阶段文件也在localhost上。
这项工作正常:
cat ./inet_licence_5 >> ./stage
不幸的是,在Ansible中,它不起作用。
- name: Append to ./stage
command: cat ./inet_licence_5 >> ./stage
delegate_to: 127.0.0.1
错误:
TASK [Append to ./stage] *******************************
fatal: [my -> 127.0.0.1]: FAILED! => {"changed": true, "cmd":
["cat", "./inet_licence_5", ">>", "./stage"], "delta":
"0:00:00.001814", "end": "2019-05-28 11:55:22.766532", "failed":
true, "rc": 1, "start": "2019-05-28 11:55:22.764718", "stderr":
"cat: '>>': No such file or directory", "stderr_lines": ["cat: '>>':
No such file or directory"], "stdout": "asdasd", "stdout_lines":
["asdasd"]}
很奇怪,因为我正在主要地点从事这项工作。
$ ls
base inet_licence_5 playbook1.yml
$ ansible-playbook playbook1.yml
答案 0 :(得分:0)
出于奇怪的原因,您假定运行Ansible时的工作目录与从shell尝试时的工作目录相同。这是不正确的(您可以始终通过将pwd
作为command
运行来进行验证并检查输出)。因此,您需要在命令参数中指定完整路径,或者使用chdir
以确保您确实在正确的目录中(文档:https://docs.ansible.com/ansible/2.5/modules/command_module.html)
编辑
似乎我从链接文档中忽略了该部分:
给定的命令将在所有选定的节点上执行。它不会通过外壳进行处理,因此像$ HOME这样的变量和像“ <”,“>”,“ |”,“;”之类的操作和“&”将不起作用
因此您需要采取其他方法,因为普通重定向不会简单地起作用。在guest虚拟机上使用命令的另一种方法是shell module,它不太严格(而且更加原始)。