]> git.parisson.com Git - telemeta.git/commitdiff
make only one class based script for install
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Thu, 21 Jan 2016 17:10:15 +0000 (18:10 +0100)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Thu, 21 Jan 2016 17:11:06 +0000 (18:11 +0100)
app/deploy/init.sh.example [deleted file]
app/deploy/install_linux.py [new file with mode: 0755]
app/deploy/install_linux_systemd.py [deleted file]
app/deploy/install_linux_sysvinit.py [deleted file]
app/deploy/start_app.sh

diff --git a/app/deploy/init.sh.example b/app/deploy/init.sh.example
deleted file mode 100644 (file)
index 74455fd..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/bin/sh
-
-### BEGIN INIT INFO
-# Provides:        %s
-# Required-Start:      docker
-# Required-Stop:       docker
-# Default-Start:       2 3 4 5
-# Default-Stop:                0 1 6
-# Short-Description:   Docker Services
-### END INIT INFO
-
-set -e
-
-PROJECT_NAME=%s
-YAMLFILE=%s
-OPTS="-f $YAMLFILE -p $PROJECT_NAME"
-UPOPTS="-d --no-recreate --no-build --no-deps"
-
-. /lib/lsb/init-functions
-
-case "$1" in
-    start)
-        log_daemon_msg "Starting $PROJECT_NAME composition" "$PROJECT_NAME" || true
-        if su -c "docker-compose $OPTS up $UPOPTS > /dev/null 2>&1" root ; then
-            log_end_msg 0 || true
-        else
-            log_end_msg 1 || true
-        fi
-        ;;
-
-    stop)
-        log_daemon_msg "Stopping $PROJECT_NAME composition" "$PROJECT_NAME" || true
-        if su -c "docker-compose $OPTS stop > /dev/null 2>&1" root; then
-            log_end_msg 0 || true
-        else
-            log_end_msg 1 || true
-        fi
-        ;;
-
-    reload|force-reload)
-        log_daemon_msg "Reloading $PROJECT_NAME composition" "$PROJECT_NAME" || true
-        if docker-compose $OPTS up $UPOPTS > /dev/null 2>&1 ; then
-            log_end_msg 0 || true
-        else
-            log_end_msg 1 || true
-        fi
-        ;;
-
-    restart|try-restart)
-        log_daemon_msg "Restarting $PROJECT_NAME composition" "$PROJECT_NAME" || true
-        if docker-compose $OPTS stop > /dev/null 2>&1; docker-compose $OPTS up $UPOPTS > /dev/null 2>&1 ; then
-            log_end_msg 0 || true
-        else
-            log_end_msg 1 || true
-        fi
-        ;;
-
-    status)
-        docker-compose $OPTS ps && exit 0 || exit $?
-        ;;
-
-    *)
-        log_action_msg "Usage: /etc/init.d/$PROJECT_NAME {start|stop|reload|force-reload|restart|try-restart|status}" || true
-        exit 1
-        ;;
-esac
-
-exit 0
diff --git a/app/deploy/install_linux.py b/app/deploy/install_linux.py
new file mode 100755 (executable)
index 0000000..da6d7be
--- /dev/null
@@ -0,0 +1,169 @@
+#!/usr/bin/python
+
+import os, sys
+import argparse
+
+sysvinit_script = """
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides:        %s
+# Required-Start:      docker
+# Required-Stop:       docker
+# Default-Start:       2 3 4 5
+# Default-Stop:                0 1 6
+# Short-Description:   Docker Services
+### END INIT INFO
+
+set -e
+
+PROJECT_NAME=%s
+YAMLFILE=%s
+OPTS="-f $YAMLFILE -p $PROJECT_NAME"
+UPOPTS="-d --no-recreate --no-build --no-deps"
+
+. /lib/lsb/init-functions
+
+case "$1" in
+    start)
+        log_daemon_msg "Starting $PROJECT_NAME composition" "$PROJECT_NAME" || true
+        if su -c "docker-compose $OPTS up $UPOPTS > /dev/null 2>&1" root ; then
+            log_end_msg 0 || true
+        else
+            log_end_msg 1 || true
+        fi
+        ;;
+
+    stop)
+        log_daemon_msg "Stopping $PROJECT_NAME composition" "$PROJECT_NAME" || true
+        if su -c "docker-compose $OPTS stop > /dev/null 2>&1" root; then
+            log_end_msg 0 || true
+        else
+            log_end_msg 1 || true
+        fi
+        ;;
+
+    reload|force-reload)
+        log_daemon_msg "Reloading $PROJECT_NAME composition" "$PROJECT_NAME" || true
+        if docker-compose $OPTS up $UPOPTS > /dev/null 2>&1 ; then
+            log_end_msg 0 || true
+        else
+            log_end_msg 1 || true
+        fi
+        ;;
+
+    restart|try-restart)
+        log_daemon_msg "Restarting $PROJECT_NAME composition" "$PROJECT_NAME" || true
+        if docker-compose $OPTS stop > /dev/null 2>&1; docker-compose $OPTS up $UPOPTS > /dev/null 2>&1 ; then
+            log_end_msg 0 || true
+        else
+            log_end_msg 1 || true
+        fi
+        ;;
+
+    status)
+        docker-compose $OPTS ps && exit 0 || exit $?
+        ;;
+
+    *)
+        log_action_msg "Usage: /etc/init.d/$PROJECT_NAME {start|stop|reload|force-reload|restart|try-restart|status}" || true
+        exit 1
+        ;;
+esac
+
+exit 0
+"""
+
+systemd_service = """
+[Unit]
+Description=%s composition
+Requires=docker.service
+After=docker.service
+
+[Service]
+ExecStart=%s -f %s up -d
+ExecStop=%s -f %s stop
+
+[Install]
+WantedBy=local.target
+"""
+
+
+class DockerComposeDaemonInstall(object):
+
+    vcs_types = ['git', 'svn', 'hg']
+    docker = '/etc/init.d/docker'
+    docker_compose = '/usr/local/bin/docker-compose'
+
+    def __init__(self, path=None, init_type='sysvinit'):
+        self.init_type = init_type
+
+        self.local_path = os.path.dirname(os.path.realpath(__file__))
+        if not path or not os.path.isdir(path):
+            self.root = self.get_root(self.local_path)
+        else:
+            self.root = os.path.abspath(path)
+
+        if self.root[-1] == os.sep:
+            self.name = self.root.split(os.sep)[-2].lower()
+        else:
+            self.name = self.root.split(os.sep)[-1].lower()
+
+        self.conf = self.root + os.sep + 'docker-compose.yml'
+
+    def is_root(self, path):
+        content = os.listdir(path)
+        for vcs_type in self.vcs_types:
+            if '.' + vcs_type in content:
+                return True
+        return False
+
+    def get_root(self, path):
+        while not self.is_root(path):
+            path = os.sep.join(path.split(os.sep)[:-1])
+        if not path:
+            raise ValueError('This is not a versioned repository, please give the root directory of the app as the first argument.')
+        return path
+
+    def install_docker(self):
+        if not os.path.exists(self.docker):
+            print 'Installing docker first...'
+            os.system('wget -qO- https://get.docker.com/ | sh')
+        if not os.path.exists(self.docker_compose):
+            print 'Installing docker-compose...'
+            os.system('pip install docker-compose')
+
+    def install_daemon_sysvinit(self):
+        service = '/etc/init.d/' + self.name
+        print 'Writing sysvinit script in ' + service
+        script = sysvinit_script % (self.name, self.name, self.conf)
+        f = open(service, 'w')
+        f.write(script)
+        f.close()
+        os.system('chmod 755 ' + service)
+        os.system('update-rc.d ' + self.name + ' defaults')
+
+    def install_daemon_systemd(self):
+        service = '/lib/systemd/system/' + self.name + '.service'
+        print 'Writing systemd service in ' +  service
+        conf = systemd_service % (self.name, self.docker_compose, self.conf, self.docker_compose, self.conf)
+        f = open(service, 'w')
+        f.write(rules)
+        f.close()
+        os.system('systemctl enable ' + service)
+        os.system('systemctl daemon-reload')
+
+    def run(self):
+        print 'Installing ' + self.name + ' composition as a daemon...'
+        self.install_docker()
+        if self.init_type == 'sysvinit':
+            self.install_daemon_sysvinit()
+        elif self.init_type == 'systemd':
+            self.install_daemon_systemd()
+        print 'Done'
+
+
+if __name__ == '__main__':
+    path = sys.argv[-1]
+    install = DockerComposeDaemonInstall(path)
+    install.run()
diff --git a/app/deploy/install_linux_systemd.py b/app/deploy/install_linux_systemd.py
deleted file mode 100755 (executable)
index 037f3b6..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/python
-
-import os
-
-path = os.sep.join(os.getcwd().split(os.sep)[:-2])
-name = path.split(os.sep)[-1].lower()
-conf = path + os.sep + 'docker-compose.yml'
-program = '/usr/local/bin/docker-compose'
-service = '/lib/systemd/system/' + name + '.service'
-
-print 'installing ' + name + '...'
-
-if not os.path.exists('/etc/init.d/docker'):
-    os.system('wget -qO- https://get.docker.com/ | sh')
-    os.system('pip install docker-compose')
-
-rules="""
-[Unit]
-Description=%s composition
-Requires=docker.service
-After=docker.service
-
-[Service]
-ExecStart=%s -f %s up -d
-ExecStop=%s -f %s stop
-
-[Install]
-WantedBy=local.target
-""" % (name, program, conf, program, conf)
-
-# print rules
-
-f = open(service, 'w')
-f.write(rules)
-f.close()
-
-os.system('systemctl enable ' + service)
-os.system('systemctl daemon-reload')
-
-print 'done'
diff --git a/app/deploy/install_linux_sysvinit.py b/app/deploy/install_linux_sysvinit.py
deleted file mode 100755 (executable)
index da6a088..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/python
-
-import os
-
-path = os.sep.join(os.getcwd().split(os.sep)[:-2])
-name = path.split(os.sep)[-1].lower()
-conf = path + os.sep + 'docker-compose.yml'
-service = '/etc/init.d/' + name
-
-print 'installing ' + name + '...'
-
-if not os.path.exists('/etc/init.d/docker'):
-    os.system('wget -qO- https://get.docker.com/ | sh')
-    os.system('pip install docker-compose')
-
-f = open('init.sh.example', 'r')
-rules = f.read() % (name, name, conf)
-f.close()
-
-f = open(service, 'w')
-f.write(rules)
-f.close()
-
-os.system('chmod 755 ' + service)
-os.system('update-rc.d ' + name + ' defaults')
-
-print 'done'
index e723063ee2161d2d849f279f8bbdce031cc85b33..2cfb60c12c21781b52ae021c4d043b8495f558ef 100644 (file)
@@ -30,7 +30,7 @@ if [ ! -f $app/.init ]; then
  chown -R www-data:www-data $media
  python $manage telemeta-create-admin-user
  python $manage telemeta-create-boilerplate
- python $manage update_index --workers $processes
+ python $manage update_index --workers $processes &
  touch $app/.init
 fi