Skip to content

Commit 1ef346d

Browse files
committed
Merge pull request #1107 from deis/1038-static_data_containers
fix(*): schedule data containers to specific machines
2 parents a6ff41b + 8fea284 commit 1ef346d

9 files changed

Lines changed: 94 additions & 9 deletions

Makefile

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@ COMPONENTS=builder cache controller database logger registry
2424
ALL_COMPONENTS=$(COMPONENTS) router
2525
START_COMPONENTS=registry logger cache database
2626

27-
ALL_UNITS = $(foreach C,$(COMPONENTS),$(wildcard $(C)/systemd/*))
28-
START_UNITS = $(foreach C,$(START_COMPONENTS),$(wildcard $(C)/systemd/*))
27+
ALL_UNITS = $(foreach C,$(COMPONENTS),$(wildcard $(C)/systemd/*.service))
28+
START_UNITS = $(foreach C,$(START_COMPONENTS),$(wildcard $(C)/systemd/*.service))
29+
30+
DATA_CONTAINER_TEMPLATES=builder/systemd/deis-builder-data.service database/systemd/deis-database-data.service logger/systemd/deis-logger-data.service registry/systemd/deis-registry-data.service
2931

3032
all: build run
3133

@@ -40,8 +42,22 @@ full-clean: clean
4042

4143
install: check-fleet install-routers
4244
$(FLEETCTL) load $(START_UNITS)
43-
$(FLEETCTL) load controller/systemd/*
44-
$(FLEETCTL) load builder/systemd/*
45+
$(FLEETCTL) load controller/systemd/*.service
46+
$(FLEETCTL) load builder/systemd/*.service
47+
echo $(shell make install-data-containers)
48+
49+
install-data-containers: check-fleet
50+
@$(foreach T, $(DATA_CONTAINER_TEMPLATES), \
51+
cp $(T).template . ; \
52+
NEW_FILENAME=`ls *.template | sed 's/\.template//g'`; \
53+
mv *.template $$NEW_FILENAME ; \
54+
MACHINE_ID=`$(FLEETCTL) list-machines --no-legend --full list-machines | awk 'BEGIN { OFS="\t"; srand() } { print rand(), $$1 }' | sort -n | cut -f2- | head -1` ; \
55+
sed -e "s/CHANGEME/$$MACHINE_ID/" $$NEW_FILENAME > $$NEW_FILENAME.bak ; \
56+
rm -f $$NEW_FILENAME ; \
57+
mv $$NEW_FILENAME.bak $$NEW_FILENAME ; \
58+
$(FLEETCTL) load $$NEW_FILENAME ; \
59+
rm -f $$NEW_FILENAME ; \
60+
)
4561

4662
install-routers: check-fleet
4763
@$(foreach R, $(ROUTER_UNITS), \
@@ -86,7 +102,7 @@ start: check-fleet start-warning start-routers
86102

87103
@# builder
88104
$(call echo_yellow,"Waiting for deis-builder to start...")
89-
$(FLEETCTL) start -no-block builder/systemd/*
105+
$(FLEETCTL) start -no-block builder/systemd/*.service
90106
@until $(FLEETCTL) list-units | egrep -q "deis-builder.+(running|failed)"; \
91107
do sleep 2; \
92108
printf "\033[0;33mStatus:\033[0m "; $(FLEETCTL) list-units | \
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[Unit]
2+
Description=deis-builder-data
3+
4+
[Service]
5+
Type=oneshot
6+
RemainAfterExit=yes
7+
ExecStart=/bin/sh -c "docker inspect deis-builder-data >/dev/null 2>&1 || docker run --name deis-builder-data -v /var/lib/docker deis/base true"
8+
9+
[Install]
10+
WantedBy=multi-user.target
11+
12+
[X-Fleet]
13+
X-ConditionMachineBootID=CHANGEME
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
[Unit]
22
Description=deis-builder
3+
Requires=deis-builder-data.service
4+
After=deis-builder-data.service
35

46
[Service]
57
EnvironmentFile=/etc/environment
68
TimeoutStartSec=20m
79
ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/builder`; docker history $IMAGE >/dev/null || docker pull $IMAGE"
810
ExecStartPre=/bin/sh -c "docker inspect deis-builder >/dev/null && docker rm -f deis-builder || true"
9-
ExecStartPre=/bin/sh -c "docker inspect deis-builder-data >/dev/null 2>&1 || docker run --name deis-builder-data -v /var/lib/docker deis/base true"
1011
ExecStart=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/builder` && docker run --name deis-builder --rm -p 2223:22 -e PUBLISH=22 -e HOST=$COREOS_PRIVATE_IPV4 -e PORT=2223 --volumes-from deis-builder-data --privileged $IMAGE"
1112
ExecStartPost=/bin/sh -c "echo 'Waiting for builder on 2223/tcp...' && until cat </dev/null>/dev/tcp/$COREOS_PRIVATE_IPV4/2223; do sleep 1; done"
1213

1314
[Install]
1415
WantedBy=multi-user.target
16+
17+
[X-Fleet]
18+
X-ConditionMachineOf=deis-builder-data.service
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[Unit]
2+
Description=deis-database-data
3+
4+
[Service]
5+
Type=oneshot
6+
RemainAfterExit=yes
7+
ExecStart=/bin/sh -c "docker inspect deis-database-data >/dev/null 2>&1 || docker run --name deis-database-data -v /var/lib/postgresql deis/base true"
8+
9+
[Install]
10+
WantedBy=multi-user.target
11+
12+
[X-Fleet]
13+
X-ConditionMachineBootID=CHANGEME
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
[Unit]
22
Description=deis-database
3+
Requires=deis-database-data.service
4+
After=deis-database-data.service
35

46
[Service]
57
EnvironmentFile=/etc/environment
68
TimeoutStartSec=20m
79
ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/database`; docker history $IMAGE >/dev/null || docker pull $IMAGE"
810
ExecStartPre=/bin/sh -c "docker inspect deis-database >/dev/null && docker rm -f deis-database || true"
9-
ExecStartPre=/bin/sh -c "docker inspect deis-database-data >/dev/null 2>&1 || docker run --name deis-database-data -v /var/lib/postgresql deis/base true"
1011
ExecStart=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/database` && docker run --name deis-database --rm -p 5432:5432 -e PUBLISH=5432 -e HOST=$COREOS_PRIVATE_IPV4 --volumes-from deis-database-data $IMAGE"
12+
ExecStop=/bin/bash -c "nsenter --pid --uts --mount --ipc --net --target $(docker inspect --format='{{ .State.Pid }}' deis-database) sudo service postgresql stop"
1113

1214
[Install]
1315
WantedBy=multi-user.target
16+
17+
[X-Fleet]
18+
X-ConditionMachineOf=deis-database-data.service
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[Unit]
2+
Description=deis-logger-data
3+
4+
[Service]
5+
Type=oneshot
6+
RemainAfterExit=yes
7+
ExecStart=/bin/sh -c "docker inspect deis-logger-data >/dev/null 2>&1 || docker run --name deis-logger-data -v /var/log/deis deis/base true"
8+
9+
[Install]
10+
WantedBy=multi-user.target
11+
12+
[X-Fleet]
13+
X-ConditionMachineBootID=CHANGEME

logger/systemd/deis-logger.service

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
[Unit]
22
Description=deis-logger
3+
Requires=deis-logger-data.service
4+
After=deis-logger-data.service
35

46
[Service]
57
EnvironmentFile=/etc/environment
68
TimeoutStartSec=20m
79
ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/logger`; docker history $IMAGE >/dev/null || docker pull $IMAGE"
810
ExecStartPre=/bin/sh -c "docker inspect deis-logger >/dev/null && docker rm -f deis-logger || true"
9-
ExecStartPre=/bin/sh -c "docker inspect deis-logger-data >/dev/null 2>&1 || docker run --name deis-logger-data -v /var/log/deis deis/base true"
1011
ExecStart=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/logger` && docker run --name deis-logger --rm -p 514:514/udp -e PUBLISH=514 -e HOST=$COREOS_PRIVATE_IPV4 --volumes-from deis-logger-data $IMAGE"
1112

1213
[Install]
1314
WantedBy=multi-user.target
15+
16+
[X-Fleet]
17+
X-ConditionMachineOf=deis-logger-data.service
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[Unit]
2+
Description=deis-registry-data
3+
4+
[Service]
5+
Type=oneshot
6+
RemainAfterExit=yes
7+
ExecStart=/bin/sh -c "docker inspect deis-registry-data >/dev/null 2>&1 || docker run --name deis-registry-data -v /data deis/base /bin/true"
8+
9+
[Install]
10+
WantedBy=multi-user.target
11+
12+
[X-Fleet]
13+
X-ConditionMachineBootID=CHANGEME
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
[Unit]
22
Description=deis-registry
3+
Requires=deis-registry-data.service
4+
After=deis-registry-data.service
35

46
[Service]
57
EnvironmentFile=/etc/environment
68
TimeoutStartSec=20m
79
ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/registry`; docker history $IMAGE >/dev/null || docker pull $IMAGE"
810
ExecStartPre=/bin/sh -c "docker inspect deis-registry >/dev/null && docker rm -f deis-registry || true"
9-
ExecStartPre=/bin/sh -c "docker inspect deis-registry-data >/dev/null 2>&1 || docker run --name deis-registry-data -v /data deis/base /bin/true"
1011
ExecStart=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/registry` && docker run --name deis-registry --rm -p 5000:5000 -e PUBLISH=5000 -e HOST=$COREOS_PRIVATE_IPV4 --volumes-from deis-registry-data $IMAGE"
1112
ExecStartPost=/bin/sh -c "echo 'Waiting for listener on 5000/tcp...' && until cat </dev/null>/dev/tcp/$COREOS_PRIVATE_IPV4/5000; do sleep 1; done && docker pull deis/slugrunner:latest && docker tag deis/slugrunner $COREOS_PRIVATE_IPV4:5000/deis/slugrunner && docker push $COREOS_PRIVATE_IPV4:5000/deis/slugrunner"
1213

1314
[Install]
1415
WantedBy=multi-user.target
16+
17+
[X-Fleet]
18+
X-ConditionMachineOf=deis-registry-data.service

0 commit comments

Comments
 (0)