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