如何避免Ansible的file lookup将换行符替换为\n?
Ansible中通过lookup获取文件时保留原始换行的方法
使用ansible.builtin.file lookup读取文件内容时,换行符会被转义为\n,无法原样输出文件的换行格式。以下是解决方法:
示例场景
foo.txt内容:
This is dummy1 This is dummy2 This is dummy3 This is dummy4 This is dummy5
原Playbook执行后,输出的msg中换行被替换为\n,不符合预期。
方案1:用var替代msg参数
debug模块的var参数会直接输出变量的原始格式,不会转义换行符。修改后的Playbook:
- name: Gather info on backend servers hosts: localhost gather_facts: no tasks: - ansible.builtin.debug: var: lookup('ansible.builtin.file', '/tmp/foo.txt')
执行后输出将保留原始换行:
TASK [ansible.builtin.debug] ******************************************************************************************************************************* ok: [localhost] => { "lookup('ansible.builtin.file', '/tmp/foo.txt')": "This is dummy1 This is dummy2 This is dummy3 This is dummy4 This is dummy5" }
方案2:使用多行块字符串定义msg
如果必须使用msg参数,可采用YAML的多行块字符串语法(|),让内容以原始换行形式输出:
- name: Gather info on backend servers hosts: localhost gather_facts: no tasks: - ansible.builtin.debug: msg: | {{ lookup('ansible.builtin.file', '/tmp/foo.txt') }}
此方式输出的msg会完全保留文件中的换行结构,匹配预期格式。
内容的提问来源于stack exchange,提问作者The Noob
相关产品推荐
相关产品推荐

