You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何动态读取配置文件标签并替换为Ansible Vault对应变量值

方案1:使用Ansible template模块(最推荐)

这是Ansible原生支持的配置变量替换方案,无需手写正则匹配,维护成本最低:

  1. 将原配置文件重命名为application.properties.j2作为Jinja2模板,把其中<%=@xxx%>格式的占位符替换为Jinja2变量格式{{ xxx }},模板内容示例:
mongo.uri={{ dbruchost }} 
mongo.replica.set=set0
mongo.database={{ dbrucdb }}
mongo.user={{ dbrucuser }}
mongo.password={{ dbrucpass }}
  1. Playbook中直接调用template模块完成渲染,Ansible会自动加载包括Vault在内的所有变量完成替换:
- name: 渲染配置文件
  template:
    src: 模板文件存放路径/application.properties.j2
    dest: /tmp/artifacts/surveyMonkey/application.properties
方案2:保留原有标签格式,动态正则替换

如果不想修改原有配置的占位符格式,可以先提取配置中所有占位符的变量名,再循环匹配Vault变量完成替换:

- name: 读取目标配置文件内容
  slurp:
    path: /tmp/artifacts/surveyMonkey/application.properties
  register: config_content

- name: 提取所有待替换的变量名
  set_fact:
    replace_vars: "{{ config_content.content | b64decode | regex_findall('<%=@([a-zA-Z0-9_.]+)%>') | unique }}"

- name: 动态替换所有匹配的变量
  replace:
    path: /tmp/artifacts/surveyMonkey/application.properties
    regexp: "<%=@{{ item }}%>"
    replace: "{{ vars[item] }}"
  loop: "{{ replace_vars }}"
  when: item in vars # 变量不存在时自动跳过,可按需添加失败告警逻辑
注意事项
  • 两种方案均支持带特殊字符(比如点)的变量名,匹配时会严格校验和Vault中变量名的大小写、字符一致性
  • 方案2可通过修改regex_findall的正则规则,适配其他格式的占位符

内容的提问来源于stack exchange,提问作者Dalio141

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:54:04