在 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

  • 您可能需要查看用于编辑 yml 文件的 ansible 模块。github.com/kwoodson/ansible-role-yed


    – 


最佳答案
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

  • 使用模板无法做到这一点。有办法替代它吗?


    –