如何解决如何为Ansible变量提供制表符空间
我有一个任务,正在将任务结果写入文件。写入文件时,我需要缩进。 我已经尝试了以下命令,但是它仅缩进变量的第一行。但是,我需要变量中的所有行都必须缩进。反正有这样做吗?
- name: task
shell: some command
register: result
- shell: 'echo -e \\t{{result.stdout | to_json}} >>file.txt'
解决方法
如@Seshadri注释中所述,您的shell
输出行在stdout
中全局可用,或者在stdout_lines
中每一行包含一个元素的列表中可用。
您可以使用最新的来分别对待每行。在这种情况下,您实际上不必循环。有一些功能可将相同的过滤器应用于列表的每个元素。下面的技巧可以为每个行元素添加一个制表符:
result.stdout_lines | map('regex_replace','(.*)','\\t\\g<1>')
您只需要将结果列表与新行连接在一起,即可获得预期的内容。
您应该在现有工具存在时使用ansible,而不是在可能的情况下使用shell。原因之一是模块通常会为您处理幂等性(例如,仅在内容实际更改时才写入文件)。在这种情况下,使用copy
module(而不是content
option)的src
可能是最好的解决方案。因此,您的最终解决方案将如下所示:
- name: Write my result file
copy:
dest: file.txt
content: "{{ result.stdout_lines
| map('regex_replace','\\t\\g<1>') | join('\n') }}"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。