【发布时间】:2020-09-02 21:25:00
【问题描述】:
例如配置文件如下:
# debug flags = 0x0000000000000000
# debug log = /var/log/netdata/debug.log
# error log = /var/log/netdata/error.log
# access log = /var/log/netdata/access.log
# facility log = daemon
# errors flood protection period = 1200
# errors to trigger flood protection = 200
# OOM score = 1000
我知道我可以制作一个如下的 Jinja 文件来轻松实现将某些参数定义为变量的任务:
# debug flags = 0x0000000000000000
# debug log = /var/log/netdata/debug.log
# error log = /var/log/netdata/error.log
# access log = /var/log/netdata/access.log
# facility log = daemon
# errors flood protection period = 1200
# errors to trigger flood protection = 200
OOM score = {{ variable }}
但是如果基本文件本身不是完全确定的,文本的其他部分可能会随着时间而改变(我们不希望由于 Ansible/Jinja2 冻结更改以使其成为静态),所以可以我只是用我关心的行定义了一个Jinja2模板文件,逻辑可能是这样的:
- 忽略与
OOM score =不匹配的行 - 如果该行匹配
OOM score =,则将该行更改为OOM score = {{ variable }},当然要替换为变量。
#jinja template
#ignore lines if it's not matched
OOM score = {{ variable }}
我知道上面的情况可以通过lineinfile轻松实现,但是假设很多行都需要这样做(不是块,分散在文本文件中) ,有没有办法通过template/Jinja2 而不是lineinfile with loops来实现?
【问题讨论】:
-
lineinfile 的“
many lines”有什么问题?慢吗?它应该更有效吗?目标是什么?