如何在Ansible任务中覆盖队列的默认配置?
解决Ansible队列配置覆盖问题
你可以通过Ansible的过滤器实现优先使用队列自身定义的配置,无定义时回退到默认配置的逻辑,修改queues.yml任务文件即可:
修改后的roles/x/tasks/queues/queues.yml
--- - include_vars: file: roles/x/vars/queues.vars.yml name: q - name: 创建队列 some.module.app_queue: name: "{{ item.name }}" # 优先用当前队列的settings,不存在则加载默认配置 settings: "{{ item.settings | default(queues.settings) }}" state: "{{ item.state | default('present') }}" loop: "{{ q.queues }}"
额外优化说明
- 你的
roles/x/vars/queues.vars.yml文件开头有重复的---标记,需要删除其中一个,修正后内容如下:
--- queues: - name: queue-one state: present subscriptions: - projects/{{ project_id }}/topics/*/topix-1 - projects/{{ project_id }}/topics/*/topix-2 - name: queue-two state: present subscriptions: - projects/{{ project_id }}/topics/*/topix-3 - projects/{{ project_id }}/topics/*/topix-ab - name: queue-three settings: accessType: exclusive egressEnabled: false ingressEnabled: false maxMsgSpoolUsage: 112 permission: delete state: present subscriptions: - projects/{{ project_id }}/topics/*/topix-xy - name: queue-four state: present subscriptions: - projects/{{ project_id }}/topics/*/topix-xyz - name: queue-five state: present subscriptions: - projects/{{ project_id }}/topics/*/topix-123
- 如果需要部分字段覆盖(而非全量替换默认配置),可以改用
combine过滤器:
settings: "{{ queues.settings | combine(item.settings | default({})) }}"
这个写法会将默认配置与队列自定义配置合并,队列定义的字段会覆盖默认值,未定义的字段保留默认配置。
内容的提问来源于stack exchange,提问作者firefly2929
相关产品推荐
相关产品推荐

