From b0e6a82c45b91ce74a73e80cf47129f1534cdb7e Mon Sep 17 00:00:00 2001
From: pierreozoux <pierre@ozoux.net>
Date: Thu, 15 Jan 2015 18:17:26 +0100
Subject: [PATCH] Ultimate DRY

---
 unit-files/backup@.timer      |  3 +++
 unit-files/discovery@.service |  3 +++
 unit-files/lamp@.service      | 41 +++++++++--------------------------
 unit-files/mysql@.service     |  1 -
 unit-files/static@.service    | 27 +++--------------------
 unit-files/web@.service       | 32 +++++++++++++++++++++++++++
 6 files changed, 51 insertions(+), 56 deletions(-)
 create mode 100644 unit-files/web@.service

diff --git a/unit-files/backup@.timer b/unit-files/backup@.timer
index 5908b7f..6692c3c 100644
--- a/unit-files/backup@.timer
+++ b/unit-files/backup@.timer
@@ -1,6 +1,9 @@
 [Unit]
 Description=Hourly backup of www and mysql content to a git repo
 
+# Dependency binding
+BindsTo=web@%i.service
+
 [Timer]
 OnActiveSec=20
 OnUnitActiveSec=60min
diff --git a/unit-files/discovery@.service b/unit-files/discovery@.service
index fc36693..fe95a19 100644
--- a/unit-files/discovery@.service
+++ b/unit-files/discovery@.service
@@ -4,6 +4,9 @@ Description=%p for %i etcd registration
 # Requirements
 Requires=etcd.service
 
+# Dependency binding
+BindsTo=web@%i.service
+
 [Service]
 ExecStart=/bin/bash -c ' \
   sleep 30; \
diff --git a/unit-files/lamp@.service b/unit-files/lamp@.service
index e7e5954..3ecc7a6 100644
--- a/unit-files/lamp@.service
+++ b/unit-files/lamp@.service
@@ -2,48 +2,27 @@
 Description=%p-%i
 
 # Requirements
-Requires=docker.service
 Requires=mysql@%i.service
-Requires=discovery@%i.service
-Requires=backup@%i.timer
+Requires=web@%i.service
 
 # Dependency ordering
-After=docker.service
 After=mysql@%i.service
-Before=discovery@%i.service
-Before=backup@%i.timer
+Before=web@%i.service
+
+# Dependency binding
+BindsTo=web@%i.service
 
 [Service]
-Restart=always
-ExecStartPre=cp /data/domains/%i/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem
-Type=notify
-NotifyAccess=all
+Type=oneshot
+RemainAfterExit=yes
 EnvironmentFile=/data/domains/%i/.env
-Environment=URL=%i
-ExecStartPre=/usr/bin/docker run --rm -v /opt/bin:/opt/bin ibuildthecloud/systemd-docker
-ExecStartPre=-/usr/bin/docker kill %i
-ExecStartPre=-/usr/bin/docker rm %i
-ExecStartPre=/bin/bash -euxc ' \
+ExecStart=/bin/bash -euxc ' \
   application_folder=/data/domains/%i/${APPLICATION}; \
   if [ ! -d $application_folder ]; then \
     mkdir -p $application_folder; \
     touch $application_folder/.htaccess; \
-  fi; \
-  cat /data/domains/%i/mysql/.env | sed s/MYSQL_PASS/DB_PASS/ > $application_folder/.env'
-
-ExecStart=/opt/bin/systemd-docker --env run \
-  --name %i \
-  --link mysql-%i:db \
-  -v /data/domains/%i/${APPLICATION}/data:${VOLUME} \
-  -v /data/domains/%i/${APPLICATION}/.htaccess:/app/.htaccess \
-  --env-file /data/domains/%i/${APPLICATION}/.env \
-  pierreozoux/${APPLICATION}
-ExecReload=/usr/bin/docker restart %i
-
-ExecStop=/bin/bash -euxc ' \
-  systemctl stop discovery@%i.service; \
-  systemctl stop backup@%i.timer; \
-  /usr/bin/docker stop %i;'
+    cat /data/domains/%i/mysql/.env | sed s/MYSQL_PASS/DB_PASS/ > $application_folder/.env; \
+  fi;'
 
 [Install]
 WantedBy=multi-user.target
diff --git a/unit-files/mysql@.service b/unit-files/mysql@.service
index 0f3b3a1..25cbe2b 100644
--- a/unit-files/mysql@.service
+++ b/unit-files/mysql@.service
@@ -6,7 +6,6 @@ Requires=docker.service
 
 # Dependency ordering
 After=docker.service
-After=init@%i.service
 Before=backup@%i.timer
 
 # Dependency binding
diff --git a/unit-files/static@.service b/unit-files/static@.service
index 7c6d3fe..12be287 100644
--- a/unit-files/static@.service
+++ b/unit-files/static@.service
@@ -2,40 +2,19 @@
 Description=%p-%i
 
 # Requirements
-Requires=docker.service
-Requires=discovery@%i.service
-Requires=backup@%i.timer
+Requires=web@%i.service
 
 # Dependency ordering
-After=docker.service
-Before=discovery@%i.service
-Before=backup@%i.timer
+Before=web@%i.service
 
 [Service]
-Restart=always
-ExecStartPre=cp /data/domains/%i/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem
-ExecStartPre=-/usr/bin/docker kill %i
-ExecStartPre=-/usr/bin/docker rm %i
-ExecStartPre=/bin/bash -euxc ' \
+ExecStart=/bin/bash -euxc ' \
   application_folder=/data/domains/%i/%p/www-content; \
   if [ ! -d $application_folder ]; then \
     mkdir -p $application_folder; \
     echo Hello %i > $application_folder/index.html; \
   fi'
 
-ExecStart=/usr/bin/docker run \
-  --name %i \
-  -v /data/domains/%i/%p/www-content:/app \
-  pierreozoux/nginx
-ExecReload=/bin/bash -euxc ' \
-  /usr/bin/docker restart %i; \
-  systemctl restart discovery@%i.service; \
-  systemctl restart backup@%i.timer;'
-ExecStop=/bin/bash -euxc ' \
-  systemctl stop discovery@%i.service; \
-  systemctl stop backup@%i.timer; \
-  /usr/bin/docker stop %i;'
-
 [Install]
 WantedBy=multi-user.target
 
diff --git a/unit-files/web@.service b/unit-files/web@.service
new file mode 100644
index 0000000..daebddf
--- /dev/null
+++ b/unit-files/web@.service
@@ -0,0 +1,32 @@
+[Unit]
+Description=%p-%i
+
+# Requirements
+Requires=docker.service
+Requires=discovery@%i.service
+Requires=backup@%i.timer
+
+# Dependency ordering
+After=docker.service
+Before=discovery@%i.service
+Before=backup@%i.timer
+
+[Service]
+Restart=always
+Type=notify
+NotifyAccess=all
+EnvironmentFile=/data/domains/%i/.env
+Environment=URL=%i
+ExecStartPre=/usr/bin/docker run --rm -v /opt/bin:/opt/bin ibuildthecloud/systemd-docker
+ExecStartPre=-/usr/bin/docker kill %i
+ExecStartPre=-/usr/bin/docker rm %i
+ExecStartPre=/bin/cp /data/domains/%i/TLS/%i.pem /data/runtime/haproxy/approved-certs/%i.pem
+ExecStart=/bin/bash -euxc ' \
+  /opt/bin/systemd-docker --env run \
+    --rm \
+    --name %i \
+    ${DOCKER_ARGUMENTS} \
+    pierreozoux/${APPLICATION}'
+ExecReload=/usr/bin/docker restart %i
+ExecStop=/usr/bin/docker stop %i
+
-- 
GitLab