Ansible:有条件地将项目添加到单个字符串

问题描述 投票:0回答:2

目前正在开发用于 postgresql 安装的 ansible playbook。

尝试向

shared_preload_libraries
插入多个值。想法是能够有条件地插入它们,并且不同的角色必须能够附加到这一行而不覆盖它。

目前的解决方案:

- name: Check whether postgresql.conf contains "pg_stat_statements"
  command: grep "pg_stat_statements" "{{ pg_data }}/postgresql.conf"
  register: check_shared_libs
  check_mode: no
  ignore_errors: yes
  changed_when: no

- name: Modify postgresql.conf add pg_stat_statements shared library.
  replace:
      backup: yes
      dest: "{{ pg_data }}/postgresql.conf"
      regexp: "^#?(shared_preload_libraries = '.*)(')"
      replace: '\1,pg_stat_statements\2'
  when: check_shared_libs.rc != 0
  notify: restart postgres

这给了我这样的东西:

shared_preload_libraries = ',pg_stat_statements,powa,pg_stat_kcache,pg_qualstats,pg_wait_sampling'

工作正常,但我想知道是否有更好的方法。

postgresql ansible
2个回答
1
投票

避免使用

command
任务的一种方法如下。它包含 2 个任务,因为无法使用查找插件将 remote 文件读取到变量中..

因此,第 1 步我们将整个文件读入变量,第 2 步我们检查变量是否包含

pg_stat_statements
:

代码:

---
- name: test play
  hosts: localhost
  connection: local
  gather_facts: false
  become: yes
  vars:
    pg_stat_statements_exists: false

  tasks:
  - name: read file
    slurp:
      src: /tmp/postgresql.conf
    register: postgresql_file

  - name: check pg_stat_statements exists
    set_fact:
      pg_stat_statements_exists: true
    when: postgresql_file['content'] | b64decode is search('pg_stat_statements') == true

  - name: print variable that will control the replace task that follows
    debug:
      var: pg_stat_statements_exists

并使用修改后的

replace
条件添加您的
when
任务:

- name: Modify postgresql.conf add pg_stat_statements shared library.
  replace:
      backup: yes
      dest: "{{ pg_data }}/postgresql.conf"
      regexp: "^#?(shared_preload_libraries = '.*)(')"
      replace: '\1,pg_stat_statements\2'
  when: pg_stat_statements_exists == true
  notify: restart postgres

希望有帮助


0
投票

很抱歉在旧主题中提出问题,但我需要相同的解决方案。

同上例,如果属性只有一个值,如何去掉逗号?

最终结果示例:

shared_preload_libraries = 'pg_stat_statements' #(更改需要重新启动)

shared_preload_libraries = 'a1,pg_stat_statements' #(更改需要重新启动)

© www.soinside.com 2019 - 2024. All rights reserved.