Add a qpidd element

Qpid can be used in place of RabbitMQ as the message broker
for OpenStack services.

Change-Id: Id064d7f1792b88fd5d87c298a1d4cb06de19c47e
This commit is contained in:
Richard Su 2013-09-13 12:08:41 -07:00
parent 124329a40e
commit be75de3e81
5 changed files with 143 additions and 0 deletions

57
elements/qpidd/README.md Normal file
View File

@ -0,0 +1,57 @@
Installs Qpid as a substitute for RabbitMQ as the rpc_backend for
various OpenStack services.
To use Qpid, when building an image, add the qpid element and
remove the rabbitmq-server element. At the moment, rabbitmq-server
is listed as default in boot-stack/element-deps.
sed -i "s/rabbitmq-server/qpidd/" $TRIPLEO_ROOT/tripleo-image-elements/elements/boot-stack/element-deps
The configuration files of other services like Heat, Neutron, Nova,
Cinder, and Glance are updated by os-apply-config and os-apply-config
will place the correct configurations for either RabbitMQ or Qpid
depending on what is present in the Heat metadata.
The Heat metadata/templates should be updated to use qpid instead
of rabbitmq. In addition to the password which rabbitmq lists by
default, the username should also be specified for qpid.
For the seed image the default metadata on the file system needs
to be updated. Substitute "rabbit" with "qpid".
sed -i "s/rabbit/qpid/" $TRIPLEO_ROOT/tripleo-image-elements/elements/seed-stack-config/config.json
After including the username, the qpid section should look like
"qpid": {
"host": "127.0.0.1",
"username": "guest",
"password": "guest"
}
For the undercloud, update the Heat template by substituting "rabbit:"
with "qpid:".
sed -i "s/rabbit:/qpid:/" $TRIPLEO_ROOT/tripleo-heat-templates/undercloud-vm.yaml
After including the username, the qpid section should look like
qpid:
host: 127.0.0.1
username: guest
password: guest
For the overcloud, update the Heat template by substituting "rabbit:"
with "qpid:".
sed -i "s/rabbit:/qpid:/" $TRIPLEO_ROOT/tripleo-heat-templates/overcloud.yaml
After including the username, the qpid section(s) should look like
qpid:
host:
Fn::GetAtt:
- notcompute
- PrivateIp
username: guest
password: guest

View File

@ -0,0 +1,2 @@
os-refresh-config
os-apply-config

View File

@ -0,0 +1,34 @@
#!/bin/bash
install-packages qpidd qpid-tools qpid-client
function install_qpidd_upstart {
cat > /etc/init/qpidd.conf << eof
start on runlevel [2345]
stop on runlevel [016]
respawn
respawn limit 2 5
script
exec qpidd --config=/etc/qpid/qpidd.conf
end script
post-start exec sleep 1
eof
}
function install_qpidd_systemd {
cat > /etc/systemd/system/qpidd.service << eof
.include /lib/systemd/system/qpidd.service
[Unit]
Before=rc-local.service
Restart=on-failure
eof
}
if [ -d /etc/init ]; then
install_qpidd_upstart
elif [ -d /lib/systemd/system ]; then
install_qpidd_systemd
fi

View File

@ -0,0 +1,40 @@
# QPID policy file
#
# User definition:
# user = <user-name>[@domain[/realm]]
#
# User/Group lists:
# user-list = user1 user2 user3 ...
# group-name-list = group1 group2 group3 ...
#
# Group definition:
# group <group-name> = [user-list] [group-name-list]
#
# ACL definition:
# permission = [allow|allow-log|deny|deny-log]
# action = [consume|publish|create|access|bind|unbind|delete|purge|update]
# object = [virtualhost|queue|exchange|broker|link|route|method]
# property = [name|durable|owner|routingkey|passive|autodelete|exclusive|type|alternate|queuename|schemapackage|schemaclass]
#
# acl permission {<group-name>|<user-name>|"all"} {action|"all"} [object|"all"] [property=<property-value>]
#
# Example:
#
# group client = user1@QPID user2@QPID
# acl allow client publish routingkey=exampleQueue exchange=amq.direct
#
# Will allow the group "client" containing of "user1" and "user2" be able to
# make use of the routing key "exampleQueue" on the "amq.direct" exchange.
# Group definitions
group admin admin@QPID
# Admin is allowed to do everything
acl allow admin all
{{#qpid}}
acl allow {{username}}@QPID all all
{{/qpid}}
# Deny everything else by default
acl deny all all

View File

@ -0,0 +1,10 @@
#!/bin/bash
set -eu
username=$(os-apply-config --key qpid.username)
password=$(os-apply-config --key qpid.password)
sasldb_file=$(grep sasldb_path /etc/sasl2/qpidd.conf | cut -d \: -f 2 | cut -d " " -f 2)
echo "$password" | saslpasswd2 -c -p -f $sasldb_file -u QPID $username
service qpidd restart