OpenStack-Ansible RabbitMQ server¶
This Ansible role deploys RabbitMQ. When multiple hosts are present in
the rabbitmq_all inventory group, a cluster is created.
Table of Contents¶
To clone or view the source code for this repository, visit the role repository for rabbitmq_server.
Default variables¶
## APT Cache Options cache_timeout:600 # Set the package install state for distribution packages # Options are 'present' and 'latest' rabbitmq_package_state:"{{package_state|default('latest')}}" # Defined versions of RabbitMQ and Erlang rabbitmq_package_version:"4.1.4-1" rabbitmq_erlang_package_version:"27.3.*-1" # Inventory group containing the hosts for the cluster rabbitmq_host_group:"rabbitmq_all" # The local address used for the rabbitmq cluster node rabbitmq_node_address:"{{management_address|default(ansible_host)}}" rabbit_system_user_name:rabbitmq rabbit_system_group_name:rabbitmq # Allow role to adjust /etc/hosts file rabbitmq_manage_hosts_entries:true # Hosts file entries rabbitmq_hosts_entries:>- {{ groups[rabbitmq_host_group] | map('extract', hostvars) | list | json_query( "[].{address: rabbitmq_node_address || ansible_host , hostnames: [ansible_facts.hostname, ansible_facts.fqdn] }" ) }} rabbitmq_primary_cluster_node:"{{hostvars[groups[rabbitmq_host_group][0]]['ansible_facts']['hostname']}}" # Upgrading the RabbitMQ package requires shutting down the cluster. This variable makes upgrading # the version an explicit action. rabbitmq_upgrade:false # If the user does not want to upgrade but needs to rerun the playbooks for any reason the # upgrade/version state can be ignored by setting `rabbitmq_ignore_version_state=true` rabbitmq_ignore_version_state:false rabbitmq_package_url:"" rabbitmq_package_sha256:"" rabbitmq_package_path:"" # Mappings from Ansible reported architecture to distro release architecture rabbitmq_architecture_mapping: x86_64:amd64 ppc64le:ppc64el s390x:s390x armv7l:armhf aarch64:arm64 # Set the gpg keys needed to be imported # This should be a list of dicts, with each dict # giving a set of arguments to the applicable # package module. The following is an example for # systems using the apt package manager. # rabbitmq_gpg_keys: # - id: '0xC2E73424D59097AB' # keyserver: 'hkp://keyserver.ubuntu.com:80' # validate_certs: no rabbitmq_gpg_keys:"{{_rabbitmq_gpg_keys|default([])}}" # Set the URL for the RabbitMQ repository rabbitmq_repo_url:"{{_rabbitmq_repo_url|default(null)}}" # Set the repo information for the RabbitMQ repository rabbitmq_repo:"{{_rabbitmq_repo|default({})}}" # Set the URL for the Erlang repository rabbitmq_erlang_repo_url:"{{_rabbitmq_erlang_repo_url|default(null)}}" # Set the repo information for the Erlang repository rabbitmq_erlang_repo:"{{_rabbitmq_erlang_repo|default({})}}" # Choose file, distro, external_repo for rabbitmq_install_method. rabbitmq_install_method:"{{_rabbitmq_install_method}}" rabbitmq_erlang_install_method:"{{_rabbitmq_erlang_install_method|default(rabbitmq_install_method)}}" # Name of the rabbitmq cluster rabbitmq_cluster_name:rabbitmq_cluster1 # Specify a partition recovery strategy (autoheal | pause_minority | ignore) rabbitmq_cluster_partition_handling:pause_minority # Rabbitmq open file limits rabbitmq_ulimit:65536 # Configure rabbitmq plugins # This should be a comma-separated list of plugin names. # Any plugin not listed will be disabled automatically. # rabbitmq_plugins: # - name: rabbitmq_management,rabbitmq_prometheus # state: enabled rabbitmq_plugins: -name:rabbitmq_management state:enabled # Storage location for SSL certificate authority rabbitmq_pki_dir:"{{openstack_pki_dir|default('/etc/pki/rabbitmq-ca')}}" # Delegated host for operating the certificate authority rabbitmq_pki_setup_host:"{{openstack_pki_setup_host|default('localhost')}}" # Create a certificate authority if one does not already exist rabbitmq_pki_create_ca:"{{openstack_pki_authoritiesisnotdefined|bool}}" rabbitmq_pki_regen_ca:"" rabbitmq_pki_authorities: -name:"RabbitMQRoot" country:"GB" state_or_province_name:"England" organization_name:"ExampleCorporation" organizational_unit_name:"ITSecurity" cn:"RabbitMQRootCA" provider:selfsigned basic_constraints:"CA:TRUE" key_usage: -digitalSignature -cRLSign -keyCertSign not_after:"+3650d" -name:"RabbitMQIntermediate" country:"GB" state_or_province_name:"England" organization_name:"ExampleCorporation" organizational_unit_name:"ITSecurity" cn:"RabbitMQIntermediateCA" provider:ownca basic_constraints:"CA:TRUE,pathlen:0" key_usage: -digitalSignature -cRLSign -keyCertSign not_after:"+3650d" signed_by:"RabbitMQRoot" # Installation details for certificate authorities rabbitmq_pki_install_ca: -name:"RabbitMQRoot" condition:"{{rabbitmq_pki_create_ca}}" # Rabbitmq server certificate rabbitmq_pki_keys_path:"{{rabbitmq_pki_dir~'/certs/private/'}}" rabbitmq_pki_certs_path:"{{rabbitmq_pki_dir~'/certs/certs/'}}" rabbitmq_pki_intermediate_cert_name:"{{openstack_pki_service_intermediate_cert_name|default('RabbitMQIntermediate')}}" rabbitmq_pki_intermediate_cert_path:>- {{ rabbitmq_pki_dir ~ '/roots/' ~ rabbitmq_pki_intermediate_cert_name ~ '/certs/' ~ rabbitmq_pki_intermediate_cert_name ~ '.crt' }} rabbitmq_pki_regen_cert:"" rabbitmq_pki_certificates: -name:"rabbitmq_{{ansible_facts['hostname']}}" provider:ownca cn:"{{ansible_facts['hostname']}}" san:"{{'DNS:'~ansible_facts['hostname']~',IP:'~rabbitmq_node_address~',DNS:'~ansible_facts['fqdn']}}" signed_by:"{{rabbitmq_pki_intermediate_cert_name}}" # RabbitMQ destination files for SSL certificates rabbitmq_ssl_cert:/etc/rabbitmq/rabbitmq.pem rabbitmq_ssl_key:/etc/rabbitmq/rabbitmq.key rabbitmq_ssl_ca_cert:/etc/rabbitmq/rabbitmq-ca.pem # Installation details for SSL certificates rabbitmq_pki_install_certificates: -src:"{{rabbitmq_user_ssl_cert|default(rabbitmq_pki_certs_path~'rabbitmq_'~ansible_facts['hostname']~'-chain.crt')}}" dest:"{{rabbitmq_ssl_cert}}" owner:"rabbitmq" group:"rabbitmq" mode:"0644" -src:"{{rabbitmq_user_ssl_key|default(rabbitmq_pki_keys_path~'rabbitmq_'~ansible_facts['hostname']~'.key.pem')}}" dest:"{{rabbitmq_ssl_key}}" owner:"rabbitmq" group:"rabbitmq" mode:"0600" -src:"{{rabbitmq_user_ssl_ca_cert|default(rabbitmq_pki_intermediate_cert_path)}}" dest:"{{rabbitmq_ssl_ca_cert}}" owner:"rabbitmq" group:"rabbitmq" mode:"0644" # Define user-provided SSL certificates in: # /etc/openstack_deploy/user_variables.yml # rabbitmq_user_ssl_cert: <path to cert on ansible deployment host> # rabbitmq_user_ssl_key: <path to cert on ansible deployment host> # rabbitmq_user_ssl_ca_cert: <path to cert on ansible deployment host> # These are highly recommended for TLSv1.2 but cannot be used # with TLSv1.3. If TLSv1.3 is enabled, these lines will not be # inserted into the config rabbitmq_ssl_client_renegotiation:false rabbitmq_ssl_secure_renegotiate:true # Supported TLS protocol versions rabbitmq_ssl_tls_versions: -"tlsv1.2" # Mutual TLS control rabbitmq_ssl_verify:"verify_none" rabbitmq_ssl_fail_if_no_peer_cert:false # Recommended ciphers taken from https://www.rabbitmq.com/ssl.html rabbitmq_ssl_ciphers: -"ECDHE-ECDSA-AES256-GCM-SHA384" -"ECDHE-RSA-AES256-GCM-SHA384" -"ECDH-ECDSA-AES256-GCM-SHA384" -"ECDH-RSA-AES256-GCM-SHA384" -"DHE-RSA-AES256-GCM-SHA384" -"DHE-DSS-AES256-GCM-SHA384" -"ECDHE-ECDSA-AES128-GCM-SHA256" -"ECDHE-RSA-AES128-GCM-SHA256" -"ECDH-ECDSA-AES128-GCM-SHA256" -"ECDH-RSA-AES128-GCM-SHA256" -"DHE-RSA-AES128-GCM-SHA256" -"DHE-DSS-AES128-GCM-SHA256" # RabbitMQ erlang VM parameters rabbitmq_async_threads:128 rabbitmq_process_limit:1048576 # Limit memory consumption of the erlang VM rabbitmq_memory_high_watermark:0.2 rabbitmq_env_use_longname:false # Extra arguments passed to Erlang on startup # rabbitmq_erlang_extra_args: "+sbwt none +sbwtdcpu none +sbwtdio none +stbt nnts" rabbitmq_erlang_extra_args:"" # RabbitMQ collect statistics interval rabbitmq_collect_statistics_interval:5000 # RabbitMQ Management service bind address rabbitmq_management_bind_address:0.0.0.0 rabbitmq_management_bind_tcp_port:15672 rabbitmq_management_bind_tls_port:15671 rabbitmq_management_ssl:true # RabbitMQ Management rates mode rabbitmq_management_rates_mode:basic # Precompile RabbitMQ with HiPE rabbitmq_hipe_compile:false # Disable non-TLS listeners rabbitmq_disable_non_tls_listeners:false # RabbitMQ logging options # See https://www.rabbitmq.com/logging.html for the logging options rabbitmq_log: journald:true file:false # RabbitMQ policies # Used to tune performance characteristics of OpenStack messaging # # Example override that uses HA queues only for telemetry and sets message # expiry for RPC messages # # rabbitmq_policies: # - name: "heat_rpc_expire" # pattern: '^heat-engine-listener\\.' # tags: "expires=3600000" # priority: 1 # - name: "results_expire" # pattern: '^results\\.' # tags: "expires=3600000" # priority: 1 # - name: "tasks_expire" # pattern: '^results\\.' # tags: "expires=3600000" # priority: 1 # - name: "ha-notif" # pattern: '^(event|metering|notifications)\.' # tags: "ha-sync-mode=automatic" # priority: 0 # state:present # If policy needs to be removed, provide `state: absent` # - name: "HA" # pattern: '^(?!(amq\.)|(.*_fanout_)|(reply_)).*' # tags: "ha-mode=all" # state: absent # rabbitmq_policies:[] rabbitmq_apply_openstack_policies:false rabbitmq_openstack_policies: -name:CQv2 pattern:".*" priority:0 tags: queue-version:2 rabbitmq_port_bindings: ssl_listeners: "0.0.0.0":5671 tcp_listeners: "0.0.0.0":5672 rabbitmq_additional_config:{} rabbitmq_init_overrides: Service: LimitNOFILE:"{{rabbitmq_ulimit}}" Restart:on-failure RestartSec:2 # Mnesia configuration # The Mnesia dump_log_write_threshold option controls # how often the dumping occurs # Increase this value can increase the performances, # reducing the IO. # Increase it in case of: # Mnesia is overloaded: {dump_log,write_threshold}. # The default value is 100 mnesia_dump_log_write_threshold:300
Dependencies¶
To use this role, define the following variables:
# RabbitMQ cluster shared secret rabbitmq_cookie_token:secrete
Example playbook¶
--- -name:Install RabbitMQ server hosts:rabbitmq_all user:root serial: -1 -100% roles: -role:rabbitmq_server tags: -rabbitmq-server vars: rabbitmq_cookie_token:secrete