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