discourse_docker/launcher

147 lines
3.7 KiB
Plaintext
Executable File

#/bin/bash
command=$1
config=$2
config_file="$config".yml
cidfile=cids/"$config".cid
cidbootstrap=cids/"$config"_boostrap.cid
image=samsaffron/discourse
docker_path=`which docker`
usage () {
echo "Usage: launcher COMMAND CONFIG"
echo "Commands:"
echo " start: Start/initialize a container"
echo " stop: Stop a running container"
echo " restart: Restart a container"
echo " destroy: Stop and remove a container"
echo " ssh: Start a bash shell in a running container"
echo " logs: Docker logs for container"
echo " bootstrap: Bootstrap a container for the config base on an image"
exit 1
}
install_docker() {
echo "Docker is not installed, make sure you are running on the 3.8 kernel"
echo "The best supported Docker release is Ubuntu 12.04.03 for it run the following"
echo
echo "sudo apt-get update"
echo "sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring"
echo "sudo reboot"
echo
echo "sudo sh -c \"wget -qO- https://get.docker.io/gpg | apt-key add -\""
echo "sudo sh -c \"echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list\""
echo "sudo apt-get update"
echo "sudo apt-get install lxc-docker"
exit 1
}
[ -z $docker_path ] && {
install_docker
}
[ $# -ne 2 ] && {
usage
}
if [ ! -e $config_file ]
then
echo "Config file was not found, ensure $config_file exists"
exit 1
fi
case "$command" in
bootstrap)
read -r -d '' ruby <<RUBY
require 'yaml'
puts YAML.load(STDIN.readlines.join)["template"]
RUBY
template=`cat $config_file| docker run -i -a stdin -a stdout samsaffron/discourse ruby -e "$ruby"`
input=$(cat $config_file)
[ ! -z $template ] && {
input="$input _FILE_SEPERATOR_ $(cat $template)"
}
exec echo "$input" | docker run -cidfile $cidbootstrap -i -a stdin -a stdout -a stderr -v `pwd`/shared:/shared samsaffron/discourse /pups/bin/pups --stdin
sleep 5
docker commit `cat $cidbootstrap` samsaffron/discourse $config
docker rm `cat $cidbootstrap` && rm $cidbootstrap
exit 0
;;
ssh)
if [ ! -e $cidfile ]
then
echo "No cid found"
exit 1
else
cid="`cat $cidfile`"
address="`docker port $cid 22`"
split=(${address//:/ })
exec ssh root@${split[0]} -p ${split[1]}
fi
;;
stop)
if [ ! -e $cidfile ]
then
echo "No cid found"
exit 1
else
docker stop -t 10 `cat $cidfile`
exit 0
fi
;;
logs)
if [ ! -e $cidfile ]
then
echo "No cid found"
exit 1
else
docker logs `cat $cidfile`
exit 0
fi
;;
start)
if [ ! -e $cidfile ]
then
echo "No cid found, creating a new container"
ports=`cat $config_file | docker run -rm -i -a stdout -a stdin samsaffron/discourse ruby -e \
"require 'yaml'; puts YAML.load(STDIN.readlines.join)['expose'].map{|p| '-p ' << p.to_s << ' '}.join"`
docker run -cidfile $cidfile $ports -d -v `pwd`/shared:/shared samsaffron/discourse:$config /usr/bin/runsvdir -P /etc/service
exit 0
else
echo "cid found, ensuring container is started"
docker start `cat $cidfile`
exit 0
fi
;;
destroy)
if [ -e $cidfile ]
then
echo "destroying container $cidfile"
docker stop -t 10 `cat $cidfile`
docker rm `cat $cidfile` && rm $cidfile
exit 0
else
echo "nothing to destroy cidfile does not exist"
exit 1
fi
;;
esac
usage