我正在尝试在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文本”。
答案 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"
]
}