Ansible blockinfile 模块幂等?

问题描述 投票:0回答:2

我想使用

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

ansible ansible-2.x idempotent
2个回答
13
投票

是的。

blockinfile
模块默认是幂等的。

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

这些行应作为注释插入到配置文件中,因此根据您使用的具体配置文件格式,您可以使用

marker
参数自定义用于标记注释的字符(默认情况下为
#
)。

如果您在同一个目标文件上使用多个

blockinfile
任务,您应该另外向每个任务添加一个唯一的字符串(也在
marker
参数中),以便 Ansible 可以区分它们。

在 Ansible 文档中阅读有关

blockinfile
的更多信息。


0
投票

为了添加讨论,如果使用自定义 a

marker
,Ansible 会为每次运行添加该行,这是不希望的。

您应该确保使用

marker_end
marker_begin
来保持任务幂等性。

- name: blockinfile w begin and end markers
  blockinfile:
    marker_begin: "# begin marker"
    marker_end: "# end marker"
    dest: /my/file
    block: whatever
© www.soinside.com 2019 - 2024. All rights reserved.