Ansible Jinja2模板是否仅替换配置文件的几行?(Jinja2模板没有覆盖目标文件的全部内容)
例如,配置文件如下所示:Ansible Jinja2模板是否仅替换配置文件的几行?(Jinja2模板没有覆盖目标文件的全部内容),ansible,jinja2,Ansible,Jinja2,例如,配置文件如下所示: # 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 per
# 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分数=
OOM score=
匹配,则将行更改为OOM score={{variable}}
,当然要用变量替换template
首先从模板创建一个临时文件。然后将此临时文件与当前文件(如果有)进行比较,如果文件不同,则写入该文件
您需要的是获取当前文件并通过添加行创建模板,这实际上是lineinfle
模块的功能
问:“是否有一种方法可以通过模板/Jinja2实现,即只替换配置文件中的几行,而不是使用循环替换lineinfle?”
答:否。Modultemplate
首先从模板创建一个临时文件。然后将此临时文件与当前文件(如果有)进行比较,如果文件不同,则写入该文件
您正在寻找的是获取当前文件并通过添加行来创建模板,这实际上是
lineinfle
模块的功能。lineinfle的“多行
”有什么问题?慢吗?它应该更有效吗?目标是什么?lineinfle的“多行”
”有什么问题?慢吗?它应该更有效吗?目标是什么?谢谢你,弗拉基米尔,这也是我的理解,只是想和社区核实一下,看看有没有更好的办法。不客气,布莱特。这就是关于这些文件的资料。谢谢,弗拉基米尔,这也是我的理解,只是想和社区核实一下,看看有没有更好的办法。不客气,布莱特。这就是关于这些文件的可用信息。
#jinja template
#ignore lines if it's not matched
OOM score = {{ variable }}