| Index: Makefile |
| diff --git a/Makefile b/Makefile |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..0849055de807f0e8c9f92fba9383c39be3d8ab41 |
| --- /dev/null |
| +++ b/Makefile |
| @@ -0,0 +1,130 @@ |
| +#!/usr/bin/make -f |
| +# ------------------------------------------------------------------------- |
| +# This Makefile is destined to ease the work with the infrastructure repo, |
| +# especially when working with Vagrant: It contains wildcard targets for the |
| +# most common Vagrant commands ($box.$operation) that ensure each operation |
| +# is logged properly. This eases reporting, reproducing and debugging any |
| +# issues that may arise. |
| +# In addition, there are a set of additional targets that perform actions |
| +# specific to the repo, such as invocation of the ensure_dependencies.py |
| +# script and the creation of the modules/private resource when necessary. |
| +# ------------------------------------------------------------------------- |
| + |
| +# Phony targets are always considered out-of-date. |
| +.PHONY: ensure_dependencies.py prepare clean distclean |
| + |
| +# The first target is also the default one. |
| +.DEFAULT_GOAL = prepare |
| + |
| +# ------------------------------------------------------------------------- |
| +# Recognized environment variables and their defaults |
| +# ------------------------------------------------------------------------- |
| + |
| +# The python(1) executable to use. Note that it must be Python version 2! |
| +PYTHON ?= python |
| + |
| +# The Vagrant executable to use. |
| +VAGRANT ?= vagrant |
| + |
| +# ------------------------------------------------------------------------- |
| +# Common targets or "commands" |
| +# ------------------------------------------------------------------------- |
| + |
| +# The prepare target is also the default goal. It ensures all prerequisites |
| +# for development and testing are fulfilled. |
| +prepare: \ |
| + ensure_dependencies.py \ |
| + modules/private |
| + |
| +## |
| +# The clean target removes any logs written so far. |
| +clean: |
| + rm -rf "$(VAGRANT_LOG_PATH)" |
| + |
| +## |
| +# The obligatoric distclean target implies clean and, in addition, removes |
| +# all submodules as well as the modules/private stub, if any. |
| +distclean: clean |
| + $(MAKE) list-dependencies | while read module; do rm -rf "$$module"; done |
| + if [ -L "modules/private" ]; then rm "modules/private"; fi |
| + |
| +# ------------------------------------------------------------------------- |
| +# Vagrant-specific utilities |
| +# ------------------------------------------------------------------------- |
| + |
| +# The following variables are local to the Makefile and meant to decrease |
| +# the amount of code being repeated in the %.command targets. |
| +VAGRANT_LOG_PATH = .vagrant/logs |
| +VAGRANT_LOG_APPEND = tee -a "$(VAGRANT_LOG_PATH)/$*.log" |
| +VAGRANT_LOG_STANZA = echo "[`date` $@]" | $(VAGRANT_LOG_APPEND) |
| + |
| +%.back: $(VAGRANT_LOG_PATH) |
| + @$(VAGRANT_LOG_STANZA) |
| + @$(VAGRANT) snapshot back "$*" 2>&1 | $(VAGRANT_LOG_APPEND) |
| + |
| +%.destroy: $(VAGRANT_LOG_PATH) |
| + @$(VAGRANT_LOG_STANZA) |
| + @$(VAGRANT) destroy -f "$*" 2>&1 | $(VAGRANT_LOG_APPEND) |
| + |
| +%.halt: $(VAGRANT_LOG_PATH) |
| + @$(VAGRANT_LOG_STANZA) |
| + @$(VAGRANT) halt "$*" 2>&1 | $(VAGRANT_LOG_APPEND) |
| + |
| +%.provision: $(VAGRANT_LOG_PATH) |
| + @$(VAGRANT_LOG_STANZA) |
| + @$(VAGRANT) provision "$*" 2>&1 | $(VAGRANT_LOG_APPEND) |
| + |
| +%.snapshot: $(VAGRANT_LOG_PATH) |
| + @$(VAGRANT_LOG_STANZA) |
| + @$(VAGRANT) snapshot take "$*" 2>&1 | $(VAGRANT_LOG_APPEND) |
| + |
| +%.ssh: $(VAGRANT_LOG_PATH) |
| + @$(VAGRANT_LOG_STANZA) |
| + @$(VAGRANT) ssh "$*" |
| + |
| +%.up: $(VAGRANT_LOG_PATH) |
| + @$(VAGRANT_LOG_STANZA) |
| + @$(VAGRANT) up "$*" 2>&1 | $(VAGRANT_LOG_APPEND) |
| + |
| +# ------------------------------------------------------------------------- |
| +# Fragmental dependencies of other targets |
| +# ------------------------------------------------------------------------- |
| + |
| +## |
| +# The list-dependencies target is used internally to accumulate a newline- |
| +# separated list of all external modules referenced in the dependencies file. |
| +list-dependencies: |
| + @sed -n 's/^\s*\([a-z0-9][^ ]\+\)\s*=.*/\1/p' dependencies |
| + |
| +# The ensure_dependencies.py target invokes the accompanying $(PYTHON) |
| +# script of the same name for each dependency module not found in the local |
| +# repository clone. |
| +ensure_dependencies.py: |
| + $(MAKE) list-dependencies \ |
| + | while read line; do \ |
| + if [ ! -e "$$line" ]; then \ |
| + $(PYTHON) "$@"; \ |
| + break; \ |
| + fi; \ |
| + done |
| + |
| +# The modules/private target ensures the private setup module being present. |
| +# By default, it's using the development stub that ships with the repository. |
| +# Please refer to the accompanying README.md file for more information. |
| +modules/private: |
| + if [ ! -e "$@" ]; then ln -s private-stub "$@"; fi |
| + |
| +# The $(VAGRANT_LOG_PATH) target ensures the destination for log files |
| +# being present. |
| +$(VAGRANT_LOG_PATH): |
| + mkdir -p "$@" |
| + |
| +# ------------------------------------------------------------------------- |
| +# Miscellaneous targets |
| +# ------------------------------------------------------------------------- |
| + |
| +# The Makefile target is an empty stub required when the Makefile is invoked |
| +# as an executable script in another directory (see also the #!shebang line |
| +# at the top). |
| +Makefile: |
| + |