firefly2929
firefly2929

Reputation: 33

Override default value in Ansible task

I have the following Ansible structure in my role.

At the moment, when I run my task to create queues, the default queues settings are applied to all queues.

However, I want to be able to override the default queue settings for any specific queue. I have defined queue setting overrides in my vars file below.

How can I apply this override in my queues.yml task?

roles/x/tasks/queues/queues.yml:

---
  - include_vars:
      file: roles/x/vars/queues.vars.yml
      name: q
  - name: create queues
    some.module.app_queue:
      name: "{{ item.name }}"
      settings: "{{ queues.settings }}"
      state: present
    loop: "{{ q.queues }}"

roles/x/defaults/main.yml:

---
queues:
  settings:
    accessType: exclusive
    egressEnabled: true
    ingressEnabled: true
    maxMsgSpoolUsage: 101
    permission: delete

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

Upvotes: 1

Views: 83

Answers (1)

Vladimir Botka
Vladimir Botka

Reputation: 68294

  • Use the filter default
      settings: "{{ item.settings|default(queues.settings) }}"
  • You can combine the defaults right after the inclusion of queues if you want to
  - include_vars:
      file: queues.yml
      name: q
  - set_fact:
      queues: "{{ [queues]|product(q.queues)|map('combine') }}"

Upvotes: 2

Related Questions