Replace
Ansible - 替換文件中某些表達式的第一次出現 - 路徑包括主機名
我需要替換特定文件中某個字元串的第一次出現。
我考慮為此使用 Ansible 的替換模組。
- hosts: abc tasks: - name: Replace first occurence of specific string replace: path: /etc/config/abc_host/application.yml regexp: 'Unix' replace: "Linux"
這將替換此特定 .yml 文件中所有出現的
Unix
with 。Linux
但我也有一些其他主機(def_host、ghi_host 等),我只想將第一次出現的Unix
with替換為Linux
.所以,有兩個問題需要解決:
首先,使用主機名作為路徑中的變數。而不是硬編碼 abc_host.yml 我想要類似
path: /etc/config/($host)_host/application.yml
.其次,我只想替換特定字元串的第一次出現(而不是任何其他後續出現的字元串)。
對於主機變數,您可以使用inventory_hostname 或inventory_hostname_short,具體取決於您需要多少名稱。inventory_hostname 具有全名,short 具有第一個句點的名稱。
我沒有在 Ansible 中嘗試過,但這可能有效
replace: regexp: '^(.*?\.)Unix([.\n]*)$' replace: '\1Linux\2'