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)
从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)
同时删除regexp
和backerefs
设置,因为它们不是必需的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)