我想使用
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 可以区分它们。
blockinfile
的更多信息。
为了添加讨论,如果使用自定义 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