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}}
    ,当然要用变量替换
  • 我知道上面的例子可以通过lineinfle轻松实现,但是让我们假设很多行都需要这样做(不是一个块,分散在一个文本文件中),有没有一种方法可以通过模板/Jinja2来实现而不是使用循环的lineinfle

    问:“是否有一种方法可以通过模板/Jinja2实现,即只替换配置文件中的几行,而不是使用循环替换lineinfle?”

    答:否。Modul
    template
    首先从模板创建一个临时文件。然后将此临时文件与当前文件(如果有)进行比较,如果文件不同,则写入该文件

    您需要的是获取当前文件并通过添加行创建模板,这实际上是
    lineinfle
    模块的功能

    问:“是否有一种方法可以通过模板/Jinja2实现,即只替换配置文件中的几行,而不是使用循环替换lineinfle?”

    答:否。Modul
    template
    首先从模板创建一个临时文件。然后将此临时文件与当前文件(如果有)进行比较,如果文件不同,则写入该文件


    您正在寻找的是获取当前文件并通过添加行来创建模板,这实际上是
    lineinfle
    模块的功能。

    lineinfle的“
    多行
    ”有什么问题?慢吗?它应该更有效吗?目标是什么?lineinfle的“
    多行”
    ”有什么问题?慢吗?它应该更有效吗?目标是什么?谢谢你,弗拉基米尔,这也是我的理解,只是想和社区核实一下,看看有没有更好的办法。不客气,布莱特。这就是关于这些文件的资料。谢谢,弗拉基米尔,这也是我的理解,只是想和社区核实一下,看看有没有更好的办法。不客气,布莱特。这就是关于这些文件的可用信息。
    #jinja template
    #ignore lines if it's not matched
         OOM score = {{ variable }}