Skip to content

Commit

Permalink
refactor(makefile): remove fleet, switch to deisctl and custom images
Browse files Browse the repository at this point in the history
  • Loading branch information
Gabriel Monroy committed Sep 21, 2014
1 parent 5afb880 commit 2e0e59b
Show file tree
Hide file tree
Showing 10 changed files with 226 additions and 323 deletions.
172 changes: 32 additions & 140 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,155 +4,51 @@

include includes.mk

define check_for_errors
@if $(FLEETCTL) list-units -no-legend | awk '($$4 == "failed")' | egrep -q "deis-.+service"; then \
echo "\033[0;31mOne or more services failed! Check which services by running 'make status'\033[0m" ; \
echo "\033[0;31mYou can get detailed output with 'fleetctl status deis-servicename.service'\033[0m" ; \
echo "\033[0;31mThis usually indicates an error with Deis - please open an issue on GitHub or ask for help in IRC\033[0m" ; \
exit 1 ; \
fi
endef

define deis_units
$(shell $(FLEETCTL) list-units -no-legend=true | \
awk '($$4 ~ "$(1)")' | \
sed -n 's/\(deis-.*\.service\).*/\1/p' | tr '\n' ' ')
endef

# TODO: re-evaluate the fragile start order
COMPONENTS=builder cache controller database logger registry
ALL_COMPONENTS=$(COMPONENTS) router
START_COMPONENTS=logger cache database

ALL_UNITS = $(foreach C,$(COMPONENTS),$(wildcard $(C)/systemd/*.service))
START_UNITS = $(foreach C,$(START_COMPONENTS),$(wildcard $(C)/systemd/*.service))

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
COMPONENTS=builder cache controller database logger registry router
START_ORDER=logger database cache registry controller builder router

all: build run

build: rsync
$(call ssh_all,'cd share && for c in $(ALL_COMPONENTS); do cd $$c && docker build -t deis/$$c . && cd ..; done')

clean: uninstall
$(call ssh_all,'for c in $(ALL_COMPONENTS); do docker rm -f deis-$$c; done')

full-clean: clean
$(call ssh_all,'for c in $(ALL_COMPONENTS); do docker rmi deis-$$c; done')

install: check-fleet install-routers install-data-containers
$(FLEETCTL) load $(START_UNITS)
$(FLEETCTL) load registry/systemd/*.service
$(FLEETCTL) load controller/systemd/*.service
$(FLEETCTL) load builder/systemd/*.service

install-data-containers: check-fleet
@$(foreach T, $(DATA_CONTAINER_TEMPLATES), \
UNIT=`basename $(T)` ; \
EXISTS=`$(FLEETCTL) list-units | grep $$UNIT` ; \
if [ "$$EXISTS" != "" ]; then \
echo $$UNIT already loaded. Skipping... ; \
else \
cp $(T).template . ; \
NEW_FILENAME=`ls *.template | sed 's/\.template//g'`; \
mv *.template $$NEW_FILENAME ; \
MACHINE_ID=`$(FLEETCTL) list-machines --no-legend --full | awk 'BEGIN { OFS="\t"; srand() } { print rand(), $$1 }' | sort -n | cut -f2- | head -1` ; \
sed -e "s/CHANGEME/$$MACHINE_ID/" $$NEW_FILENAME > $$NEW_FILENAME.bak ; \
rm -f $$NEW_FILENAME ; \
mv $$NEW_FILENAME.bak $$NEW_FILENAME ; \
$(FLEETCTL) load $$NEW_FILENAME ; \
rm -f $$NEW_FILENAME ; \
fi ; \
)
dev-registry: check-docker
@# pull registry image if it doesn't already exist
@docker history registry:0.8.1 >/dev/null 2>&1 || docker pull registry:0.8.1

install-routers: check-fleet
@$(foreach R, $(ROUTER_UNITS), \
$(FLEETCTL) load router/systemd/$(R) ; \
)
@# run registry container if it doesn't already exist
@docker inspect registry >/dev/null 2>&1 || docker run -d -p 5000:5000 --name registry registry:0.8.1

pull:
$(call ssh_all,'for c in $(ALL_COMPONENTS); do docker pull deis/$$c:latest; done')
$(call ssh_all,'docker pull deis/slugrunner:latest')
@echo
@echo "To configure the registry for local Deis development:"
@echo " export DEIS_REGISTRY=`boot2docker ip 2>/dev/null`:5000"

restart: stop start
build: check-docker
@$(foreach C, $(COMPONENTS), $(MAKE) -C $(C) build ;)

rsync:
$(call rsync_all)
push: check-docker check-registry
@$(foreach C, $(COMPONENTS), $(MAKE) -C $(C) push ;)

run: install start
full-clean:
@$(foreach C, $(COMPONENTS), $(MAKE) -C $(C) full-clean ;)

install:
@$(foreach C, $(START_ORDER), $(MAKE) -C $(C) install ;)

uninstall:
@$(foreach C, $(COMPONENTS), $(MAKE) -C $(C) uninstall ;)

start: check-fleet start-warning start-routers
@# logger cache database
$(call echo_yellow,"Waiting for deis-cache to start...")
$(FLEETCTL) start -no-block $(START_UNITS)
@until $(FLEETCTL) list-units | egrep -q "deis-cache\..+(running|failed)"; \
do sleep 2; \
printf "\033[0;33mStatus:\033[0m "; $(FLEETCTL) list-units | \
grep "deis-cache\." | awk '{printf "%-10s (%s) \r", $$3, $$4}'; \
sleep 8; \
done
$(call check_for_errors)

@# registry
$(call echo_yellow,"Waiting for deis-registry to start...")
$(FLEETCTL) start -no-block registry/systemd/*.service
@until $(FLEETCTL) list-units | egrep -q "deis-registry\..+(running|failed)"; \
do sleep 2; \
printf "\033[0;33mStatus:\033[0m "; $(FLEETCTL) list-units | \
grep "deis-registry\." | awk '{printf "%-10s (%s) \r", $$3, $$4}'; \
sleep 8; \
done
$(call check_for_errors)

@# controller
$(call echo_yellow,"Waiting for deis-controller to start...")
$(FLEETCTL) start -no-block controller/systemd/*.service
@until $(FLEETCTL) list-units | egrep -q "deis-controller\..+(running|failed)"; \
do sleep 2; \
printf "\033[0;33mStatus:\033[0m "; $(FLEETCTL) list-units | \
grep "deis-controller\." | awk '{printf "%-10s (%s) \r", $$3, $$4}'; \
sleep 8; \
done
$(call check_for_errors)

@# builder
$(call echo_yellow,"Waiting for deis-builder to start...")
$(FLEETCTL) start -no-block builder/systemd/*.service
@until $(FLEETCTL) list-units | egrep -q "deis-builder\..+(running|failed)"; \
do sleep 2; \
printf "\033[0;33mStatus:\033[0m "; $(FLEETCTL) list-units | \
grep "deis-builder\." | awk '{printf "%-10s (%s) \r", $$3, $$4}'; \
sleep 8; \
done
$(call check_for_errors)

$(call echo_yellow,"Your Deis cluster is ready to go! Continue following the README to login and use Deis.")

start-routers: check-fleet start-warning
$(call echo_yellow,"Waiting for 1 of $(DEIS_NUM_ROUTERS) deis-routers to start...")
$(foreach R,$(ROUTER_UNITS),$(FLEETCTL) start -no-block $(R);)
@until $(FLEETCTL) list-units | egrep -q "deis-router.+(running)"; \
do sleep 2; \
printf "\033[0;33mStatus:\033[0m "; $(FLEETCTL) list-units | \
grep "deis-router" | head -n 1 | \
awk '{printf "%-10s (%s) \r", $$3, $$4}'; \
sleep 8; \
done
$(call check_for_errors)

start-warning:
$(call echo_cyan,"Deis components may take a long time to start the first time they are initialized.")

status: check-fleet
$(FLEETCTL) list-units

stop: check-fleet
$(FLEETCTL) stop -block-attempts=600 $(strip $(call deis_units,active))
start:
@$(foreach C, $(START_ORDER), $(MAKE) -C $(C) start ;)

stop:
@$(foreach C, $(COMPONENTS), $(MAKE) -C $(C) stop ;)

restart: stop start

run: install start

test: test-components test-integration

test-components:
@$(foreach C,$(ALL_COMPONENTS), \
@$(foreach C,$(COMPONENTS), \
echo \\nTesting deis/$(C) ; \
$(MAKE) -C $(C) test ; \
)
Expand All @@ -162,7 +58,3 @@ test-integration:

test-smoke:
$(MAKE) -C tests/ test-smoke

uninstall: check-fleet stop
$(FLEETCTL) unload -block-attempts=600 $(call deis_units,.)
$(FLEETCTL) destroy $(strip $(call deis_units,.))
43 changes: 25 additions & 18 deletions builder/Makefile
Original file line number Diff line number Diff line change
@@ -1,31 +1,38 @@
include ../includes.mk

build:
$(call rsync_all)
$(call ssh_all,'cd share/builder && docker build -t deis/builder .')
build: check-docker
docker build -t deis/builder:$(GIT_TAG) .

install: check-fleet
$(FLEETCTL) load systemd/*
push: check-docker check-registry check-deisctl
docker tag deis/builder:$(GIT_TAG) $(REGISTRY)/deis/builder:$(GIT_TAG)
docker push $(REGISTRY)/deis/builder:$(GIT_TAG)
deisctl config builder set image=$$DEIS_REGISTRY/deis/builder:$(GIT_TAG)

uninstall: check-fleet stop
$(FLEETCTL) unload systemd/*
$(FLEETCTL) destroy systemd/*
clean: check-docker check-registry
docker rmi deis/builder:$(GIT_TAG)
docker rmi $(REGISTRY)/deis/builder:$(GIT_TAG)

start: check-fleet
$(FLEETCTL) start -no-block systemd/*
full-clean: check-docker check-registry
docker images -q deis/builder | xargs docker rmi -f
docker images -q $(REGISTRY)/deis/builder | xargs docker rmi -f

stop: check-fleet
$(FLEETCTL) stop -block-attempts=600 systemd/*
install: check-deisctl
deisctl install builder-data
deisctl scale builder=1

restart: stop start
uninstall: check-deisctl
deisctl scale builder=0
deisctl uninstall builder-data

run: install start
start: check-deisctl
deisctl start builder

clean: uninstall
$(call ssh_all,'sudo docker rm -f deis-builder')
stop: check-deisctl
deisctl stop builder

full-clean: clean
$(call ssh_all,'sudo docker rmi deis/builder')
restart: stop start

run: install start

test: test-unit test-functional

Expand Down
41 changes: 23 additions & 18 deletions cache/Makefile
Original file line number Diff line number Diff line change
@@ -1,31 +1,36 @@
include ../includes.mk

build:
$(call rsync_all)
$(call ssh_all,'cd share/cache && sudo docker build -t deis/cache .')
build: check-docker
docker build -t deis/cache:$(GIT_TAG) .

install: check-fleet
$(FLEETCTL) load systemd/*
push: check-docker check-registry check-deisctl
docker tag deis/cache:$(GIT_TAG) $(REGISTRY)/deis/cache:$(GIT_TAG)
docker push $(REGISTRY)/deis/cache:$(GIT_TAG)
deisctl config cache set image=$$DEIS_REGISTRY/deis/cache:$(GIT_TAG)

uninstall: check-fleet stop
$(FLEETCTL) unload systemd/*
$(FLEETCTL) destroy systemd/*
clean: check-docker check-registry
docker rmi deis/cache:$(GIT_TAG)
docker rmi $(REGISTRY)/deis/cache:$(GIT_TAG)

start: check-fleet
$(FLEETCTL) start -no-block systemd/*
full-clean: check-docker check-registry
docker images -q deis/cache | xargs docker rmi -f
docker images -q $(REGISTRY)/deis/cache | xargs docker rmi -f

stop: check-fleet
$(FLEETCTL) stop -block-attempts=600 systemd/*
install: check-deisctl
deisctl scale cache=1

restart: stop start
uninstall: check-deisctl
deisctl scale cache=0

run: install start
start: check-deisctl
deisctl start cache

clean: uninstall
$(call ssh_all,'sudo docker rm -f deis-cache')
stop: check-deisctl
deisctl stop cache

full-clean: clean
$(call ssh_all,'sudo docker rmi deis/cache')
restart: stop start

run: install start

test: test-unit test-functional

Expand Down
2 changes: 1 addition & 1 deletion contrib/coreos/user-data
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ coreos:
etcd:
# generate a new token for each unique cluster from https://discovery.etcd.io/new
# uncomment the following line and replace it with your discovery URL
# discovery: https://discovery.etcd.io/12345693838asdfasfadf13939923
discovery: https://discovery.etcd.io/c560a81e5972043805d8b430adea1a58
addr: $private_ipv4:4001
peer-addr: $private_ipv4:7001
# give etcd more time if it's under heavy load - prevent leader election thrashing
Expand Down
41 changes: 23 additions & 18 deletions controller/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,37 @@ include ../includes.mk

all: build run

build:
$(call rsync_all)
$(call ssh_all,'cd share/controller && sudo docker build -t deis/controller .')
build: check-docker
docker build -t deis/controller:$(GIT_TAG) .

install: check-fleet
$(FLEETCTL) load systemd/*
push: check-docker check-registry check-deisctl
docker tag deis/controller:$(GIT_TAG) $(REGISTRY)/deis/controller:$(GIT_TAG)
docker push $(REGISTRY)/deis/controller:$(GIT_TAG)
deisctl config controller set image=$$DEIS_REGISTRY/deis/controller:$(GIT_TAG)

uninstall: check-fleet stop
$(FLEETCTL) unload systemd/*
$(FLEETCTL) destroy systemd/*
clean: check-docker check-registry
docker rmi deis/controller:$(GIT_TAG)
docker rmi $(REGISTRY)/deis/controller:$(GIT_TAG)

start: check-fleet
$(FLEETCTL) start -no-block systemd/*
full-clean: check-docker check-registry
docker images -q deis/controller | xargs docker rmi -f
docker images -q $(REGISTRY)/deis/controller | xargs docker rmi -f

stop: check-fleet
$(FLEETCTL) stop -block-attempts=600 systemd/*
install: check-deisctl
deisctl scale controller=1

restart: stop start
uninstall: check-deisctl
deisctl scale controller=0

run: install start
start: check-deisctl
deisctl start controller

clean: uninstall
$(call ssh_all,'sudo docker rm -f deis-controller')
stop: check-deisctl
deisctl stop controller

full-clean: clean
$(call ssh_all,'sudo docker rmi deis/controller')
restart: stop start

run: install start

runserver:
python manage.py runserver
Expand Down
Loading

0 comments on commit 2e0e59b

Please sign in to comment.