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
的更多信息。
我想使用 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
的更多信息。