Ansible Jinja模板-逐行读取文件

时间:2019-10-17 04:35:44

标签: ansible jinja2

我正在尝试在for循环内逐行解析文本文件。我可以很好地解析JSON数据,但是看似简单的任务却失败了。看来Jinja不是根据换行符来划定轮廓。

在我的YAML剧本中,我声明了源文件和查找(查询)功能:

vars:
    myfile: /some/text/file.txt
    myfile_list: "{{ query('file', myfile) }}"

源文件“ myfile”只是CIDR格式的IP列表:

1.2.3.4/32
5.6.7.8/32
10.20.30.0/24

在Jinja2模板文件中,我正在运行一个for循环:

{% for line in myfile_list %}
permit ip {{ line }} any
{% endfor %}

所需的输出是:

permit ip 1.2.3.4/32 any
permit ip 5.6.7.8/32 any
permit ip 10.20.30.0/24 any

相反,我得到了:

permit ip 1.2.3.4/32
5.6.7.8/32
10.20.30.0/24 any

我尝试了查找插件。设置“ wantlist = True”。在使用列表过滤器进行查找调用之后。如上所述,我要么每行得到一个字符,要么得到一小块文本。如果我对源文件运行Linux shell命令“文件”,则将其视为“ ASCII文本”。

2 个答案:

答案 0 :(得分:2)

  

Q:“逐行读取文件”

A:可以只读取整个文件并拆分行

yarn start:dev

答案 1 :(得分:1)

查找以单个字符串的形式返回文件的全部内容。

如果要遍历行,则需要按照以下示例拆分结果:

---
- hosts: localhost
  gather_facts: false

  vars:
    file_content: |-
      first line
      second line
      third line

  tasks:
    - debug:
        msg: "{{ file_content.split('\n') }}"

给出:

TASK [debug] ***************************************************
ok: [localhost] => {
    "msg": [
        "first line",
        "second line",
        "third line"
    ]
}