Ansible blockinfile 模块幂等?

Ansible blockinfile module idempotent?

我想使用 blockinfile 模块在文件中插入一些行。 任务是这样的:

name: add some lines
    become: true
    blockinfile:
      dest: /etc/sysctl.conf
      block: |
        mykey1={{ kernvars['my_value1'] }}
        mykey2={{ kernvars['my_value2'] }}
        mykey3={{ kernvars['my_value3'] }}

有没有办法让模块(或相关模式)仅在特定行不存在时才检查和插入它们?

Ubuntu 16.04.01

上使用 ansible 2.0.0.2

是的。 blockinfile 模块默认是幂等的。

除了您指定的内容外,它还添加了两行:在块的开头和块的结尾。在随后的运行中,它会检查这两个标记之间的内容,如果内容没有改变,它将 returns 变为 "ok" 状态并且不会再次插入它。

这些行应该作为注释插入到配置文件中,因此根据您使用的确切配置文件格式,您可以使用 marker 参数自定义用于标记注释的字符(默认情况下是 #).

如果您在同一个目标文件上使用多个 blockinfile 任务,您应该为每个任务额外添加一个唯一的字符串(也在 marker 参数中),以便 Ansible 可以区分它们。

在 Ansible 文档中阅读有关 blockinfile 的更多信息。