Ansible 需要将行块添加到文本文件中
如果conf文件中已经存在不应该添加到配置文件中的内容,我需要在远程服务器上的配置文件中添加一段代码。 当值固定时,代码工作正常,但超时值和会话值从一台服务器更改为另一台服务器。例如,在第一台服务器上,超时值为100,在第二台服务器上,代码不工作时,超时值为150Ansible 需要将行块添加到文本文件中,ansible,Ansible,如果conf文件中已经存在不应该添加到配置文件中的内容,我需要在远程服务器上的配置文件中添加一段代码。 当值固定时,代码工作正常,但超时值和会话值从一台服务器更改为另一台服务器。例如,在第一台服务器上,超时值为100,在第二台服务器上,代码不工作时,超时值为150 - shell: cat /tmp/httpd.conf | egrep -i "Timeout 100| session 200"| wc -l register: test_grep - debug: var=test_
- 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
一个选项是首先使用
lineinfle
模块删除任何匹配的行。例如:
- lineinfile:
path: /tmp/httpd.conf
state: absent
regexp: '^ *(Timeout|Session) \d+'
- blockinfile:
path: /tmp/httpd.conf
block: |
Timeout 100
Session 200
这将从配置中删除任何超时
或会话
行,然后添加所需的块。这种解决方案的缺点是它总是会导致变化
如果您不想这样做,您可以只使用lineinfle
,如下所示:
- lineinfile:
path: /tmp/httpd.conf
state: present
regexp: '^ *{{ item.0 }} \d+'
line: '{{ item.0 }} {{ item.1 }}'
loop:
- [Timeout, 100]
- [Session, 200]
这样做的好处是,如果文件中已经包含了所需的行,则任务不会显示任何更改