Ansible如何配置路径含主机名变量且仅替换文件指定字符串首次出现
解决方案
1. 路径使用主机名变量
Ansible 内置了inventory_hostname变量,直接对应当前目标主机在资产清单中配置的主机名,你可以通过Jinja2模板语法注入到路径中,写法如下:path: /etc/config/{{ inventory_hostname }}_host/application.yml
如果你需要使用目标主机实际的系统主机名而非资产清单配置的名称,可以替换为{{ ansible_hostname }}变量即可。
2. 仅替换字符串首次出现
Ansible的replace模块默认全局匹配替换,你可以通过调整正则表达式规则,结合DOTALL标识实现仅替换首次匹配项:
- 正则表达式修改为
'^(.*?)Unix':^匹配文件开头,.*?是非贪婪匹配,会捕获从文件开头到第一个Unix之前的所有内容,用分组1存储 - 替换内容修改为
'\1Linux':\1引用前面捕获的分组1内容,拼接上新的字符串Linux,即可实现仅替换第一个匹配的Unix - 额外添加
flags: ['DOTALL']参数:让.符号可以匹配换行符,避免正则仅在单行内匹配的问题。
完整可直接使用的playbook示例:
- hosts: abc tasks: - name: Replace first occurence of specific string replace: path: /etc/config/{{ inventory_hostname }}_host/application.yml regexp: '^(.*?)Unix' replace: '\1Linux' flags: ['DOTALL']
内容的提问来源于stack exchange,提问作者Tobitor
相关产品推荐
相关产品推荐

