Skip to content

Commit

Permalink
Merge branch 'drybjed-rabbitmq-more-tasks'
Browse files Browse the repository at this point in the history
  • Loading branch information
drybjed committed Mar 19, 2024
2 parents 3f3c201 + 5533a98 commit c654fc6
Show file tree
Hide file tree
Showing 4 changed files with 723 additions and 6 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@ General
directories. Playbook sets can be used as aliases to call multiple playbooks
using a custom name. See :ref:`playbook_sets` documentation for more details.

:ref:`debops.rabbitmq_server` role
''''''''''''''''''''''''''''''''''

- The role can manage much more RabbitMQ internal structures - exchanges,
queues, bindings between them, as well as vhost and user limits.

Changed
~~~~~~~

Expand Down
256 changes: 254 additions & 2 deletions ansible/roles/rabbitmq_server/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
# .. vim: foldmarker=[[[,]]]:foldmethod=marker

# .. Copyright (C) 2017 Maciej Delmanowski <drybjed@gmail.com>
# .. Copyright (C) 2017 DebOps <https://debops.org/>
# .. Copyright (C) 2017-2024 Maciej Delmanowski <drybjed@gmail.com>
# .. Copyright (C) 2017-2024 DebOps <https://debops.org/>
# .. SPDX-License-Identifier: GPL-3.0-only

# .. _rabbitmq_server__ref_defaults:
Expand Down Expand Up @@ -422,6 +422,42 @@ rabbitmq_server__combined_vhosts: '{{ rabbitmq_server__vhosts
+ rabbitmq_server__accounts_vhosts }}'
# ]]]
# ]]]
# RabbitMQ vhost limits [[[
# -------------------------

# These variables can be used to define RabbitMQ virtual host limits (maximum
# number of connections and queues).
# See :ref:`rabbitmq_server__ref_vhost_limits` for more details.

# .. envvar:: rabbitmq_server__vhost_limits [[[
#
# List of vhost limits which should be configured on all hosts in the Ansible
# inventory.
rabbitmq_server__vhost_limits: []

# ]]]
# .. envvar:: rabbitmq_server__group_vhost_limits [[[
#
# List of vhost limits which should be configured on hosts in specific Ansible
# inventory group.
rabbitmq_server__group_vhost_limits: []

# ]]]
# .. envvar:: rabbitmq_server__host_vhost_limits [[[
#
# List of vhost limits which should be configured on specific hosts in the
# Ansible inventory.
rabbitmq_server__host_vhost_limits: []

# ]]]
# .. envvar:: rabbitmq_server__combined_vhost_limits [[[
#
# Combined list of all vhost limits used in role tasks and templates.
rabbitmq_server__combined_vhost_limits: '{{ rabbitmq_server__vhost_limits
+ rabbitmq_server__group_vhost_limits
+ rabbitmq_server__host_vhost_limits }}'
# ]]]
# ]]]
# RabbitMQ parameter configuration [[[
# ------------------------------------

Expand Down Expand Up @@ -560,6 +596,222 @@ rabbitmq_server__admin_default_vhost: '/'
rabbitmq_server__account_password_length: '32'
# ]]]
# ]]]
# RabbitMQ user limits [[[
# ------------------------

# These variables can be used to define RabbitMQ per-user limits (maximum number
# of connections and used channels).
# See :ref:`rabbitmq_server__ref_user_limits` for more details.

# .. envvar:: rabbitmq_server__user_limits [[[
#
# List of user limits which should be configured on all hosts in the Ansible
# inventory.
rabbitmq_server__user_limits: []

# ]]]
# .. envvar:: rabbitmq_server__group_user_limits [[[
#
# List of user limits which should be configured on hosts in specific Ansible
# inventory group.
rabbitmq_server__group_user_limits: []

# ]]]
# .. envvar:: rabbitmq_server__host_user_limits [[[
#
# List of user limits which should be configured on specific hosts in the
# Ansible inventory.
rabbitmq_server__host_user_limits: []

# ]]]
# .. envvar:: rabbitmq_server__combined_user_limits [[[
#
# Combined list of all user limits used in role tasks and templates.
rabbitmq_server__combined_user_limits: '{{ rabbitmq_server__user_limits
+ rabbitmq_server__group_user_limits
+ rabbitmq_server__host_user_limits }}'
# ]]]
# ]]]
# RabbitMQ exchanges [[[
# ----------------------

# These variables can be used to define RabbitMQ exchanges which receive
# messages for processing.
# See :ref:`rabbitmq_server__ref_exchanges` for more details.

# .. envvar:: rabbitmq_server__exchanges [[[
#
# List of exchanges which should be configured on all hosts in the Ansible
# inventory.
rabbitmq_server__exchanges: []

# ]]]
# .. envvar:: rabbitmq_server__group_exchanges [[[
#
# List of exchanges which should be configured on hosts in specific Ansible
# inventory group.
rabbitmq_server__group_exchanges: []

# ]]]
# .. envvar:: rabbitmq_server__host_exchanges [[[
#
# List of exchanges which should be configured on specific hosts in the
# Ansible inventory.
rabbitmq_server__host_exchanges: []

# ]]]
# .. envvar:: rabbitmq_server__combined_exchanges [[[
#
# Combined list of all exchanges used in role tasks and templates.
rabbitmq_server__combined_exchanges: '{{ rabbitmq_server__exchanges
+ rabbitmq_server__group_exchanges
+ rabbitmq_server__host_exchanges }}'
# ]]]
# ]]]
# RabbitMQ queues [[[
# -------------------

# These variables can be used to define RabbitMQ queues which store processed
# messages for consumers.
# See :ref:`rabbitmq_server__ref_queues` for more details.

# .. envvar:: rabbitmq_server__queues [[[
#
# List of queues which should be configured on all hosts in the Ansible
# inventory.
rabbitmq_server__queues: []

# ]]]
# .. envvar:: rabbitmq_server__group_queues [[[
#
# List of queues which should be configured on hosts in specific Ansible
# inventory group.
rabbitmq_server__group_queues: []

# ]]]
# .. envvar:: rabbitmq_server__host_queues [[[
#
# List of queues which should be configured on specific hosts in the
# Ansible inventory.
rabbitmq_server__host_queues: []

# ]]]
# .. envvar:: rabbitmq_server__combined_queues [[[
#
# Combined list of all queues used in role tasks and templates.
rabbitmq_server__combined_queues: '{{ rabbitmq_server__queues
+ rabbitmq_server__group_queues
+ rabbitmq_server__host_queues }}'
# ]]]
# ]]]
# RabbitMQ bindings [[[
# ---------------------

# These variables can be used to define RabbitMQ bindings which connect
# exchanges and queues.
# See :ref:`rabbitmq_server__ref_bindings` for more details.

# .. envvar:: rabbitmq_server__bindings [[[
#
# List of bindings which should be configured on all hosts in the Ansible
# inventory.
rabbitmq_server__bindings: []

# ]]]
# .. envvar:: rabbitmq_server__group_bindings [[[
#
# List of bindings which should be configured on hosts in specific Ansible
# inventory group.
rabbitmq_server__group_bindings: []

# ]]]
# .. envvar:: rabbitmq_server__host_bindings [[[
#
# List of bindings which should be configured on specific hosts in the
# Ansible inventory.
rabbitmq_server__host_bindings: []

# ]]]
# .. envvar:: rabbitmq_server__combined_bindings [[[
#
# Combined list of all bindings used in role tasks and templates.
rabbitmq_server__combined_bindings: '{{ rabbitmq_server__bindings
+ rabbitmq_server__group_bindings
+ rabbitmq_server__host_bindings }}'
# ]]]
# ]]]
# RabbitMQ feature flags [[[
# --------------------------

# These variables can be used to define RabbitMQ feature flags which should be
# present on specific or all RabbitMQ nodes.
# See :ref:`rabbitmq_server__ref_feature_flags` for more details.

# .. envvar:: rabbitmq_server__feature_flags [[[
#
# List of feature flags which should be configured on all hosts in the Ansible
# inventory.
rabbitmq_server__feature_flags: []

# ]]]
# .. envvar:: rabbitmq_server__group_feature_flags [[[
#
# List of feature flags which should be configured on hosts in specific Ansible
# inventory group.
rabbitmq_server__group_feature_flags: []

# ]]]
# .. envvar:: rabbitmq_server__host_feature_flags [[[
#
# List of feature flags which should be configured on specific hosts in the
# Ansible inventory.
rabbitmq_server__host_feature_flags: []

# ]]]
# .. envvar:: rabbitmq_server__combined_feature_flags [[[
#
# Combined list of all feature flags used in role tasks and templates.
rabbitmq_server__combined_feature_flags: '{{ rabbitmq_server__feature_flags
+ rabbitmq_server__group_feature_flags
+ rabbitmq_server__host_feature_flags }}'
# ]]]
# ]]]
# RabbitMQ global parameters [[[
# ------------------------------

# These variables can be used to define RabbitMQ global parameters on one or
# more RabbitMQ nodes.
# See :ref:`rabbitmq_server__ref_global_parameters` for more details.

# .. envvar:: rabbitmq_server__global_parameters [[[
#
# List of global parameters which should be configured on all hosts in the
# Ansible inventory.
rabbitmq_server__global_parameters: []

# ]]]
# .. envvar:: rabbitmq_server__group_global_parameters [[[
#
# List of global parameters which should be configured on hosts in specific
# Ansible inventory group.
rabbitmq_server__group_global_parameters: []

# ]]]
# .. envvar:: rabbitmq_server__host_global_parameters [[[
#
# List of global parameters which should be configured on specific hosts in the
# Ansible inventory.
rabbitmq_server__host_global_parameters: []

# ]]]
# .. envvar:: rabbitmq_server__combined_global_parameters [[[
#
# Combined list of all global parameters used in role tasks and templates.
rabbitmq_server__combined_global_parameters: '{{ rabbitmq_server__global_parameters
+ rabbitmq_server__group_global_parameters
+ rabbitmq_server__host_global_parameters }}'
# ]]]
# ]]]
# RabbitMQ cluster configuration [[[
# ----------------------------------

Expand Down
79 changes: 77 additions & 2 deletions ansible/roles/rabbitmq_server/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
# Copyright (C) 2017 Maciej Delmanowski <drybjed@gmail.com>
# Copyright (C) 2017 DebOps <https://debops.org/>
# Copyright (C) 2017-2024 Maciej Delmanowski <drybjed@gmail.com>
# Copyright (C) 2017-2024 DebOps <https://debops.org/>
# SPDX-License-Identifier: GPL-3.0-only

- name: Import DebOps global handlers
Expand Down Expand Up @@ -149,6 +149,31 @@
tags: [ 'role::rabbitmq_server:vhost', 'role::rabbitmq_server:parameter',
'role::rabbitmq_server:policy', 'role::rabbitmq_server:user' ]

- name: Manage RabbitMQ virtual host limits
community.rabbitmq.rabbitmq_vhost_limits:
vhost: '{{ item.vhost }}'
node: '{{ item.node | d(omit) }}'
max_connections: '{{ item.max_connections | d(omit) }}'
max_queues: '{{ item.max_queues | d(omit) }}'
state: '{{ item.state | d("present") }}'
loop: '{{ q("flattened", rabbitmq_server__combined_vhost_limits) }}'
tags: [ 'role::rabbitmq_server:vhost' ]

- name: Manage RabbitMQ feature flags
community.rabbitmq.rabbitmq_feature_flag:
name: '{{ item.name }}'
node: '{{ item.node | d(omit) }}'
loop: '{{ q("flattened", rabbitmq_server__combined_feature_flags) }}'

- name: Manage RabbitMQ global parameters
community.rabbitmq.rabbitmq_global_parameter:
name: '{{ item.name }}'
node: '{{ item.node | d(omit) }}'
state: '{{ item.state | d("present") }}'
value: '{{ item.value | d(omit) }}'
loop: '{{ q("flattened", rabbitmq_server__combined_global_parameters) }}'
tags: [ 'role::rabbitmq_server:parameter' ]

- name: Manage RabbitMQ parameters
community.rabbitmq.rabbitmq_parameter:
component: '{{ item.component }}'
Expand Down Expand Up @@ -199,6 +224,56 @@
tags: [ 'role::rabbitmq_server:user' ]
no_log: '{{ debops__no_log | d(True) }}'

- name: Manage RabbitMQ user limits
community.rabbitmq.rabbitmq_user_limits:
user: '{{ item.user }}'
node: '{{ item.node | d(omit) }}'
max_connections: '{{ item.max_connections | d(omit) }}'
max_channels: '{{ item.max_channels | d(omit) }}'
state: '{{ item.state | d("present") }}'
loop: '{{ q("flattened", rabbitmq_server__combined_user_limits) }}'
tags: [ 'role::rabbitmq_server:user' ]

- name: Manage RabbitMQ exchanges
community.rabbitmq.rabbitmq_exchange:
name: '{{ item.name }}'
arguments: '{{ item.arguments | d(omit) }}'
auto_delete: '{{ item.auto_delete | d(omit) }}'
durable: '{{ item.durable | d(omit) }}'
exchange_type: '{{ item.exchange_type | d(omit) }}'
internal: '{{ item.internal | d(omit) }}'
state: '{{ item.state | d("present") }}'
vhost: '{{ item.vhost | d(omit) }}'
loop: '{{ q("flattened", rabbitmq_server__combined_exchanges) }}'

- name: Manage RabbitMQ queues
community.rabbitmq.rabbitmq_queue:
name: '{{ item.name }}'
arguments: '{{ item.arguments | d(omit) }}'
auto_delete: '{{ item.auto_delete | d(omit) }}'
auto_expires: '{{ item.auto_expires | d(omit) }}'
dead_letter_exchange: '{{ item.dead_letter_exchange | d(omit) }}'
dead_letter_routing_key: '{{ item.dead_letter_routing_key | d(omit) }}'
durable: '{{ item.durable | d(omit) }}'
max_length: '{{ item.max_length | d(omit) }}'
max_priority: '{{ item.max_priority | d(omit) }}'
message_ttl: '{{ item.message_ttl | d(omit) }}'
state: '{{ item.state | d("present") }}'
vhost: '{{ item.vhost | d(omit) }}'
loop: '{{ q("flattened", rabbitmq_server__combined_queues) }}'
tags: [ 'role::rabbitmq_server:queue' ]

- name: Manage RabbitMQ bindings
community.rabbitmq.rabbitmq_binding:
name: '{{ item.name }}'
destination: '{{ item.destination }}'
destination_type: '{{ item.destination_type }}'
arguments: '{{ item.arguments | d(omit) }}'
routing_key: '{{ item.routing_key | d(omit) }}'
state: '{{ item.state | d("present") }}'
vhost: '{{ item.vhost | d(omit) }}'
loop: '{{ q("flattened", rabbitmq_server__combined_bindings) }}'

- name: Save RabbitMQ dependent configuration on Ansible Controller
ansible.builtin.template:
src: 'secret/rabbitmq_server/dependent_config/inventory_hostname/config.json.j2'
Expand Down
Loading

0 comments on commit c654fc6

Please sign in to comment.