Ansible 需要将行块添加到文本文件中

Ansible 需要将行块添加到文本文件中,ansible,Ansible,如果conf文件中已经存在不应该添加到配置文件中的内容,我需要在远程服务器上的配置文件中添加一段代码。 当值固定时,代码工作正常,但超时值和会话值从一台服务器更改为另一台服务器。例如,在第一台服务器上,超时值为100,在第二台服务器上,代码不工作时,超时值为150 - shell: cat /tmp/httpd.conf | egrep -i "Timeout 100| session 200"| wc -l register: test_grep - debug: var=test_

如果conf文件中已经存在不应该添加到配置文件中的内容,我需要在远程服务器上的配置文件中添加一段代码。 当值固定时,代码工作正常,但超时值和会话值从一台服务器更改为另一台服务器。例如,在第一台服务器上,超时值为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

一个选项是首先使用
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]
这样做的好处是,如果文件中已经包含了所需的行,则任务不会显示任何更改