在 ansible 中,我想替换这个:
pgsql:
useCluster: false
addr: 127.0.0.1:5432
password: ""
email:
to: xxx@gmail.com
port: 465
password: ""
替换为:
pgsql:
useCluster: false
addr: 127.0.0.1:5432
password: "2024xxx"
email:
to: xxx@gmail.com
port: 465
password: ""
因为有两个相同的变量无法替换,所以我用了这个方法,但是无法实现,大家该如何处理呢?
replace:
path: "config.yaml"
regexp: '(redis:[^<]*)password: ""'
replace: '\1password: "2024xxx"'
1
最佳答案
1
使用模板 Ansible 模块而不是替换。
手动编辑源文档以使 Jinja 表达式位于应有的值处。
pgsql:
useCluster: false
addr: 127.0.0.1:5432
password: "{{ thing_pgsql_password | default('') }}"
email:
to: xxx@gmail.com
port: 465
password: "{{ thing_email_password | default('') }}"
其中,thing
是您的组织或项目的简短前缀,可降低名称冲突的可能性。变量名称来自某个秘密存储查找,假设它是一个密码。末尾的默认过滤器是可选的,取决于您是否希望在变量未定义时获得值,或者出现错误。
- template:
src: config.yml
dest: /etc/whatever/config.yml
模板模块的不同之处在于它必须在本地主机(Ansible 控制器)上呈现源文件。如果您以前依赖于包含此文件中值的远程主机,则可能需要调整托管主机,使其不再是真实来源。
1
-
使用模板无法做到这一点。有办法替代它吗?
–
|
–
|