From 8ac4957d11e4cf2e504311deccad9adee2c54764 Mon Sep 17 00:00:00 2001 From: Dmitriy Rabotyagov Date: Fri, 20 Oct 2023 11:26:26 +0200 Subject: [PATCH] Add quorum queues support for service This change implements and enables by default quorum support for rabbitmq as well as providing default variables to globally tune it's behaviour. In order to ensure upgrade path and ability to switch back to HA queues we change vhost names with removing leading `/`, as enabling quorum requires to remove exchange which is tricky thing to do with running services. Change-Id: I900f40d7db6c26356252a7be736c1b3bdc98cace --- defaults/main.yml | 13 ++++++++++++- templates/mistral.conf.j2 | 8 +++++++- vars/main.yml | 5 +++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index bf81a27..081f9a4 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -105,7 +105,13 @@ mistral_oslomsg_rpc_servers: "{{ oslomsg_rpc_servers | default('127.0.0.1') }}" mistral_oslomsg_rpc_port: "{{ oslomsg_rpc_port | default('5672') }}" mistral_oslomsg_rpc_use_ssl: "{{ oslomsg_rpc_use_ssl | default(False) }}" mistral_oslomsg_rpc_userid: mistral -mistral_oslomsg_rpc_vhost: /mistral +# vhost name depends on value of oslomsg_rabbit_quorum_queues. In case quorum queues +# are not used - vhost name will be prefixed with leading `/`. +mistral_oslomsg_rpc_vhost: + - name: /mistral + state: "{{ mistral_oslomsg_rabbit_quorum_queues | ternary('absent', 'present') }}" + - name: mistral + state: "{{ mistral_oslomsg_rabbit_quorum_queues | ternary('present', 'absent') }}" mistral_oslomsg_rpc_ssl_version: "{{ oslomsg_rpc_ssl_version | default('TLSv1_2') }}" mistral_oslomsg_rpc_ssl_ca_file: "{{ oslomsg_rpc_ssl_ca_file | default('') }}" @@ -122,6 +128,11 @@ mistral_oslomsg_notify_vhost: "{{ mistral_oslomsg_rpc_vhost }}" mistral_oslomsg_notify_ssl_version: "{{ oslomsg_notify_ssl_version | default('TLSv1_2') }}" mistral_oslomsg_notify_ssl_ca_file: "{{ oslomsg_notify_ssl_ca_file | default('') }}" +## RabbitMQ integration +mistral_oslomsg_rabbit_quorum_queues: "{{ oslomsg_rabbit_quorum_queues | default(True) }}" +mistral_oslomsg_rabbit_quorum_delivery_limit: "{{ oslomsg_rabbit_quorum_delivery_limit | default(0) }}" +mistral_oslomsg_rabbit_quorum_max_memory_bytes: "{{ oslomsg_rabbit_quorum_max_memory_bytes | default(0) }}" + # (Qdrouterd) integration mistral_oslomsg_amqp1_enabled: "{{ mistral_oslomsg_rpc_transport == 'amqp' }}" diff --git a/templates/mistral.conf.j2 b/templates/mistral.conf.j2 index 37d63b3..69ffa16 100644 --- a/templates/mistral.conf.j2 +++ b/templates/mistral.conf.j2 @@ -3,7 +3,7 @@ [DEFAULT] debug = {{ mistral_debug }} use_journal = True -transport_url = {{ mistral_oslomsg_rpc_transport }}://{% for host in mistral_oslomsg_rpc_servers.split(',') %}{{ mistral_oslomsg_rpc_userid }}:{{ mistral_oslomsg_rpc_password }}@{{ host }}:{{ mistral_oslomsg_rpc_port }}{% if not loop.last %},{% else %}/{{ mistral_oslomsg_rpc_vhost }}{% if mistral_oslomsg_rpc_use_ssl | bool %}?ssl=1&ssl_version={{ mistral_oslomsg_rpc_ssl_version }}&ssl_ca_file={{ mistral_oslomsg_rpc_ssl_ca_file }}{% else %}?ssl=0{% endif %}{% endif %}{% endfor %} +transport_url = {{ mistral_oslomsg_rpc_transport }}://{% for host in mistral_oslomsg_rpc_servers.split(',') %}{{ mistral_oslomsg_rpc_userid }}:{{ mistral_oslomsg_rpc_password }}@{{ host }}:{{ mistral_oslomsg_rpc_port }}{% if not loop.last %},{% else %}/{{ _mistral_oslomsg_rpc_vhost_conf }}{% if mistral_oslomsg_rpc_use_ssl | bool %}?ssl=1&ssl_version={{ mistral_oslomsg_rpc_ssl_version }}&ssl_ca_file={{ mistral_oslomsg_rpc_ssl_ca_file }}{% else %}?ssl=0{% endif %}{% endif %}{% endfor %} [api] host = {{ mistral_bind_address }} @@ -38,3 +38,9 @@ service_type = {{ mistral_service_type }} memcached_servers = {{ mistral_memcached_servers }} memcache_security_strategy = ENCRYPT memcache_secret_key = {{ memcached_encryption_key }} + +[oslo_messaging_rabbit] +ssl = {{ mistral_oslomsg_notify_use_ssl | bool }} +rabbit_quorum_queue = {{ mistral_oslomsg_rabbit_quorum_queues }} +rabbit_quorum_delivery_limit = {{ mistral_oslomsg_rabbit_quorum_delivery_limit }} +rabbit_quorum_max_memory_bytes = {{ mistral_oslomsg_rabbit_quorum_max_memory_bytes }} diff --git a/vars/main.yml b/vars/main.yml index 814bcfb..7f761dc 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -18,6 +18,11 @@ _mistral_is_first_play_host: >- (mistral_services['mistral-api']['group'] in group_names and inventory_hostname == (groups[mistral_services['mistral-api']['group']] | intersect(ansible_play_hosts)) | first) | bool }} +_mistral_oslomsg_rpc_vhost_conf: >- + {{ + (mistral_oslomsg_rpc_vhost is string) | ternary( + mistral_oslomsg_rpc_vhost, mistral_oslomsg_rpc_vhost | selectattr('state', 'eq', 'present') | map(attribute='name') | first) + }} # # Compile a list of the services on a host based on whether