Charm: oneiric/zookeeper
Revision: 12
Hook: stop
#!/bin/bash
set -e
# By default we install from the main Ubuntu archive.
source=`config-get source`
case $source in
archive)
juju-log "Configuring zookeeper using the Ubuntu archive packages..."
zk_package="zookeeperd"
zk_service="zookeeper"
zk_conf="/etc/zookeeper/conf/zoo.cfg"
zk_myid="/etc/zookeeper/conf/myid"
zk_install="/etc/init/zookeeper.conf"
;;
dev|testing|stable)
juju-log "Configuring zookeeper using the Hadoop Ubuntu Team PPA..."
zk_package="hadoop-zookeeper-server"
zk_service="hadoop-zookeeper-server"
zk_conf="/etc/hadoop-zookeeper/conf/zoo.cfg"
zk_myid="/etc/hadoop-zookeeper/conf/myid"
zk_install="/etc/init/hadoop-zookeeper-server.conf"
;;
*)
juju-log "Unsupported source..."
exit 1
;;
esac
base_packages="ntp"
zk_port="`config-get zk-port`"
configure_sources () {
source=`config-get source`
case $source in
archive)
juju-log "Configuring zookeeper using the Ubuntu archive packages..."
;;
dev|testing|stable)
juju-log "Configuring zookeeper using the Hadoop Ubuntu Team PPA..."
add-apt-repository ppa:hadoop-ubuntu/$source
apt-get update
;;
*)
juju-log "Unsupported source..."
exit 1
;;
esac
}
install_zookeeper () {
juju-log "Installing ZooKeeper..."
apt-get install -y $zk_package $base_packages
}
configure_zookeeper () {
juju-log "Purging any standalone configuration..."
# This is found in the bigtop default configuration
sed -i "/^server.0/d" $zk_conf
juju-log "Generating unique ID for this instance..."
unit_no=`echo $JUJU_UNIT_NAME | cut -d / -f 2`
echo $unit_no > $zk_myid
juju-log "Adding this unit to the quorum..."
hostname=`unit-get private-address`
# Purge and re-add as required
sed -i "/^server.${unit_no}/d" $zk_conf
echo "server.${unit_no}=${hostname}:2888:3888" >> $zk_conf
# Expose port as required
open-port $zk_port
}
# Service Control Commands
restart_zookeeper () {
juju-log "Restarting ZooKeeper"
service $zk_service status && service $zk_service restart || :
}
start_zookeeper() {
juju-log "Starting ZooKeeper"
service $zk_service status || service $zk_service start
}
stop_zookeeper() {
juju-log "Stopping ZooKeeper"
service $zk_service stop || :
}
update_quorum() {
# Purge out existing quorum config to deal with departure of
# ZK nodes
sed -i "/^server./d" $zk_conf
# Add this node back into the list
juju-log "Adding this unit to the quorum..."
unit_no=`echo $JUJU_UNIT_NAME | cut -d / -f 2`
hostname=`unit-get private-address`
echo "server.${unit_no}=${hostname}:2888:3888" >> $zk_conf
# Re-create based on current relations
for member in `relation-list`
do
juju-log "Adding $member to quorum"
member_id=`echo ${member} | cut -d / -f 2`
member_hostname=`relation-get private-address ${member}`
echo "server.${member_id}=${member_hostname}:2888:3888" >> $zk_conf
done
}
setup_zk_interface() {
juju-log "Setup ZooKeeper Client"
relation-set port=$zk_port
}
COMMAND=`basename $0`
case $COMMAND in
install)
configure_sources
install_zookeeper
configure_zookeeper
restart_zookeeper
;;
start)
start_zookeeper
;;
stop)
stop_zookeeper
;;
quorum-relation-joined)
;;
quorum-relation-changed|quorum-relation-departed)
update_quorum
restart_zookeeper
;;
zookeeper-relation-joined)
setup_zk_interface
;;
upgrade-charm)
configure_zookeeper
restart_zookeeper
;;
*)
juju-log "Command not recognised"
;;
esac