
When using externally managed certificates, according to [1], one should set `kolla_externally_managed_cert: yes` and ensure that the certificates are in the correct place. However, RabbitMQ precheck still expects the certificates to be available on the controller node. This is incorrect. Fix by not running the tasks in question when `kolla_externally_managed_cert: yes` [1] https://docs.openstack.org/kolla-ansible/latest/admin/tls.html Closes-Bug: 1999081 Related-Bug: 1940286 Signed-off-by: Magnus Lööf <magnus.loof@basalt.se> Change-Id: I9f845a7bdf5055165e199ab1887ed3ccbfb9d808 (cherry picked from commit fdacf9d1d9819f3d9ebe4c2bbdace11b502086a9)
202 lines
6.5 KiB
YAML
202 lines
6.5 KiB
YAML
---
|
|
- import_role:
|
|
name: service-precheck
|
|
vars:
|
|
service_precheck_services: "{{ rabbitmq_services }}"
|
|
service_name: "{{ project_name }}"
|
|
|
|
- name: Get container facts
|
|
become: true
|
|
kolla_container_facts:
|
|
container_engine: "{{ kolla_container_engine }}"
|
|
name:
|
|
- rabbitmq
|
|
- outward_rabbitmq
|
|
check_mode: false
|
|
register: container_facts
|
|
|
|
- name: Checking free port for RabbitMQ
|
|
wait_for:
|
|
host: "{{ api_interface_address }}"
|
|
port: "{{ rabbitmq_port }}"
|
|
connect_timeout: 1
|
|
timeout: 1
|
|
state: stopped
|
|
when:
|
|
- container_facts['rabbitmq'] is not defined
|
|
- inventory_hostname in groups['rabbitmq']
|
|
|
|
- name: Checking free port for RabbitMQ Management
|
|
wait_for:
|
|
host: "{{ api_interface_address }}"
|
|
port: "{{ rabbitmq_management_port }}"
|
|
connect_timeout: 1
|
|
timeout: 1
|
|
state: stopped
|
|
when:
|
|
- container_facts['rabbitmq'] is not defined
|
|
- inventory_hostname in groups['rabbitmq']
|
|
|
|
- name: Checking free port for RabbitMQ Cluster
|
|
wait_for:
|
|
host: "{{ api_interface_address }}"
|
|
port: "{{ rabbitmq_cluster_port }}"
|
|
connect_timeout: 1
|
|
timeout: 1
|
|
state: stopped
|
|
when:
|
|
- container_facts['rabbitmq'] is not defined
|
|
- inventory_hostname in groups['rabbitmq']
|
|
|
|
- name: Checking free port for RabbitMQ EPMD
|
|
wait_for:
|
|
host: "{{ api_interface_address }}"
|
|
port: "{{ rabbitmq_epmd_port }}"
|
|
connect_timeout: 1
|
|
timeout: 1
|
|
state: stopped
|
|
when:
|
|
- container_facts['rabbitmq'] is not defined
|
|
- inventory_hostname in groups['rabbitmq']
|
|
|
|
- name: Check if all rabbit hostnames are resolvable
|
|
vars:
|
|
nss_database: "{{ 'ahostsv4' if api_address_family == 'ipv4' else 'ahostsv6' }}"
|
|
command: "getent {{ nss_database }} {{ hostvars[item].ansible_facts.hostname }}"
|
|
changed_when: false
|
|
check_mode: false
|
|
register: rabbitmq_hostnames
|
|
with_items: "{{ groups['rabbitmq'] }}"
|
|
|
|
- name: Check if each rabbit hostname resolves uniquely to the proper IP address
|
|
fail:
|
|
msg: Hostname has to resolve uniquely to the IP address of api_interface
|
|
with_subelements:
|
|
- "{{ rabbitmq_hostnames.results }}"
|
|
- stdout_lines
|
|
when:
|
|
- not item.1 is match('^'+('api' | kolla_address(item.0.item))+'\\b')
|
|
|
|
- name: Check if TLS certificate exists for RabbitMQ
|
|
vars:
|
|
cert: "{{ query('first_found', paths, errors='ignore') }}"
|
|
paths:
|
|
- "{{ kolla_certificates_dir }}/{{ inventory_hostname }}/rabbitmq-cert.pem"
|
|
- "{{ kolla_certificates_dir }}/{{ inventory_hostname }}-cert.pem"
|
|
- "{{ kolla_certificates_dir }}/rabbitmq-cert.pem"
|
|
fail:
|
|
msg: No TLS certificate provided for RabbitMQ.
|
|
when:
|
|
- not kolla_externally_managed_cert | bool
|
|
- rabbitmq_enable_tls | bool
|
|
- cert | length == 0
|
|
|
|
- name: Check if TLS key exists for RabbitMQ
|
|
vars:
|
|
key: "{{ query('first_found', paths, errors='ignore') }}"
|
|
paths:
|
|
- "{{ kolla_certificates_dir }}/{{ inventory_hostname }}/rabbitmq-key.pem"
|
|
- "{{ kolla_certificates_dir }}/{{ inventory_hostname }}-key.pem"
|
|
- "{{ kolla_certificates_dir }}/rabbitmq-key.pem"
|
|
fail:
|
|
msg: No TLS key provided for RabbitMQ.
|
|
when:
|
|
- not kolla_externally_managed_cert | bool
|
|
- rabbitmq_enable_tls | bool
|
|
- key | length == 0
|
|
|
|
- name: Checking free port for outward RabbitMQ
|
|
wait_for:
|
|
host: "{{ api_interface_address }}"
|
|
port: "{{ outward_rabbitmq_port }}"
|
|
connect_timeout: 1
|
|
state: stopped
|
|
when:
|
|
- enable_outward_rabbitmq | bool
|
|
- inventory_hostname in groups['outward-rabbitmq']
|
|
- container_facts['outward_rabbitmq'] is not defined
|
|
|
|
- name: Checking free port for outward RabbitMQ Management
|
|
wait_for:
|
|
host: "{{ api_interface_address }}"
|
|
port: "{{ outward_rabbitmq_management_port }}"
|
|
connect_timeout: 1
|
|
state: stopped
|
|
when:
|
|
- enable_outward_rabbitmq | bool
|
|
- inventory_hostname in groups['outward-rabbitmq']
|
|
- container_facts['outward_rabbitmq'] is not defined
|
|
|
|
- name: Checking free port for outward RabbitMQ Cluster
|
|
wait_for:
|
|
host: "{{ api_interface_address }}"
|
|
port: "{{ outward_rabbitmq_cluster_port }}"
|
|
connect_timeout: 1
|
|
state: stopped
|
|
when:
|
|
- enable_outward_rabbitmq | bool
|
|
- inventory_hostname in groups['outward-rabbitmq']
|
|
- container_facts['outward_rabbitmq'] is not defined
|
|
|
|
- name: Checking free port for outward RabbitMQ EPMD
|
|
wait_for:
|
|
host: "{{ api_interface_address }}"
|
|
port: "{{ outward_rabbitmq_epmd_port }}"
|
|
connect_timeout: 1
|
|
state: stopped
|
|
when:
|
|
- enable_outward_rabbitmq | bool
|
|
- inventory_hostname in groups['outward-rabbitmq']
|
|
- container_facts['outward_rabbitmq'] is not defined
|
|
|
|
- name: Check if all outward rabbit hostnames are resolvable
|
|
vars:
|
|
nss_database: "{{ 'ahostsv4' if api_address_family == 'ipv4' else 'ahostsv6' }}"
|
|
command: "getent {{ nss_database }} {{ hostvars[item].ansible_facts.hostname }}"
|
|
changed_when: false
|
|
check_mode: false
|
|
register: outward_rabbitmq_hostnames
|
|
with_items: "{{ groups['outward-rabbitmq'] }}"
|
|
when:
|
|
- enable_outward_rabbitmq | bool
|
|
|
|
- name: Check if each rabbit hostname resolves uniquely to the proper IP address
|
|
fail:
|
|
msg: Hostname has to resolve uniquely to the IP address of api_interface
|
|
with_subelements:
|
|
- "{{ outward_rabbitmq_hostnames.results }}"
|
|
- stdout_lines
|
|
when:
|
|
- enable_outward_rabbitmq | bool
|
|
- not item.1 is match('^'+('api' | kolla_address(item.0.item))+'\\b')
|
|
|
|
- name: Check if TLS certificate exists for outward RabbitMQ
|
|
vars:
|
|
cert: "{{ query('first_found', paths, errors='ignore') }}"
|
|
paths:
|
|
- "{{ kolla_certificates_dir }}/{{ inventory_hostname }}/outward_rabbitmq-cert.pem"
|
|
- "{{ kolla_certificates_dir }}/{{ inventory_hostname }}-cert.pem"
|
|
- "{{ kolla_certificates_dir }}/outward_rabbitmq-cert.pem"
|
|
fail:
|
|
msg: No TLS certificate provided for outward RabbitMQ.
|
|
when:
|
|
- not kolla_externally_managed_cert | bool
|
|
- enable_outward_rabbitmq | bool
|
|
- rabbitmq_enable_tls | bool
|
|
- cert | length == 0
|
|
|
|
- name: Check if TLS key exists for outward RabbitMQ
|
|
vars:
|
|
key: "{{ query('first_found', paths, errors='ignore') }}"
|
|
paths:
|
|
- "{{ kolla_certificates_dir }}/{{ inventory_hostname }}/outward_rabbitmq-key.pem"
|
|
- "{{ kolla_certificates_dir }}/{{ inventory_hostname }}-key.pem"
|
|
- "{{ kolla_certificates_dir }}/outward_rabbitmq-key.pem"
|
|
fail:
|
|
msg: No TLS key provided for outward RabbitMQ.
|
|
when:
|
|
- not kolla_externally_managed_cert | bool
|
|
- enable_outward_rabbitmq | bool
|
|
- rabbitmq_enable_tls | bool
|
|
- key | length == 0
|