diff --git a/docker-compose/Makefile b/docker-compose/Makefile index 693bc26cbe78a45ead288c49ed2929ca7944c920..f1b2cc5788c9f75cead9c8fdfaa1793e86f2cb81 100644 --- a/docker-compose/Makefile +++ b/docker-compose/Makefile @@ -2,30 +2,33 @@ MAKEPATH := $(abspath $(lastword $(MAKEFILE_LIST))) BASEDIR := $(notdir $(patsubst %/,%,$(dir $(MAKEPATH)))) +DOCKER_COMPOSE_ENV_FILE := $(abspath .env) COMPOSE_FILES := $(wildcard *.yml) -COMPOSE_FILE_ARGS := $(foreach yml,$(COMPOSE_FILES),-f $(yml)) +COMPOSE_FILE_ARGS := --env-file $(DOCKER_COMPOSE_ENV_FILE) $(foreach yml,$(COMPOSE_FILES),-f $(yml)) ATTACH_COMPOSE_FILE_ARGS := $(foreach yml,$(filter-out tango.yml,$(COMPOSE_FILES)),-f $(yml)) # If the first make argument is "start" or "stop"... ifeq (start,$(firstword $(MAKECMDGOALS))) - SERVICE_TARGET = true + SERVICE_TARGET = true else ifeq (stop,$(firstword $(MAKECMDGOALS))) - SERVICE_TARGET = true + SERVICE_TARGET = true else ifeq (attach,$(firstword $(MAKECMDGOALS))) - SERVICE_TARGET = true -ifndef NETWORK_MODE -$(error NETWORK_MODE must specify the network to attach to, e.g., make NETWORK_MODE=tangonet-powersupply ...) -endif -ifndef TANGO_HOST -$(error TANGO_HOST must specify the Tango database device, e.g., make TANGO_HOST=powersupply-databaseds:10000 ...) -endif + SERVICE_TARGET = true + ifndef NETWORK_MODE + $(error NETWORK_MODE must specify the network to attach to, e.g., make NETWORK_MODE=tangonet-powersupply ...) + endif + + ifndef TANGO_HOST + $(error TANGO_HOST must specify the Tango database device, e.g., make TANGO_HOST=powersupply-databaseds:10000 ...) + endif endif + ifdef SERVICE_TARGET - # .. then use the rest as arguments for the make target - SERVICE := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) - # ...and turn them into do-nothing targets - $(eval $(SERVICE):;@:) + # .. then use the rest as arguments for the make target + SERVICE := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) + # ...and turn them into do-nothing targets + $(eval $(SERVICE):;@:) endif # @@ -35,37 +38,41 @@ endif # time. # ifneq ($(CI_JOB_ID),) -NETWORK_MODE := tangonet-$(CI_JOB_ID) -CONTAINER_NAME_PREFIX := $(CI_JOB_ID)- + NETWORK_MODE := tangonet-$(CI_JOB_ID) + CONTAINER_NAME_PREFIX := $(CI_JOB_ID)- else -CONTAINER_NAME_PREFIX := -$(info Network mode cannot be host for the archiver! It won't work unless you set the env var CI_JOB_ID=local) + CONTAINER_NAME_PREFIX := + $(info Network mode cannot be host for the archiver! It won't work unless you set the env var CI_JOB_ID=local) endif ifeq ($(OS),Windows_NT) $(error Sorry, Windows is not supported yet) else - UNAME_S := $(shell uname -s) - ifeq ($(UNAME_S),Linux) - DISPLAY ?= :0.0 - NETWORK_MODE ?= host - XAUTHORITY_MOUNT := /tmp/.X11-unix:/tmp/.X11-unix - XAUTHORITY ?= /hosthome/.Xauthority - # /bin/sh (=dash) does not evaluate 'docker network' conditionals correctly - SHELL := /bin/bash - endif - ifeq ($(UNAME_S),Darwin) - IF_INTERFACE := $(shell scutil --nwi | grep 'Network interfaces:' | cut -d' ' -f3) - IP_ADDRESS := $(shell scutil --nwi | grep 'address' | cut -d':' -f2 | tr -d ' ' | head -n1) - DISPLAY := $(IP_ADDRESS):0 - # Make sure that Darwin, especially from macOS Catalina on, - # allows X access from our Docker containers. - ADD_TO_XHOST := $(shell xhost +$(IP_ADDRESS)) - # network_mode = host doesn't work on MacOS, so fix to the internal network - NETWORK_MODE ?= tangonet - XAUTHORITY_MOUNT := $(HOME)/.Xauthority:/hosthome/.Xauthority:ro - XAUTHORITY := /hosthome/.Xauthority - endif + UNAME_S := $(shell uname -s) + + ifeq ($(UNAME_S),Linux) + DISPLAY ?= :0.0 + NETWORK_MODE ?= host + XAUTHORITY_MOUNT := /tmp/.X11-unix:/tmp/.X11-unix + XAUTHORITY ?= /hosthome/.Xauthority + # /bin/sh (=dash) does not evaluate 'docker network' conditionals correctly + SHELL := /bin/bash + else ifeq ($(UNAME_S),Darwin) + IF_INTERFACE := $(shell scutil --nwi | grep 'Network interfaces:' | cut -d' ' -f3) + IP_ADDRESS := $(shell scutil --nwi | grep 'address' | cut -d':' -f2 | tr -d ' ' | head -n1) + DISPLAY := $(IP_ADDRESS):0 + # Make sure that Darwin, especially from macOS Catalina on, + # allows X access from our Docker containers. + ADD_TO_XHOST := $(shell xhost +$(IP_ADDRESS)) + # network_mode = host doesn't work on MacOS, so fix to the internal network + ifeq ($(NETWORK_MODE),) + NETWORK_MODE := tangonet + else + NETWORK_MODE := $(NETWORK_MODE) + endif + XAUTHORITY_MOUNT := $(HOME)/.Xauthority:/hosthome/.Xauthority:ro + XAUTHORITY := /hosthome/.Xauthority + endif endif # @@ -73,16 +80,33 @@ endif # machine rather than at the container. # ifeq ($(NETWORK_MODE),host) - TANGO_HOST := $(shell hostname):10000 - MYSQL_HOST := $(shell hostname):3306 + TANGO_HOST := $(shell hostname):10000 + MYSQL_HOST := $(shell hostname):3306 else - TANGO_HOST := $(CONTAINER_NAME_PREFIX)databaseds:10000 - MYSQL_HOST := $(CONTAINER_NAME_PREFIX)tangodb:3306 + ifeq ($(TANGO_HOST),) + TANGO_HOST := $(CONTAINER_NAME_PREFIX)databaseds:10000 + else + TANGO_HOST := $(TANGO_HOST) + endif + + ifeq ($(MYSQL_HOST),) + MYSQL_HOST := $(CONTAINER_NAME_PREFIX)tangodb:3306 + else + MYSQL_HOST := $(MYSQL_HOST) + endif endif -DOCKER_COMPOSE_ARGS := DISPLAY=$(DISPLAY) XAUTHORITY=$(XAUTHORITY) TANGO_HOST=$(TANGO_HOST) \ - NETWORK_MODE=$(NETWORK_MODE) XAUTHORITY_MOUNT=$(XAUTHORITY_MOUNT) TANGO_SKA_CONTAINER_MOUNT=$(TANGO_SKA_CONTAINER_MOUNT) TANGO_LOFAR_CONTAINER_MOUNT=$(TANGO_LOFAR_CONTAINER_MOUNT) TANGO_LOFAR_CONTAINER_DIR=${TANGO_LOFAR_CONTAINER_DIR} MYSQL_HOST=$(MYSQL_HOST) \ - CONTAINER_NAME_PREFIX=$(CONTAINER_NAME_PREFIX) COMPOSE_IGNORE_ORPHANS=true CONTAINER_EXECUTION_UID=$(shell id -u) +DOCKER_COMPOSE_ARGS := DISPLAY=$(DISPLAY) \ + XAUTHORITY=$(XAUTHORITY) \ + TANGO_HOST=$(TANGO_HOST) \ + NETWORK_MODE=$(NETWORK_MODE) \ + XAUTHORITY_MOUNT=$(XAUTHORITY_MOUNT) \ + TANGO_SKA_CONTAINER_MOUNT=$(TANGO_SKA_CONTAINER_MOUNT) \ + TANGO_LOFAR_CONTAINER_MOUNT=$(TANGO_LOFAR_CONTAINER_MOUNT) \ + TANGO_LOFAR_CONTAINER_DIR=${TANGO_LOFAR_CONTAINER_DIR} MYSQL_HOST=$(MYSQL_HOST) \ + CONTAINER_NAME_PREFIX=$(CONTAINER_NAME_PREFIX) \ + COMPOSE_IGNORE_ORPHANS=true \ + CONTAINER_EXECUTION_UID=$(shell id -u) .PHONY: up down minimal start stop status clean pull help @@ -132,4 +156,3 @@ clean: down ## clear all TANGO database entries help: ## show this help. @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' -