无法使用ansible复制模块将变量的值重定向到文件

问题描述 投票:0回答:1

我只是从大量数据中获取了一个样本,我希望从变量中读取这些数据并将其转储到文件中。

cat junk.txt

{:,:"(s):"}}

垃圾中的这些数据不在我的控制范围内,而是作为数据库脚本执行的输出。

下面是我尝试将 junk.txt 中的数据转储到日志文件 github.out 中,并且在整个游戏过程中,垃圾数据应该不断附加到 github.out 中,这是我无法实现的。

---

- name: "Play 1-Find the details here"

  hosts: localhost
  gather_facts: no

  tasks:

   - name: Read junk file
     raw: "cat {{ playbook_dir }}/junk.txt"
     register: junkdata

#   - name: Dump data to file
#     raw: echo "{{ junkdata.stdout }}" >> "{{ playbook_dir }}/outputjunk.txt"

   - name: Direct script execution in Standard logs for GitHub actions (TXTstdout)
     ansible.builtin.copy:
       content: ">> TXT SUCCESS OUTPUT1- {{ junkdata.stdout }}"
       dest: "{{ playbook_dir }}/github.out"
       force: no

   - name: Direct script execution in Standard logs for GitHub actions (TXTstdout)
     ansible.builtin.copy:
       content: ">> TXT SUCCESS OUTPUT2- {{ junkdata.stdout }}"
       dest: "{{ playbook_dir }}/github.out"
       force: no

如果取消注释将内容重定向到日志文件,则注释部分会出现以下错误:

任务[将数据转储到文件]


2023 年 11 月 27 日星期一 10:21:22 -0600 (0:00:00.035)
0:00:00.087 ******

致命:[localhost]:失败! => {“已更改”:true,“msg”:“非零 返回代码", "rc": 1, "stderr": "/bin/sh: -c: 第 0 行: 语法错误 接近意外的令牌

('\n/bin/sh: -c: line 0: 
echo “{:,:”(s):”}}' ", "stderr_lines": ["/bin/sh: -c: 第 0 行:语法 意外令牌附近出现错误
('", "/bin/sh: -c: line 0: 
echo "{:,:"(s):"}}'"], "stdout": "", "stdout_lines": []}

因此,我决定使用

copy
模块将数据转储到它所做的文件中。

但我希望每个内容都继续附加到 github.out,但事实并非如此。

预期/期望的输出:

$ cat github.out
>> TXT SUCCESS OUTPUT1- {:,:"(s):"}}

>> TXT SUCCESS OUTPUT2- {:,:"(s):"}}

电流输出:

$ cat github.out

>> TXT SUCCESS OUTPUT1- {:,:"(s):"}}

如果 github.out 在上次运行中存在,则不会附加任何内容。

你能推荐一下吗?

ansible copy echo io-redirection slurp
1个回答
-1
投票

引用如下原始模块来修复第一个错误:

raw: "echo {{ junkdata.stdout }} >> {{ playbook_dir }}/outputjunk.txt"

copy
模块覆盖内容。所以使用
lineinfile
代替,并带有循环 喜欢:

   - name: Direct script execution in Standard logs for GitHub actions (TXTstdout)
     loop:
         - ">> TXT SUCCESS OUTPUT1- {{ junkdata.stdout }}"
         - ">> TXT SUCCESS OUTPUT2- {{ junkdata.stdout }}"
     ansible.builtin.lineinfile:
       path: "{{ playbook_dir }}/github.out"
       create: true
       line: "{{ item }}"
$ cat github.out
>> TXT SUCCESS OUTPUT1- {:,:"(s):"}}

>> TXT SUCCESS OUTPUT2- {:,:"(s):"}}
© www.soinside.com 2019 - 2024. All rights reserved.