如何从Ansible中的lookup()模块的结果中删除断路器字符'\n'?

Nis*_*ngh 25 string replace ansible

我正在使用[文件查找],它读取整个文件并将内容存储在变量中.我的游戏看起来像这样:

  - name: Store foo.xml contents in a variable
    set_fact:
     foo_content: "{{ lookup('file', 'foo.xml' ) | replace('\n', '')}}"
Run Code Online (Sandbox Code Playgroud)

所以上面的代码读取foo.xml文件并将其存储在变量中,但问题是当foo.xml行中有换行符时,它还包括变量中的换行符.

foo.xml是这个档案:

<?xml version="1.0" encoding="utf-8"?>
<initialize_param>
    <secrets>
        <my_secret id="99">3VMjII6Hw+pd1zHV5THSI712y421USUS8124487128745812sajfhsakjfasbfvcasvnjasjkvbhasdfasgfsfaj5G8A9+n8CkLxk7Dqu0G8Jclg0eb1A5xeFzR3rrJHrb2GBBa7PJNVx8tFJP3AtF6ek/F/WvlBIs2leX2fq+/bGryKlySuFmbcwBsThmPJC5Z5AwPJgGZx</my_secret>
    </secrets>
</initialize_param>
Run Code Online (Sandbox Code Playgroud)

输出删除换行符\n但也包含选项卡\ r&\ t

我需要摆脱\n,需要摆脱额外的格式(\ r&\ t),此外,在替换过滤器后,我得到错误,同时触发数据库更新查询

stderr: /bin/sh: 1: cannot open ?xml: No such file
Run Code Online (Sandbox Code Playgroud)

And*_*ier 37

使用Jinja 装饰过滤器:

"{{ lookup('file', 'foo.xml' ) | trim }}"
Run Code Online (Sandbox Code Playgroud)


udo*_*dan 26

你可以replace用过滤器吗?

contents: "{{ lookup('file', '/etc/foo.txt') | replace('\n', '')}}"
Run Code Online (Sandbox Code Playgroud)

  • @RyanFisher 不,不是。`trim` 删除前导和尾随字符,而操作者希望删除所有这些字符,包括中间的字符。另请注意,自答案发布以来,该问题已被大量修改,因此可能没有太大意义。无论如何,感谢您的反对票。:) (3认同)

rot*_*g05 6

您可以使用regex_replace过滤器,因为trim正如您在问题中提到的那样,它不会清除其他换行符。

"{{  some_stdout_to_clear | regex_replace('[\\r\\n\\t]+','') }}"
Run Code Online (Sandbox Code Playgroud)