lineinfile:如果已经存在,则不要插入行

nic*_*coX 4 ansible ansible-playbook

它正在创建一个新文件并向其中添加内容.如果再次重新运行ansible文本内容将再次应用于行下方但覆盖最后一行bantime = 86400.

我需要它做的是,如果已经应用了文本,请不要再添加它.我认为我regexp的错误.

- name: add custom settings 
  lineinfile: dest=/etc/fail2ban/jail.local regexp='^' line='maxretry = 3\nfindtime = 10800\nbantime = 86400' create=yes state=present backrefs=yes
Run Code Online (Sandbox Code Playgroud)

Yar*_*min 9

lineinfile 示例:

# Add a line to a file if it does not exist, without passing regexp
- lineinfile: dest=/tmp/testfile line="192.168.1.99 foo.lab.net foo"
Run Code Online (Sandbox Code Playgroud)

线路\n不是一条线,它们是多条线,它们在下次运行时不能作为一条线匹配.您应该将每一行添加为单独的任务:

- name: add maxretry setting
  lineinfile: dest=/etc/fail2ban/jail.local line='maxretry = 3' create=yes

- name: add findtime setting
  lineinfile: dest=/etc/fail2ban/jail.local line='findtime = 10800' create=yes

- name: add bantime setting
  lineinfile: dest=/etc/fail2ban/jail.local line='bantime = 86400' create=yes
Run Code Online (Sandbox Code Playgroud)

同时删除regexpbackerefs设置,因为它们不是必需的state,因为present它是默认值.


然而,最好还传递regexp设置和没有值的名称.因此,如果您更改设置值,它将替换文件中的字符串而不是添加新字符串,如:

- name: add maxretry setting
  lineinfile: dest=/etc/fail2ban/jail.local regexp='^maxretry = ' line='maxretry = 3' create=yes
Run Code Online (Sandbox Code Playgroud)