Skip to content
Snippets Groups Projects
Commit fa41bbfc authored by Thomas Juerges's avatar Thomas Juerges
Browse files

Move SKA docker-compose files here

parent 34e3b5b2
No related branches found
No related tags found
No related merge requests found
DOCKER_REGISTRY_HOST=nexus.engageska-portugal.pt
DOCKER_REGISTRY_USER=ska-docker
# Set dir of Makefile to a variable to use later
MAKEPATH := $(abspath $(lastword $(MAKEFILE_LIST)))
BASEDIR := $(notdir $(patsubst %/,%,$(dir $(MAKEPATH))))
COMPOSE_FILES := $(wildcard *.yml)
COMPOSE_FILE_ARGS := $(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
else ifeq (stop,$(firstword $(MAKECMDGOALS)))
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:100000 ...)
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):;@:)
endif
#
# Never use the network=host mode when running CI jobs, and add extra
# distinguishing identifiers to the network name and container names to
# prevent collisions with jobs from the same project running at the same
# time.
#
ifneq ($(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)
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
endif
#
# When running in network=host mode, point devices at a port on the host
# machine rather than at the container.
#
ifeq ($(NETWORK_MODE),host)
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
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) MYSQL_HOST=$(MYSQL_HOST) \
CONTAINER_NAME_PREFIX=$(CONTAINER_NAME_PREFIX) COMPOSE_IGNORE_ORPHANS=true
.PHONY: up down minimal start stop status clean pull help
.DEFAULT_GOAL := help
pull: ## pull the images from the Docker hub
$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) pull
up: minimal ## start the base TANGO system and prepare all services
$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) up --no-start
down: ## stop all services and tear down the system
$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) down
ifneq ($(NETWORK_MODE),host)
docker network inspect $(NETWORK_MODE) &> /dev/null && ([ $$? -eq 0 ] && docker network rm $(NETWORK_MODE)) || true
endif
minimal: ## start the base TANGO system
ifneq ($(NETWORK_MODE),host)
docker network inspect $(NETWORK_MODE) &> /dev/null || ([ $$? -ne 0 ] && docker network create $(NETWORK_MODE))
endif
$(DOCKER_COMPOSE_ARGS) docker-compose -f tango.yml up -d
start: up ## start a service (usage: make start <servicename>)
$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) start $(SERVICE)
stop: ## stop a service (usage: make stop <servicename>)
$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) stop $(SERVICE)
attach: ## attach a service to an existing Tango network
$(DOCKER_COMPOSE_ARGS) docker-compose $(ATTACH_COMPOSE_FILE_ARGS) up -d $(SERVICE)
status: ## show the container status
$(DOCKER_COMPOSE_ARGS) docker-compose $(COMPOSE_FILE_ARGS) ps
clean: down ## clear all TANGO database entries
docker volume rm $(BASEDIR)_tangodb
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}'
version: '2'
services:
maria-db:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/mariadb_hdbpp:latest
container_name: archiver-maria-db
network_mode: ${NETWORK_MODE}
depends_on:
- databaseds
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=hdbpp
- MYSQL_HOST=archiver-maria-db:3306
- MYSQL_USER=tango
- MYSQL_PASSWORD=tango
- TANGO_HOST=${TANGO_HOST}
restart: on-failure
hdbpp-es:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-archiver:latest
network_mode: ${NETWORK_MODE}
container_name: hdbpp-es
depends_on:
- databaseds
- dsconfig
- maria-db
environment:
- TANGO_HOST=${TANGO_HOST}
- HdbManager=archiving/hdbpp/confmanager01
command: >
/bin/bash -c "
wait-for-it.sh archiver-maria-db:3306 --timeout=30 --strict --
wait-for-it.sh ${TANGO_HOST} --timeout=30 --strict --
hdbppes-srv 01"
hdbpp-cm:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-archiver:latest
network_mode: ${NETWORK_MODE}
container_name: hdbpp-cm
depends_on:
- databaseds
- dsconfig
- maria-db
environment:
- TANGO_HOST=${TANGO_HOST}
- HdbManager=archiving/hdbpp/confmanager01
command: >
/bin/bash -c "
wait-for-it.sh archiver-maria-db:3306 --timeout=30 --strict --
wait-for-it.sh ${TANGO_HOST} --timeout=30 --strict --
hdbppcm-srv 01"
dsconfig:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-dsconfig:latest
container_name: dsconfig
network_mode: ${NETWORK_MODE}
depends_on:
- databaseds
environment:
- TANGO_HOST=${TANGO_HOST}
command: >
sh -c "wait-for-it.sh ${TANGO_HOST} --timeout=30 --strict --
json2tango -w -a -u /tango-archiver/data/archiver-devices.json &&
sleep infinity"
volumes:
- ${TANGO_SKA_CONTAINER_MOUNT}
- ${TANGO_LOFAR_CONTAINER_MOUNT}
- ${HOME}:/hosthome
- ../docker/tango/tango-archiver:/tango-archiver
#
# Docker compose file that launches Astor, sending the display to a remote X11
# display.
#
# Defines:
# - astor: service that runs Astor in a container
# - container1: example container running Starter device
#
# Requires:
# - tango.yml
#
version: '2'
services:
astor:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-java:latest
container_name: ${CONTAINER_NAME_PREFIX}astor
network_mode: ${NETWORK_MODE}
volumes:
- ${XAUTHORITY_MOUNT}
environment:
- XAUTHORITY=${XAUTHORITY}
- DISPLAY=${DISPLAY}
- TANGO_HOST=${TANGO_HOST}
entrypoint:
- /usr/local/bin/wait-for-it.sh
- ${TANGO_HOST}
- --timeout=30
- --strict
- --
- /usr/local/bin/astor
starter-example:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-starter:latest
container_name: ${CONTAINER_NAME_PREFIX}starter-example
network_mode: ${NETWORK_MODE}
# set the hostname, otherwise duplicate device registrations result every
# time the hostname changes as the container is restarted.
hostname: starter-example
environment:
- TANGO_HOST=${TANGO_HOST}
entrypoint:
- /usr/local/bin/wait-for-it.sh
- ${TANGO_HOST}
- --timeout=30
- --strict
- --
- /usr/bin/supervisord
- --configuration
- /etc/supervisor/supervisord.conf
#
# Docker compose file that launches HdbViewer, sending the display to a remote X11
# display.
#
#
# Requires:
# - tango.yml
#
version: '2'
services:
hdbpp-viewer:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/hdbpp_viewer:latest
container_name: ${CONTAINER_NAME_PREFIX}hdbpp-viewer
network_mode: ${NETWORK_MODE}
depends_on:
- databaseds
- dsconfig
- maria-db
- hdbpp-es
- hdbpp-cm
volumes:
- ${XAUTHORITY_MOUNT}
environment:
- XAUTHORITY=${XAUTHORITY}
- DISPLAY=${DISPLAY}
- TANGO_HOST=${TANGO_HOST}
- HDB_TYPE=mysql
- HDB_MYSQL_HOST=archiver-maria-db
- HDB_MYSQL_PORT=3306
- HDB_USER=tango
- HDB_PASSWORD=tango
- HDB_NAME=hdbpp
- CLASSPATH=JTango.jar:ATKCore.jar:ATKWidget.jar:jhdbviewer.jar:HDBPP.jar:jython.jar:jcalendar.jar
entrypoint:
- wait-for-it.sh
- ${TANGO_HOST}
- --strict
- --
- ./hdbpp_viewer/hdbpp_viewer_script
#
# Docker compose file that launches an interactive iTango session.
#
# Connect to the interactive session with 'docker attach itango'.
# Disconnect with the Docker deattach sequence: <CTRL>+<P> <CTRL>+<Q>
#
# Defines:
# - itango: iTango interactive session
#
# Requires:
# - tango.yml
#
version: '2'
services:
itango:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-itango:latest
container_name: ${CONTAINER_NAME_PREFIX}itango
network_mode: ${NETWORK_MODE}
volumes:
- ${TANGO_SKA_CONTAINER_MOUNT}
- ${TANGO_LOFAR_CONTAINER_MOUNT}
- ${HOME}:/hosthome
environment:
- TANGO_HOST=${TANGO_HOST}
stdin_open: true
tty: true
entrypoint:
- /usr/local/bin/wait-for-it.sh
- ${TANGO_HOST}
- --timeout=30
- --strict
- --
- /venv/bin/itango3
#
# Docker compose file that launches Jive, sending output to a remote X11
# display.
#
# Defines:
# - jive: container running Jive
#
# Requires:
# - tango.yml
#
version: '2'
services:
jive:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-java:latest
container_name: ${CONTAINER_NAME_PREFIX}jive
network_mode: ${NETWORK_MODE}
volumes:
- ${XAUTHORITY_MOUNT}
- ${TANGO_SKA_CONTAINER_MOUNT}
- ${TANGO_LOFAR_CONTAINER_MOUNT}
- ${HOME}:/hosthome
environment:
- XAUTHORITY=${XAUTHORITY}
- DISPLAY=${DISPLAY}
- TANGO_HOST=${TANGO_HOST}
entrypoint:
- /usr/local/bin/wait-for-it.sh
- ${TANGO_HOST}
- --timeout=30
- --strict
- --
- /usr/local/bin/jive
#
# Docker compose file that launches LogViewer, sending output to a remote X11
# display.
#
# Defines:
# - logviewer: container running LogViewer
#
# Requires:
# - tango.yml
#
version: '2'
services:
logviewer:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-java:latest
container_name: ${CONTAINER_NAME_PREFIX}logviewer
network_mode: ${NETWORK_MODE}
volumes:
- ${XAUTHORITY_MOUNT}
environment:
- XAUTHORITY=${XAUTHORITY}
- DISPLAY=${DISPLAY}
- TANGO_HOST=${TANGO_HOST}
entrypoint:
- /usr/local/bin/wait-for-it.sh
- ${TANGO_HOST}
- --timeout=30
- --strict
- --
- /usr/local/bin/logviewer
#
# Docker compose file that launches Pogo, sending the display to a remote X11
# display. Pogo output can be persisted by writing to either:
# 1. the /home/tango folder, which is a Docker volume persisted between
# container runs;
# 2. the /hosthome folder, which is a r/w mount of your home folder.
#
# Defines:
# - pogo (service): service running Pogo
# - pogo (volume): persistent volume for writing Pogo outut
#
# Requires:
# - N/A
#
version: '2'
# Create a volume so that Pogo preferences and Pogo output can be persisted
volumes:
pogo: {}
services:
pogo:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-pogo:latest
container_name: ${CONTAINER_NAME_PREFIX}pogo
network_mode: ${NETWORK_MODE}
volumes:
- pogo:/home/tango
- ${XAUTHORITY_MOUNT}
- ${TANGO_SKA_CONTAINER_MOUNT}
- ${TANGO_LOFAR_CONTAINER_MOUNT}
- ${HOME}:/hosthome:rw
environment:
- XAUTHORITY=${XAUTHORITY}
- DISPLAY=${DISPLAY}
#
# Docker compose file that launches Astor, sending the display to a remote X11
# display.
#
# Defines:
# - astor: service that runs Astor in a container
# - container1: example container running Starter device
#
# Requires:
# - tango.yml
#
version: '2'
services:
rest:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-rest:latest
container_name: ${CONTAINER_NAME_PREFIX}tango-rest
network_mode: ${NETWORK_MODE}
# set the hostname, otherwise duplicate device registrations result every
# time the hostname changes as the container is restarted.
hostname: tango-rest
environment:
- TANGO_HOST=${TANGO_HOST}
ports:
- 8080:8080
entrypoint:
- /usr/local/bin/wait-for-it.sh
- ${TANGO_HOST}
- --timeout=30
- --strict
- --
- /usr/bin/supervisord
- --configuration
- /etc/supervisor/supervisord.conf
#
# Docker compose file for TANGO database and database device server
#
# Defines:
# - tangodb: MariaDB database with TANGO schema
# - databaseds: TANGO database device server
#
# Requires:
# - None
#
version: '2'
volumes:
tangodb: {}
services:
tangodb:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-db:latest
container_name: ${CONTAINER_NAME_PREFIX}tangodb
network_mode: ${NETWORK_MODE}
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=tango
- MYSQL_USER=tango
- MYSQL_PASSWORD=tango
volumes:
- tangodb:/var/lib/mysql
ports:
- "3306:3306"
restart: on-failure
databaseds:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-cpp:latest
container_name: ${CONTAINER_NAME_PREFIX}databaseds
network_mode: ${NETWORK_MODE}
depends_on:
- tangodb
environment:
- MYSQL_HOST=${MYSQL_HOST}
- MYSQL_DATABASE=tango
- MYSQL_USER=tango
- MYSQL_PASSWORD=tango
- TANGO_HOST=${TANGO_HOST}
entrypoint:
- /usr/local/bin/wait-for-it.sh
- ${MYSQL_HOST}
- --timeout=30
- --strict
- --
- /usr/local/bin/DataBaseds
- "2"
- -ORBendPoint
- giop:tcp::10000
restart: on-failure
#
# Docker compose file for TANGO test device server.
#
# Defines:
# - tangotest: TANGO test device server
#
# Requires:
# - tango.yml
#
version: '2'
services:
tangotest:
image: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}/tango-java:latest
container_name: ${CONTAINER_NAME_PREFIX}tangotest
network_mode: ${NETWORK_MODE}
environment:
- TANGO_HOST=${TANGO_HOST}
entrypoint:
- /usr/local/bin/wait-for-it.sh
- ${TANGO_HOST}
- --timeout=30
- --strict
- --
- /usr/local/bin/TangoTest
- test
restart: on-failure
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment