我想使用 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'] }}

模块(或相关模式)是否可以仅在特定行不存在时检查并插入特定行?

ansible 2.0.0.2 上使用 Ubuntu 16.04.01

最佳答案

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

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

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

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

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

关于Ansible blockinfile 模块幂等?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41549633/

10-09 08:44