Ansible

Ansible 正則表達式在文件中添加塊是錯誤的

  • June 3, 2020

我想在下面顯示的 ansible 任務<IfModule mod_ssl.c>之間添加一個塊。我使用和。</IfModule>``/etc/apache2/mods-available/ssl.conf``blockinfile``insertbefore

不幸的是,該塊總是添加</IfModule>到文件底部之後。我想我的正則表達式是錯誤的。

- name: Apache2 > update SSL conf
 become: yes
 blockinfile:
   path: /etc/apache2/mods-available/ssl.conf
   block: |
     # Requires Apache >= 2.4
     SSLCompression off
     SSLUseStapling on
     SSLStaplingCache "shmcb:logs/stapling-cache(150000)"

     # Requires Apache >= 2.4.11
     SSLSessionTickets Off

     Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
     Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
   marker: ""
   insertbefore: '^<\/IfModule>'
 notify:
   - Restart apache2

我嘗試了以下正則表達式但沒有成功:

insertbefore: '/^<\/IfModule>/m'
insertbefore: "<\/IfModule>"
insertbefore: "</IfModule>"
insertbefore: "</IfModule> "
insertbefore: '^<\/IfModule>$'
insertbefore: "</IfModule>"
insertbefore: '(?m)^<\/IfModule>\\s?$'
insertbefore: '^</IfModule>\s?$'

如果有人可以幫助我修復我的正則表達式,我將不勝感激。謝謝。

短篇小說

獲勝者正則表達式是insertbefore: "^</IfModule>\\s?$"

長話短說

我有另一個想法來完成所有事情:

-首先,要</IfModule>在文件底部刪除一項任務

-其次,要在文件底部添加塊的

一項任務-第三,要</IfModule>在底部添加一項任務文件的

我寫了第一個新任務:

- name: Apache2 > Removes </IfModule>
 become: yes
 lineinfile:
   dest: /etc/apache2/mods-available/ssl.conf
   regexp: "^</IfModule>\\s?$"
   state: absent

我意識到我剛剛寫了正確的正則表達式……我的錯誤是逃避/

:-)

自行管理所有內容的正確任務:

- name: Apache2 > update SSL conf
 become: yes
 blockinfile:
   path: /etc/apache2/mods-available/ssl.conf
   block: |
     # Requires Apache >= 2.4
     SSLCompression off
     SSLUseStapling on
     SSLStaplingCache "shmcb:logs/stapling-cache(150000)"

     # Requires Apache >= 2.4.11
     SSLSessionTickets Off

     ## HSTS (mod_headers is required) (15768000 seconds = 6 months)
     Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"

     ## Transmit cookies over secure connection only
     Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
   insertbefore: "^</IfModule>\\s?$"
 notify:
   - Restart apache2

Anx 的評論讓我放回了 blockinfile 標記以保持任務冪等。

引用自:https://serverfault.com/questions/960464