Ansible如何通过嵌套循环为PostgreSQL数据库批量添加多个扩展
解决方案
Ansible 可通过subelements过滤器实现嵌套遍历,直接为所有配置了扩展的数据库批量安装全部扩展,推荐写法如下:
- name: 安装所有数据库配置的PostgreSQL扩展 become: yes become_user: postgres postgresql_ext: name: "{{ item.1 }}" db: "{{ item.0.name }}" loop: "{{ postgres_database | subelements('extensions', skip_missing=true) }}"
写法说明
subelements过滤器会将每个数据库对象和其下的每一个扩展配对为独立遍历项,遍历生成的item是二元数组:item.0:对应上层postgres_database列表中的单条数据库配置item.1:对应当前数据库extensions列表中的单个扩展名称
skip_missing=true参数会自动跳过没有定义extensions字段的数据库,无需额外加when判断
如果你使用的是Ansible 2.5以下版本,可改用with_subelements写法:
- name: 安装所有数据库配置的PostgreSQL扩展 become: yes become_user: postgres postgresql_ext: name: "{{ item.1 }}" db: "{{ item.0.name }}" with_subelements: - "{{ postgres_database }}" - extensions - skip_missing: true
内容的提问来源于stack exchange,提问作者nbari
相关产品推荐
相关产品推荐

