147 lines
3.7 KiB
Plaintext
Executable File
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
|