Add qdrouterd role for messaging infrastructure component
Adding the role needed to run the qdrouterd as an infrastructure component which provides a messaging backend for the oslo.messaging AMQP 1.0 driver. The qdrouterd will provide direct messaging capabilities for the RPC messaging pattern in support of hybrid messaging deployments. Implements: blueprint qdrouterd-role Change-Id: I74c654b3c70f61f81c2c7efa87f076a62a4a2dd8
This commit is contained in:
parent
4510c525a6
commit
eeb535aa2e
@ -234,6 +234,8 @@ panko_api_port: "8977"
|
|||||||
|
|
||||||
placement_api_port: "8780"
|
placement_api_port: "8780"
|
||||||
|
|
||||||
|
qdrouterd_port: "15676"
|
||||||
|
|
||||||
rabbitmq_port: "5672"
|
rabbitmq_port: "5672"
|
||||||
rabbitmq_management_port: "15672"
|
rabbitmq_management_port: "15672"
|
||||||
rabbitmq_cluster_port: "25672"
|
rabbitmq_cluster_port: "25672"
|
||||||
@ -385,6 +387,7 @@ enable_octavia: "no"
|
|||||||
enable_openvswitch: "{{ neutron_plugin_agent != 'linuxbridge' | bool }}"
|
enable_openvswitch: "{{ neutron_plugin_agent != 'linuxbridge' | bool }}"
|
||||||
enable_osprofiler: "no"
|
enable_osprofiler: "no"
|
||||||
enable_panko: "no"
|
enable_panko: "no"
|
||||||
|
enable_qdrouterd: "no"
|
||||||
enable_rally: "no"
|
enable_rally: "no"
|
||||||
enable_sahara: "no"
|
enable_sahara: "no"
|
||||||
enable_searchlight: "no"
|
enable_searchlight: "no"
|
||||||
@ -430,6 +433,11 @@ rabbitmq_user: "openstack"
|
|||||||
rabbitmq_version: "rabbitmq_server-3.6/plugins/rabbitmq_clusterer-3.6.x.ez/rabbitmq_clusterer-3.6.x-667f92b0/ebin"
|
rabbitmq_version: "rabbitmq_server-3.6/plugins/rabbitmq_clusterer-3.6.x.ez/rabbitmq_clusterer-3.6.x-667f92b0/ebin"
|
||||||
outward_rabbitmq_user: "openstack"
|
outward_rabbitmq_user: "openstack"
|
||||||
|
|
||||||
|
####################
|
||||||
|
# Qdrouterd options
|
||||||
|
####################
|
||||||
|
qdrouterd_user: "openstack"
|
||||||
|
|
||||||
####################
|
####################
|
||||||
# HAProxy options
|
# HAProxy options
|
||||||
####################
|
####################
|
||||||
|
@ -80,6 +80,9 @@ control
|
|||||||
[outward-rabbitmq:children]
|
[outward-rabbitmq:children]
|
||||||
control
|
control
|
||||||
|
|
||||||
|
[qdrouterd:children]
|
||||||
|
control
|
||||||
|
|
||||||
[mongodb:children]
|
[mongodb:children]
|
||||||
control
|
control
|
||||||
|
|
||||||
|
@ -101,6 +101,9 @@ control
|
|||||||
[outward-rabbitmq:children]
|
[outward-rabbitmq:children]
|
||||||
control
|
control
|
||||||
|
|
||||||
|
[qdrouterd:children]
|
||||||
|
control
|
||||||
|
|
||||||
[mongodb:children]
|
[mongodb:children]
|
||||||
control
|
control
|
||||||
|
|
||||||
|
22
ansible/roles/qdrouterd/defaults/main.yml
Normal file
22
ansible/roles/qdrouterd/defaults/main.yml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
---
|
||||||
|
project_name: "qdrouterd"
|
||||||
|
|
||||||
|
qdrouterd_services:
|
||||||
|
qdrouterd:
|
||||||
|
container_name: qdrouterd
|
||||||
|
group: qdrouterd
|
||||||
|
enabled: true
|
||||||
|
image: "{{ qdrouterd_image_full }}"
|
||||||
|
volumes:
|
||||||
|
- "{{ node_config_directory }}/qdrouterd/:{{ container_config_directory }}/:ro"
|
||||||
|
- "/etc/localtime:/etc/localtime:ro"
|
||||||
|
- "qdrouterd:/var/lib/qdrouterd/"
|
||||||
|
- "kolla_logs:/var/log/kolla/"
|
||||||
|
|
||||||
|
|
||||||
|
####################
|
||||||
|
# Docker
|
||||||
|
####################
|
||||||
|
qdrouterd_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-qdrouterd"
|
||||||
|
qdrouterd_tag: "{{ openstack_release }}"
|
||||||
|
qdrouterd_image_full: "{{ qdrouterd_image }}:{{ qdrouterd_tag }}"
|
21
ansible/roles/qdrouterd/handlers/main.yml
Normal file
21
ansible/roles/qdrouterd/handlers/main.yml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
- name: Restart qdrouterd container
|
||||||
|
vars:
|
||||||
|
service_name: "qdrouterd"
|
||||||
|
service: "{{ qdrouterd_services[service_name] }}"
|
||||||
|
config_json: "{{ qdrouterd_config_jsons.results|selectattr('item.key', 'equalto', service_name)|first }}"
|
||||||
|
qdrouterd_container: "{{ check_qdrouterd_containers.results|selectattr('item.key', 'equalto', service_name)|first }}"
|
||||||
|
kolla_docker:
|
||||||
|
action: "recreate_or_restart_container"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
name: "{{ service.container_name }}"
|
||||||
|
image: "{{ service.image }}"
|
||||||
|
volumes: "{{ service.volumes }}"
|
||||||
|
when:
|
||||||
|
- action != "config"
|
||||||
|
- inventory_hostname in groups[service.group]
|
||||||
|
- service.enabled | bool
|
||||||
|
- config_json.changed | bool
|
||||||
|
or qdrouterd_confs.changed | bool
|
||||||
|
or qdrouterd_sasl_confs.changed | bool
|
||||||
|
or qdrouterd_container.changed | bool
|
3
ansible/roles/qdrouterd/meta/main.yml
Normal file
3
ansible/roles/qdrouterd/meta/main.yml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
dependencies:
|
||||||
|
- { role: common }
|
16
ansible/roles/qdrouterd/tasks/add_sasl_user.yml
Normal file
16
ansible/roles/qdrouterd/tasks/add_sasl_user.yml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
- name: Wait for qdrouterd is up
|
||||||
|
wait_for:
|
||||||
|
host: "{{ api_interface_address }}"
|
||||||
|
port: "{{ qdrouterd_port }}"
|
||||||
|
connect_timeout: 1
|
||||||
|
state: started
|
||||||
|
when:
|
||||||
|
- action != "config"
|
||||||
|
|
||||||
|
- name: Create qdrouterd sasl user
|
||||||
|
shell: echo {{ qdrouterd_password }} | docker exec -u root -i qdrouterd saslpasswd2 -c -p -f /var/lib/qdrouterd/qdrouterd.sasldb -u AMQP {{ qdrouterd_user }}
|
||||||
|
run_once: true
|
||||||
|
changed_when: true
|
||||||
|
when:
|
||||||
|
- action != "config"
|
1
ansible/roles/qdrouterd/tasks/check.yml
Normal file
1
ansible/roles/qdrouterd/tasks/check.yml
Normal file
@ -0,0 +1 @@
|
|||||||
|
---
|
72
ansible/roles/qdrouterd/tasks/config.yml
Normal file
72
ansible/roles/qdrouterd/tasks/config.yml
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
---
|
||||||
|
- name: Ensuring config directories exist
|
||||||
|
file:
|
||||||
|
path: "{{ node_config_directory }}/{{ item.key }}"
|
||||||
|
state: "directory"
|
||||||
|
recurse: yes
|
||||||
|
when:
|
||||||
|
- inventory_hostname in groups[item.value.group]
|
||||||
|
- item.value.enabled | bool
|
||||||
|
with_dict: "{{ qdrouterd_services }}"
|
||||||
|
|
||||||
|
- name: Copying over config.json files for services
|
||||||
|
template:
|
||||||
|
src: "{{ item.key }}.json.j2"
|
||||||
|
dest: "{{ node_config_directory }}/{{ item.key }}/config.json"
|
||||||
|
register: qdrouterd_config_jsons
|
||||||
|
when:
|
||||||
|
- inventory_hostname in groups[item.value.group]
|
||||||
|
- item.value.enabled | bool
|
||||||
|
with_dict: "{{ qdrouterd_services }}"
|
||||||
|
notify:
|
||||||
|
- Restart qdrouterd container
|
||||||
|
|
||||||
|
- name: Copying over qdrouterd config
|
||||||
|
vars:
|
||||||
|
service: "{{ qdrouterd_services['qdrouterd'] }}"
|
||||||
|
template:
|
||||||
|
src: "{{ item }}"
|
||||||
|
dest: "{{ node_config_directory }}/qdrouterd/qdrouterd.conf"
|
||||||
|
register: qdrouterd_confs
|
||||||
|
when:
|
||||||
|
- inventory_hostname in groups[service.group]
|
||||||
|
- service.enabled | bool
|
||||||
|
with_first_found:
|
||||||
|
- "{{ node_custom_config }}/qdrouterd/{{ inventory_hostname }}/qdrouterd.conf"
|
||||||
|
- "{{ node_custom_config }}/qdrouterd/qdrouterd.conf"
|
||||||
|
- "qdrouterd.conf.j2"
|
||||||
|
notify:
|
||||||
|
- Restart qdrouterd container
|
||||||
|
|
||||||
|
- name: Copying over qdrouterd sasl config
|
||||||
|
vars:
|
||||||
|
service: "{{ qdrouterd_services['qdrouterd'] }}"
|
||||||
|
template:
|
||||||
|
src: "{{ item }}"
|
||||||
|
dest: "{{ node_config_directory }}/qdrouterd/qdrouterd-sasl.conf"
|
||||||
|
register: qdrouterd_sasl_confs
|
||||||
|
when:
|
||||||
|
- inventory_hostname in groups[service.group]
|
||||||
|
- service.enabled | bool
|
||||||
|
with_first_found:
|
||||||
|
- "{{ node_custom_config }}/qdrouterd/{{ inventory_hostname }}/qdrouterd-sasl.conf"
|
||||||
|
- "{{ node_custom_config }}/qdrouterd/qdrouterd-sasl.conf"
|
||||||
|
- "qdrouterd-sasl.conf.j2"
|
||||||
|
notify:
|
||||||
|
- Restart qdrouterd container
|
||||||
|
|
||||||
|
- name: Check qdrouterd containers
|
||||||
|
kolla_docker:
|
||||||
|
action: "compare_container"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
name: "{{ item.value.container_name }}"
|
||||||
|
image: "{{ item.value.image }}"
|
||||||
|
volumes: "{{ item.value.volumes }}"
|
||||||
|
register: check_qdrouterd_containers
|
||||||
|
when:
|
||||||
|
- action != "config"
|
||||||
|
- inventory_hostname in groups[item.value.group]
|
||||||
|
- item.value.enabled | bool
|
||||||
|
with_dict: "{{ qdrouterd_services }}"
|
||||||
|
notify:
|
||||||
|
- Restart qdrouterd container
|
7
ansible/roles/qdrouterd/tasks/deploy.yml
Normal file
7
ansible/roles/qdrouterd/tasks/deploy.yml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
- include: config.yml
|
||||||
|
|
||||||
|
- name: Flush handlers
|
||||||
|
meta: flush_handlers
|
||||||
|
|
||||||
|
- include: add_sasl_user.yml
|
2
ansible/roles/qdrouterd/tasks/main.yml
Normal file
2
ansible/roles/qdrouterd/tasks/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
- include: "{{ action }}.yml"
|
28
ansible/roles/qdrouterd/tasks/precheck.yml
Normal file
28
ansible/roles/qdrouterd/tasks/precheck.yml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
- name: Get container facts
|
||||||
|
kolla_container_facts:
|
||||||
|
name:
|
||||||
|
- qdrouterd
|
||||||
|
register: container_facts
|
||||||
|
|
||||||
|
- name: Checking free port for Qdrouterd
|
||||||
|
wait_for:
|
||||||
|
host: "{{ api_interface_address }}"
|
||||||
|
port: "{{ qdrouterd_port }}"
|
||||||
|
connect_timeout: 1
|
||||||
|
timeout: 1
|
||||||
|
state: stopped
|
||||||
|
when:
|
||||||
|
- container_facts['qdrouterd'] is not defined
|
||||||
|
- inventory_hostname in groups['qdrouterd']
|
||||||
|
|
||||||
|
- name: Check if all qdrouterd hostnames are resolvable
|
||||||
|
command: "getent ahostsv4 {{ hostvars[item]['ansible_hostname'] }}"
|
||||||
|
changed_when: false
|
||||||
|
register: qdrouterd_hostnames
|
||||||
|
with_items: "{{ groups['qdrouterd'] }}"
|
||||||
|
|
||||||
|
- fail: msg="Hostname has to resolve to IP address of api_interface"
|
||||||
|
with_items: "{{ qdrouterd_hostnames.results }}"
|
||||||
|
when:
|
||||||
|
- "item.stdout.find(hostvars[item['item']]['ansible_' ~ hostvars[item['item']]['api_interface']]['ipv4']['address']) == -1"
|
10
ansible/roles/qdrouterd/tasks/pull.yml
Normal file
10
ansible/roles/qdrouterd/tasks/pull.yml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
- name: Pulling qdrouterd image
|
||||||
|
kolla_docker:
|
||||||
|
action: "pull_image"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
image: "{{ item.value.image }}"
|
||||||
|
when:
|
||||||
|
- inventory_hostname in groups[item.value.group]
|
||||||
|
- item.value.enabled | bool
|
||||||
|
with_dict: "{{ qdrouterd_services }}"
|
2
ansible/roles/qdrouterd/tasks/reconfigure.yml
Normal file
2
ansible/roles/qdrouterd/tasks/reconfigure.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
- include: deploy.yml
|
5
ansible/roles/qdrouterd/tasks/upgrade.yml
Normal file
5
ansible/roles/qdrouterd/tasks/upgrade.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
- include: config.yml
|
||||||
|
|
||||||
|
- name: Flush handlers
|
||||||
|
meta: flush_handlers
|
4
ansible/roles/qdrouterd/templates/qdrouterd-sasl.conf.j2
Normal file
4
ansible/roles/qdrouterd/templates/qdrouterd-sasl.conf.j2
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
pwcheck_method: auxprop
|
||||||
|
auxprop_plugin: sasldb
|
||||||
|
sasldb_path: /var/lib/qdrouterd/qdrouterd.sasldb
|
||||||
|
mech_list: ANONYMOUS PLAIN
|
58
ansible/roles/qdrouterd/templates/qdrouterd.conf.j2
Normal file
58
ansible/roles/qdrouterd/templates/qdrouterd.conf.j2
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
router {
|
||||||
|
mode: standalone
|
||||||
|
id: Router.A
|
||||||
|
workerThreads: 4
|
||||||
|
saslConfigPath: /etc/sasl2
|
||||||
|
saslConfigName: qdrouterd
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
addr: {{ api_interface_address }}
|
||||||
|
port: {{ qdrouterd_port }}
|
||||||
|
role: normal
|
||||||
|
authenticatePeer: no
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
prefix: unicast
|
||||||
|
distribution: closest
|
||||||
|
}
|
||||||
|
address {
|
||||||
|
prefix: exclusive
|
||||||
|
distribution: closest
|
||||||
|
}
|
||||||
|
address {
|
||||||
|
prefix: broadcast
|
||||||
|
distribution: multicast
|
||||||
|
}
|
||||||
|
address {
|
||||||
|
prefix: openstack.org/om/rpc/multicast
|
||||||
|
distribution: multicast
|
||||||
|
}
|
||||||
|
address {
|
||||||
|
prefix: openstack.org/om/rpc/unicast
|
||||||
|
distribution: closest
|
||||||
|
}
|
||||||
|
address {
|
||||||
|
prefix: openstack.org/om/rpc/anycast
|
||||||
|
distribution: balanced
|
||||||
|
}
|
||||||
|
address {
|
||||||
|
prefix: openstack.org/om/notify/multicast
|
||||||
|
distribution: multicast
|
||||||
|
}
|
||||||
|
address {
|
||||||
|
prefix: openstack.org/om/notify/unicast
|
||||||
|
distribution: closest
|
||||||
|
}
|
||||||
|
address {
|
||||||
|
prefix: openstack.org/om/notify/anycast
|
||||||
|
distribution: balanced
|
||||||
|
}
|
||||||
|
|
||||||
|
log {
|
||||||
|
module: DEFAULT
|
||||||
|
enable: info+
|
||||||
|
output: /var/log/kolla/qdrouterd/qdrouterd.log
|
||||||
|
}
|
29
ansible/roles/qdrouterd/templates/qdrouterd.json.j2
Normal file
29
ansible/roles/qdrouterd/templates/qdrouterd.json.j2
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"command": "/usr/sbin/qdrouterd",
|
||||||
|
"config_files": [
|
||||||
|
{
|
||||||
|
"source": "{{ container_config_directory }}/qdrouterd.conf",
|
||||||
|
"dest": "/etc/qpid-dispatch/qdrouterd.conf",
|
||||||
|
"owner": "qdrouterd",
|
||||||
|
"perm": "0600"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "{{ container_config_directory }}/qdrouterd-sasl.conf",
|
||||||
|
"dest": "/etc/sasl2/qdrouterd.conf",
|
||||||
|
"owner": "qdrouterd",
|
||||||
|
"perm": "0600"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"permissions": [
|
||||||
|
{
|
||||||
|
"path": "/var/lib/qdrouterd",
|
||||||
|
"owner": "qdrouterd:qdrouterd",
|
||||||
|
"recurse": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "/var/log/kolla/qdrouterd",
|
||||||
|
"owner": "qdrouterd:qdrouterd",
|
||||||
|
"recurse": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -192,6 +192,15 @@
|
|||||||
role_rabbitmq_user: '{{ outward_rabbitmq_user }}',
|
role_rabbitmq_user: '{{ outward_rabbitmq_user }}',
|
||||||
when: enable_outward_rabbitmq | bool }
|
when: enable_outward_rabbitmq | bool }
|
||||||
|
|
||||||
|
- name: Apply role qdrouterd
|
||||||
|
gather_facts: false
|
||||||
|
hosts: qdrouterd
|
||||||
|
serial: '{{ serial|default("0") }}'
|
||||||
|
roles:
|
||||||
|
- { role: qdrouterd,
|
||||||
|
tags: qdrouterd,
|
||||||
|
when: enable_qdrouterd | bool }
|
||||||
|
|
||||||
- name: Apply role etcd
|
- name: Apply role etcd
|
||||||
gather_facts: false
|
gather_facts: false
|
||||||
hosts: etcd
|
hosts: etcd
|
||||||
|
@ -185,6 +185,7 @@ kolla_internal_vip_address: "10.10.10.254"
|
|||||||
#enable_openvswitch: "{{ neutron_plugin_agent != 'linuxbridge' | bool }}"
|
#enable_openvswitch: "{{ neutron_plugin_agent != 'linuxbridge' | bool }}"
|
||||||
#enable_osprofiler: "no"
|
#enable_osprofiler: "no"
|
||||||
#enable_panko: "no"
|
#enable_panko: "no"
|
||||||
|
#enable_qdrouterd: "no"
|
||||||
#enable_rally: "no"
|
#enable_rally: "no"
|
||||||
#enable_sahara: "no"
|
#enable_sahara: "no"
|
||||||
#enable_searchlight: "no"
|
#enable_searchlight: "no"
|
||||||
|
@ -175,6 +175,11 @@ gnocchi_project_id:
|
|||||||
gnocchi_resource_id:
|
gnocchi_resource_id:
|
||||||
gnocchi_user_id:
|
gnocchi_user_id:
|
||||||
|
|
||||||
|
####################
|
||||||
|
# Qdrouterd options
|
||||||
|
####################
|
||||||
|
qdrouterd_password:
|
||||||
|
|
||||||
####################
|
####################
|
||||||
# RabbitMQ options
|
# RabbitMQ options
|
||||||
####################
|
####################
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- Add qdrouterd ansible role (apache qpid-dispatch-router) for direct
|
||||||
|
messaging infrastructure component. Oslo.messaging amqp driver supports
|
||||||
|
qdrouterd for rpc messaging backend communications.
|
Loading…
Reference in New Issue
Block a user