它正在创建一个新文件并向其中添加内容。如果再次重新运行ansible文本内容将再次应用于行下方,但会覆盖最后一行min
。
我需要它做的是,如果文本已经应用,请不要再添加它。我认为我的bantime = 86400
设置错误。
regexp
答案 0 :(得分:8)
来自lineinfile
examples:
# 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"
与\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
同时删除regexp
和backerefs
设置,因为它们不需要state
,因为present
是默认值。
然而,使用设置和没有值的名称传递regexp会更好。因此,如果您更改设置值,它将替换文件中的字符串而不是添加新字符串,例如:
- name: add maxretry setting
lineinfile: dest=/etc/fail2ban/jail.local regexp='^maxretry = ' line='maxretry = 3' create=yes
答案 1 :(得分:1)
@ devoto13的回答是正确的。问题是你正在尝试添加多行。但是,如果您的要求是使用这些行而不是单独使用,则可以使用blockinfile模块。这也可以加快游戏速度,因为你只有一个任务,而不是每行一个。