diff --git a/hooks/amqp-relation-changed b/hooks/amqp-relation-changed deleted file mode 100755 index d14db9a0..00000000 --- a/hooks/amqp-relation-changed +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash -set -ue - -# peer gives us a username, we generate credentials and access in return -RABBIT_USER=`relation-get username` - -DEFAULT_ETH=$(ip route | grep default | awk '{ print $5 }') -IP=$(ifconfig $DEFAULT_ETH | grep 'inet addr' | awk '{ print $2 }' | cut -d: -f2) - -RABBIT_CTL='rabbitmqctl' -PASSWD_FILE="/var/run/ensemble/$RABBIT_USER.passwd" - -if ! which pwgen ; then apt-get -y install pwgen ; fi - -if [[ -e $PASSWD_FILE ]] ; then - PASSWORD=$(cat $PASSWD_FILE) -else - PASSWORD=$(pwgen 10 1) - echo $PASSWORD >$PASSWD_FILE - chmod 0400 $PASSWD_FILE -fi - -if [[ -z $RABBIT_USER ]] ; then - ensemble-log "Peer not ready." - exit 0 -fi - -function user_exists { - $RABBIT_CTL list_users | grep $1 >/dev/null -} - -function user_is_admin { - $RABBIT_CTL list_users | grep $1 | grep true >/dev/null -} - -function user_create { - ensemble-log "Creating user $1." - - $RABBIT_CTL add_user $1 $PASSWORD || return 1 - - # grant the user all permissions on the default vhost / - # TODO: investigate sane permissions - ensemble-log "Granting permission to $1 on vhost /" - $RABBIT_CTL set_permissions -p / $1 ".*" ".*" ".*" - - if [[ $2 == 'admin' ]] ; then - user_is_admin $1 && return 0 - ensemble-log "Granting user $1 admin access" - $RABBIT_CTL set_admin $1 || return 1 - fi -} - -if ! user_exists $RABBIT_USER ; then - user_create $RABBIT_USER admin || exit 1 -else - ensemble-log "RabbiqMQ user $RABBIT_USER already exists." -fi - -ensemble-log "Giving peer credentials for $RABBIT_USER@$IP" -relation-set ip=$IP -relation-set password=$PASSWORD diff --git a/hooks/amqp-relation-changed b/hooks/amqp-relation-changed new file mode 120000 index 00000000..564b83a1 --- /dev/null +++ b/hooks/amqp-relation-changed @@ -0,0 +1 @@ +rabbitmq-relations \ No newline at end of file diff --git a/hooks/amqp-relation-joined b/hooks/amqp-relation-joined deleted file mode 100755 index 7df35fe4..00000000 --- a/hooks/amqp-relation-joined +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -set -ue -echo "JOINED" >>/tmp/log - diff --git a/hooks/amqp-relation-joined b/hooks/amqp-relation-joined new file mode 120000 index 00000000..564b83a1 --- /dev/null +++ b/hooks/amqp-relation-joined @@ -0,0 +1 @@ +rabbitmq-relations \ No newline at end of file diff --git a/hooks/install b/hooks/install deleted file mode 100755 index 2576d062..00000000 --- a/hooks/install +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -set -ue -ensemble-log "Starting install." -echo "INSTALL" >>/tmp/log - -DEFAULT_ETH=$(ip route | grep default | awk '{ print $5 }') -IP=$(ifconfig $DEFAULT_ETH | grep 'inet addr' | awk '{ print $2 }' | cut -d: -f2) - - -if ! cat /etc/hosts | grep "$IP $HOSTNAME" >>/dev/null; then - echo "Updating /etc/hosts" - echo $IP $HOSTNAME >> /etc/hosts -fi - -DEBIAN_FRONTEND=noninteractive apt-get -y install rabbitmq-server -rc=$? -echo "Install done. Exiting rc $rc" >>/tmp/log -ensemble-log "Install complete. $rc" -exit $rc - diff --git a/hooks/install b/hooks/install new file mode 120000 index 00000000..564b83a1 --- /dev/null +++ b/hooks/install @@ -0,0 +1 @@ +rabbitmq-relations \ No newline at end of file diff --git a/hooks/rabbitmq-common b/hooks/rabbitmq-common new file mode 100755 index 00000000..52236411 --- /dev/null +++ b/hooks/rabbitmq-common @@ -0,0 +1,29 @@ +#!/bin/bash + +RABBIT_CTL='rabbitmqctl' +PASSWD_FILE="/var/run/ensemble/$RABBIT_USER.passwd" +HOSTNAME=`hostname -f` +function user_exists { + $RABBIT_CTL list_users | grep $1 >/dev/null +} + +function user_is_admin { + $RABBIT_CTL list_users | grep $1 | grep true >/dev/null +} + +function user_create { + ensemble-log "rabbitmq: Creating user $1." + + $RABBIT_CTL add_user $1 $PASSWORD || return 1 + + # grant the user all permissions on the default vhost / + # TODO: investigate sane permissions + ensemble-log "rabbitmq: Granting permission to $1 on vhost /" + $RABBIT_CTL set_permissions -p / $1 ".*" ".*" ".*" + + if [[ $2 == 'admin' ]] ; then + user_is_admin $1 && return 0 + ensemble-log "rabbitmq: Granting user $1 admin access" + $RABBIT_CTL set_admin $1 || return 1 + fi +} diff --git a/hooks/rabbitmq-relations b/hooks/rabbitmq-relations new file mode 100755 index 00000000..ea6aa6bb --- /dev/null +++ b/hooks/rabbitmq-relations @@ -0,0 +1,52 @@ +#!/bin/bash +set -u +FORMULA_DIR=$(dirname $0) +ARG0=${0##*/} + +ensemble-log "rabbitmq: Firing hook $ARG0." + +DEFAULT_ETH=$(ip route | grep default | awk '{ print $5 }') +IP=$(ifconfig $DEFAULT_ETH | grep 'inet addr' | awk '{ print $2 }' | cut -d: -f2) + + +function install_hook() { + if ! cat /etc/hosts | grep "$IP $HOSTNAME" >>/dev/null; then + echo "Updating /etc/hosts" + echo $IP $HOSTNAME >> /etc/hosts + fi + [[ ! `which pwgen` ]] && apt-get -y install pwgen + apt-get -y install rabbitmq-server + rc=$? + ensemble-log "rabbitmq: Installation complete. $rc" +} + +function amqp_changed() { + RABBIT_USER=`relation-get username` + [[ -z $RABBIT_USER ]] && exit 0 + if [[ -e $PASSWD_FILE ]] ; then + PASSWORD=$(cat $PASSWD_FILE) + else + PASSWORD=$(pwgen 10 1) + echo $PASSWORD >$PASSWD_FILE + chmod 0400 $PASSWD_FILE + fi + if ! user_exists $RABBIT_USER ; then + user_create $RABBIT_USER admin || exit 1 + else + ensemble-log "rabbitmq: user $RABBIT_USER already exists." + fi + ensemble-log "rabbitmq: Returning credentials for $RABBIT_USER@$HOSTNAME" + relation-set hostname=$HOSTNAME + relation-set password=$PASSWORD +} + +case $ARG0 in + "install") install_hook ;; + "start") service rabbitmq-server status || service rabbitmq-server start ;; + "stop") service rabbitmq-server status && service rabbitmq-server stop ;; + "amqp-relation-joined") exit 0 ;; + "amqp-relation-changed") amqp_changed ;; +esac +rc=$? +ensemble-log "rabbitmq: Hook $ARG0 complete. Exitting $rc" +exit $rc diff --git a/hooks/start b/hooks/start deleted file mode 100755 index b4a96246..00000000 --- a/hooks/start +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -start -ue -echo "Start action" >>/tmp/log - -service rabbitmq-server status || service rabbitmq-server start diff --git a/hooks/start b/hooks/start new file mode 120000 index 00000000..564b83a1 --- /dev/null +++ b/hooks/start @@ -0,0 +1 @@ +rabbitmq-relations \ No newline at end of file diff --git a/hooks/stop b/hooks/stop deleted file mode 100755 index dafdb910..00000000 --- a/hooks/stop +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -start -ue - -echo "stop" >>/tmp/log diff --git a/hooks/stop b/hooks/stop new file mode 120000 index 00000000..564b83a1 --- /dev/null +++ b/hooks/stop @@ -0,0 +1 @@ +rabbitmq-relations \ No newline at end of file diff --git a/metadata.yaml b/metadata.yaml index 78cb58bd..1d892750 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -1,6 +1,6 @@ ensemble: formula name: rabbitmq -revision: 15 +revision: 19 summary: "An AMQP server written in Erlang" description: | RabbitMQ is an implementation of AMQP, the emerging standard for high