well then, if its bin/bash let it be bin/bash
[discourse_docker.git] / launcher
CommitLineData
ace450bd 1#!/bin/bash
7e738616
S
2
3command=$1
4config=$2
d93d239c 5config_file="$config".yml
7e738616 6cidfile=cids/"$config".cid
1acce9e4 7cidbootstrap=cids/"$config"_boostrap.cid
52388b87
SS
8image=samsaffron/discourse
9docker_path=`which docker`
7e738616 10
5f803fb4 11usage () {
7e738616
S
12 echo "Usage: launcher COMMAND CONFIG"
13 echo "Commands:"
1acce9e4
SS
14 echo " start: Start/initialize a container"
15 echo " stop: Stop a running container"
16 echo " restart: Restart a container"
17 echo " destroy: Stop and remove a container"
5f803fb4 18 echo " ssh: Start a bash shell in a running container"
1acce9e4
SS
19 echo " logs: Docker logs for container"
20 echo " bootstrap: Bootstrap a container for the config base on an image"
7e738616
S
21 exit 1
22}
23
52388b87
SS
24install_docker() {
25
26 echo "Docker is not installed, make sure you are running on the 3.8 kernel"
27 echo "The best supported Docker release is Ubuntu 12.04.03 for it run the following"
28 echo
29 echo "sudo apt-get update"
30 echo "sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring"
31 echo "sudo reboot"
32 echo
33
34 echo "sudo sh -c \"wget -qO- https://get.docker.io/gpg | apt-key add -\""
35 echo "sudo sh -c \"echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list\""
36 echo "sudo apt-get update"
37 echo "sudo apt-get install lxc-docker"
38
39 exit 1
40}
41
d90671f3
SS
42set_volumes() {
43 volumes=`cat $config_file | docker run -rm -i -a stdout -a stdin samsaffron/discourse ruby -e \
44 "require 'yaml'; puts YAML.load(STDIN.readlines.join)['volumes'].map{|v| '-v ' << v['volume']['host'] << ':' << v['volume']['guest'] << ' '}.join"`
45}
46
52388b87
SS
47[ -z $docker_path ] && {
48 install_docker
49}
50
5f803fb4
SS
51
52[ $# -ne 2 ] && {
53 usage
54}
55
7e738616
S
56if [ ! -e $config_file ]
57 then
58 echo "Config file was not found, ensure $config_file exists"
59 exit 1
60fi
61
5f803fb4
SS
62case "$command" in
63 bootstrap)
93149421 64
ace450bd
SS
65 template=`cat $config_file | docker run -rm -i -a stdin -a stdout samsaffron/discourse ruby -e \
66 "require 'yaml'; puts YAML.load(STDIN.readlines.join)['template']"`
93149421
SS
67
68 input=$(cat $config_file)
69 [ ! -z $template ] && {
70 input="$input _FILE_SEPERATOR_ $(cat $template)"
71 }
72
d90671f3
SS
73 set_volumes
74
75 exec echo "$input" | docker run -cidfile $cidbootstrap -i -a stdin -a stdout -a stderr $volumes samsaffron/discourse /pups/bin/pups --stdin
d93d239c 76 sleep 5
5f803fb4 77 docker commit `cat $cidbootstrap` samsaffron/discourse $config
4b3aebe1
SS
78 docker rm `cat $cidbootstrap` && rm $cidbootstrap
79 exit 0
5f803fb4 80 ;;
1acce9e4 81
5f803fb4
SS
82 ssh)
83 if [ ! -e $cidfile ]
84 then
85 echo "No cid found"
86 exit 1
87 else
88 cid="`cat $cidfile`"
89 address="`docker port $cid 22`"
90 split=(${address//:/ })
91 exec ssh root@${split[0]} -p ${split[1]}
92 fi
93 ;;
7e738616 94
5f803fb4
SS
95 stop)
96 if [ ! -e $cidfile ]
97 then
98 echo "No cid found"
99 exit 1
100 else
101 docker stop -t 10 `cat $cidfile`
102 exit 0
103 fi
104 ;;
7e738616 105
5f803fb4 106 logs)
7e738616 107
5f803fb4
SS
108 if [ ! -e $cidfile ]
109 then
110 echo "No cid found"
111 exit 1
112 else
113 docker logs `cat $cidfile`
114 exit 0
115 fi
116 ;;
7e738616 117
5f803fb4 118 start)
7e738616 119
5f803fb4
SS
120 if [ ! -e $cidfile ]
121 then
122 echo "No cid found, creating a new container"
36941588
SS
123 ports=`cat $config_file | docker run -rm -i -a stdout -a stdin samsaffron/discourse ruby -e \
124 "require 'yaml'; puts YAML.load(STDIN.readlines.join)['expose'].map{|p| '-p ' << p.to_s << ' '}.join"`
d90671f3
SS
125
126 set_volumes
127
128 docker run -name $config -cidfile $cidfile $ports -d $volumes samsaffron/discourse:$config /usr/bin/runsvdir -P /etc/service
5f803fb4
SS
129 exit 0
130 else
131 echo "cid found, ensuring container is started"
132 docker start `cat $cidfile`
133 exit 0
134 fi
135 ;;
7e738616 136
7e738616 137
5f803fb4
SS
138 destroy)
139 if [ -e $cidfile ]
140 then
141 echo "destroying container $cidfile"
142 docker stop -t 10 `cat $cidfile`
143 docker rm `cat $cidfile` && rm $cidfile
144 exit 0
145 else
146 echo "nothing to destroy cidfile does not exist"
147 exit 1
148 fi
149 ;;
150esac
7e738616 151
5f803fb4 152usage