我需要在远程服务器上的配置文件中添加代码块,如果该内容已经存在于conf文件中,则不应将其添加到配置文件中。 当值固定不变但超时值和会话值从一个服务器更改为另一个时(例如,第一台服务器上的Timeout为100,第二台服务器上为150),该代码工作正常。
- shell: cat /tmp/httpd.conf | egrep -i "Timeout 100| session 200"| wc -l
register: test_grep
- debug: var=test_grep.stdout
- blockinfile:
path: /tmp/httpd.conf
block: |
Timeout 100
session 200
when test_grep.stdout == "0"
期望值应始终为
Timeout 100
Session 200
答案 0 :(得分:1)
一种选择是首先使用lineinfile
模块删除所有匹配的行。例如:
- lineinfile:
path: /tmp/httpd.conf
state: absent
regexp: '^ *(Timeout|Session) \d+'
- blockinfile:
path: /tmp/httpd.conf
block: |
Timeout 100
Session 200
这将从配置中删除任何Timeout
或Session
行,然后添加所需的块。该解决方案的不利之处在于,它将始终导致变更。
如果您不想这么做,则可以只使用 lineinfile
来做到这一点,就像这样:
- lineinfile:
path: /tmp/httpd.conf
state: present
regexp: '^ *{{ item.0 }} \d+'
line: '{{ item.0 }} {{ item.1 }}'
loop:
- [Timeout, 100]
- [Session, 200]
这具有以下优点:如果文件已经包含所需的行,则任务将不会显示任何更改。