Ansible-通过cat命令附加文件内容

时间:2019-05-28 10:01:00

标签: ansible

我正在下载带有一些文本的文件,并且希望将此文本附加到另一个文件。

在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

1 个答案:

答案 0 :(得分:0)

出于奇怪的原因,您假定运行Ansible时的工作目录与从shell尝试时的工作目录相同。这是不正确的(您可以始终通过将pwd作为command运行来进行验证并检查输出)。因此,您需要在命令参数中指定完整路径,或者使用chdir以确保您确实在正确的目录中(文档:https://docs.ansible.com/ansible/2.5/modules/command_module.html

编辑

似乎我从链接文档中忽略了该部分:

  

给定的命令将在所有选定的节点上执行。它不会通过外壳进行处理,因此像$ HOME这样的变量和像“ <”,“>”,“ |”,“;”之类的操作和“&”将不起作用

因此您需要采取其他方法,因为普通重定向不会简单地起作用。在guest虚拟机上使用命令的另一种方法是shell module,它不太严格(而且更加原始)。