From 1b980d2eefe142ea2bbdfa7ab120cea257dba52c Mon Sep 17 00:00:00 2001
From: Jan David Mol <mol@astron.nl>
Date: Mon, 14 Feb 2022 15:51:24 +0100
Subject: [PATCH] L2SS-621: Install our dependencies in the image to speed up
 the device start, and to avoid redownloading the dependencies a lot when
 testing/debugging a device. Do recheck the dependencies when we start the
 containwr.

---
 bin/start-ds.sh                               | 2 +-
 docker-compose/device-apsct.yml               | 3 ++-
 docker-compose/device-apspu.yml               | 3 ++-
 docker-compose/device-beam.yml                | 3 ++-
 docker-compose/device-boot.yml                | 3 ++-
 docker-compose/device-docker.yml              | 3 ++-
 docker-compose/device-observation_control.yml | 3 ++-
 docker-compose/device-recv.yml                | 3 ++-
 docker-compose/device-sdp.yml                 | 3 ++-
 docker-compose/device-sst.yml                 | 3 ++-
 docker-compose/device-unb2.yml                | 3 ++-
 docker-compose/device-xst.yml                 | 3 ++-
 docker-compose/lofar-device-base.yml          | 3 ++-
 docker-compose/lofar-device-base/Dockerfile   | 9 ++++++---
 14 files changed, 31 insertions(+), 16 deletions(-)

diff --git a/bin/start-ds.sh b/bin/start-ds.sh
index a48b0b455..948582020 100755
--- a/bin/start-ds.sh
+++ b/bin/start-ds.sh
@@ -35,7 +35,7 @@ else
   mkdir -p /tmp/tangostationcontrol
   python3 setup.py build --build-base /tmp/tangostationcontrol egg_info --egg-base /tmp/tangostationcontrol bdist_wheel --dist-dir /tmp/tangostationcontrol || exit 1
   # shellcheck disable=SC2012
-  sudo pip install --force-reinstall "$(ls -Art /tmp/tangostationcontrol/*.whl | tail -n 1)"
+  sudo pip install "$(ls -Art /tmp/tangostationcontrol/*.whl | tail -n 1)"
 fi
 
 # Return to the stored the directory, this preserves the working_dir argument in
diff --git a/docker-compose/device-apsct.yml b/docker-compose/device-apsct.yml
index a23e8a0a1..b23c2f411 100644
--- a/docker-compose/device-apsct.yml
+++ b/docker-compose/device-apsct.yml
@@ -18,7 +18,8 @@ services:
     # build explicitly, as docker-compose does not understand a local image
     # being shared among services.
     build:
-        context: lofar-device-base
+        context: ..
+        dockerfile: docker-compose/lofar-device-base/Dockerfile
         args:
             SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
     container_name: ${CONTAINER_NAME_PREFIX}device-apsct
diff --git a/docker-compose/device-apspu.yml b/docker-compose/device-apspu.yml
index 9fbdda2ce..f8c4c6718 100644
--- a/docker-compose/device-apspu.yml
+++ b/docker-compose/device-apspu.yml
@@ -18,7 +18,8 @@ services:
     # build explicitly, as docker-compose does not understand a local image
     # being shared among services.
     build:
-        context: lofar-device-base
+        context: ..
+        dockerfile: docker-compose/lofar-device-base/Dockerfile
         args:
             SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
     container_name: ${CONTAINER_NAME_PREFIX}device-apspu
diff --git a/docker-compose/device-beam.yml b/docker-compose/device-beam.yml
index 4b765f96a..6a276157f 100644
--- a/docker-compose/device-beam.yml
+++ b/docker-compose/device-beam.yml
@@ -13,7 +13,8 @@ services:
     # build explicitly, as docker-compose does not understand a local image
     # being shared among services.
     build:
-        context: lofar-device-base
+        context: ..
+        dockerfile: docker-compose/lofar-device-base/Dockerfile
         args:
             SOURCE_IMAGE: ${DOCKER_REGISTRY_HOST}/${DOCKER_REGISTRY_USER}-tango-itango:${TANGO_ITANGO_VERSION}
     container_name: ${CONTAINER_NAME_PREFIX}device-beam
diff --git a/docker-compose/device-boot.yml b/docker-compose/device-boot.yml
index abbce963a..339b88f4d 100644
--- a/docker-compose/device-boot.yml
+++ b/docker-compose/device-boot.yml
@@ -17,7 +17,8 @@ services:
     # build explicitly, as docker-compose does not understand a local image
     # being shared among services.
     build:
-        context: lofar-device-base
+        context: ..
+        dockerfile: docker-compose/lofar-device-base/Dockerfile
         args:
             SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
     container_name: ${CONTAINER_NAME_PREFIX}device-boot
diff --git a/docker-compose/device-docker.yml b/docker-compose/device-docker.yml
index ae73d963d..7cb990b97 100644
--- a/docker-compose/device-docker.yml
+++ b/docker-compose/device-docker.yml
@@ -18,7 +18,8 @@ services:
     # build explicitly, as docker-compose does not understand a local image
     # being shared among services.
     build:
-        context: lofar-device-base
+        context: ..
+        dockerfile: docker-compose/lofar-device-base/Dockerfile
         args:
             SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
     container_name: ${CONTAINER_NAME_PREFIX}device-docker
diff --git a/docker-compose/device-observation_control.yml b/docker-compose/device-observation_control.yml
index 2a77d0e5c..3887560cd 100644
--- a/docker-compose/device-observation_control.yml
+++ b/docker-compose/device-observation_control.yml
@@ -17,7 +17,8 @@ services:
     # build explicitly, as docker-compose does not understand a local image
     # being shared among services.
     build:
-        context: lofar-device-base
+        context: ..
+        dockerfile: docker-compose/lofar-device-base/Dockerfile
         args:
             SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
     container_name: ${CONTAINER_NAME_PREFIX}device-observation_control
diff --git a/docker-compose/device-recv.yml b/docker-compose/device-recv.yml
index 0a42904ce..0c4741ca4 100644
--- a/docker-compose/device-recv.yml
+++ b/docker-compose/device-recv.yml
@@ -18,7 +18,8 @@ services:
     # build explicitly, as docker-compose does not understand a local image
     # being shared among services.
     build:
-        context: lofar-device-base
+        context: ..
+        dockerfile: docker-compose/lofar-device-base/Dockerfile
         args:
             SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
     container_name: ${CONTAINER_NAME_PREFIX}device-recv
diff --git a/docker-compose/device-sdp.yml b/docker-compose/device-sdp.yml
index 1f3967d65..0e54304ed 100644
--- a/docker-compose/device-sdp.yml
+++ b/docker-compose/device-sdp.yml
@@ -18,7 +18,8 @@ services:
     # build explicitly, as docker-compose does not understand a local image
     # being shared among services.
     build:
-        context: lofar-device-base
+        context: ..
+        dockerfile: docker-compose/lofar-device-base/Dockerfile
         args:
             SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
     container_name: ${CONTAINER_NAME_PREFIX}device-sdp
diff --git a/docker-compose/device-sst.yml b/docker-compose/device-sst.yml
index 4e600ef41..10057ee96 100644
--- a/docker-compose/device-sst.yml
+++ b/docker-compose/device-sst.yml
@@ -18,7 +18,8 @@ services:
     # build explicitly, as docker-compose does not understand a local image
     # being shared among services.
     build:
-        context: lofar-device-base
+        context: ..
+        dockerfile: docker-compose/lofar-device-base/Dockerfile
         args:
             SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
     container_name: ${CONTAINER_NAME_PREFIX}device-sst
diff --git a/docker-compose/device-unb2.yml b/docker-compose/device-unb2.yml
index 3939635b2..c5cda2494 100644
--- a/docker-compose/device-unb2.yml
+++ b/docker-compose/device-unb2.yml
@@ -18,7 +18,8 @@ services:
     # build explicitly, as docker-compose does not understand a local image
     # being shared among services.
     build:
-        context: lofar-device-base
+        context: ..
+        dockerfile: docker-compose/lofar-device-base/Dockerfile
         args:
             SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
     container_name: ${CONTAINER_NAME_PREFIX}device-unb2
diff --git a/docker-compose/device-xst.yml b/docker-compose/device-xst.yml
index e2cfd8c7d..cb7ec371e 100644
--- a/docker-compose/device-xst.yml
+++ b/docker-compose/device-xst.yml
@@ -18,7 +18,8 @@ services:
     # build explicitly, as docker-compose does not understand a local image
     # being shared among services.
     build:
-        context: lofar-device-base
+        context: ..
+        dockerfile: docker-compose/lofar-device-base/Dockerfile
         args:
             SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
     container_name: ${CONTAINER_NAME_PREFIX}device-xst
diff --git a/docker-compose/lofar-device-base.yml b/docker-compose/lofar-device-base.yml
index dddd50c9a..da0a0c5a9 100644
--- a/docker-compose/lofar-device-base.yml
+++ b/docker-compose/lofar-device-base.yml
@@ -17,7 +17,8 @@ services:
   lofar-device-base:
     image: lofar-device-base
     build:
-        context: lofar-device-base
+        context: ..
+        dockerfile: docker-compose/lofar-device-base/Dockerfile
         args:
             SOURCE_IMAGE: ${LOCAL_DOCKER_REGISTRY_HOST}/${LOCAL_DOCKER_REGISTRY_USER}/tango-itango:${TANGO_ITANGO_VERSION}
     container_name: ${CONTAINER_NAME_PREFIX}lofar-device-base
diff --git a/docker-compose/lofar-device-base/Dockerfile b/docker-compose/lofar-device-base/Dockerfile
index f81445d20..9897528c5 100644
--- a/docker-compose/lofar-device-base/Dockerfile
+++ b/docker-compose/lofar-device-base/Dockerfile
@@ -3,17 +3,20 @@ FROM ${SOURCE_IMAGE}
 
 RUN sudo apt-get update && sudo apt-get install -y git && sudo apt-get clean
 
-COPY lofar-requirements.txt /lofar-requirements.txt
+COPY docker-compose/lofar-device-base/lofar-requirements.txt /lofar-requirements.txt
 RUN sudo pip3 install -r /lofar-requirements.txt
 
+COPY tangostationcontrol/requirements.txt /tangostationcontrol-requirements.txt
+RUN sudo pip3 install -r /tangostationcontrol-requirements.txt
+
 # install and use ephimerides and geodetic ("measures") tables for casacore.
 # we install a _stub_ since the tables need to be deployed explicitly from within the software.
 RUN sudo mkdir -p /opt/IERS && sudo chmod a+rwx /opt/IERS
 ARG IERS_DIRNAME=IERS-1970-01-01T00:00:00-stub
-COPY WSRT_Measures_stub /opt/IERS/${IERS_DIRNAME}
+COPY docker-compose/lofar-device-base/WSRT_Measures_stub /opt/IERS/${IERS_DIRNAME}
 RUN ln -sfT /opt/IERS/${IERS_DIRNAME} /opt/IERS/current
 
-COPY casarc /home/tango/.casarc
+COPY docker-compose/lofar-device-base/casarc /home/tango/.casarc
 
 ENV TANGO_LOG_PATH=/var/log/tango
 RUN sudo mkdir -p /var/log/tango && sudo chmod a+rwx /var/log/tango
-- 
GitLab