Skip to content

Commit e5ab8cc

Browse files
committed
omero-grid now builds separate master and slave images only
This is based on ome/omero-server-docker#1
1 parent 7904b7d commit e5ab8cc

File tree

11 files changed

+124
-142
lines changed

11 files changed

+124
-142
lines changed

build.py

Lines changed: 0 additions & 63 deletions
This file was deleted.

master/70-grid-xml.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/bin/bash
2+
3+
set -eu
4+
5+
omero=/opt/omero/server/OMERO.server/bin/omero
6+
cd /opt/omero/server
7+
8+
# Args are the servers to run, default (no args) is to run all
9+
./process_defaultxml.py OMERO.server/etc/templates/grid/default.xml.orig \
10+
"$@" > OMERO.server/etc/templates/grid/default.xml
11+
12+
MASTER_IP=$(hostname -i)
13+
$omero config set omero.master.host "$MASTER_IP"

master/Dockerfile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# TODO: Switch to openmicroscopy/omero-server when it's merged
2+
FROM test-omero-server
3+
4+
5+
USER root
6+
ADD process_defaultxml.py /opt/omero/server/
7+
ADD 70-grid-xml.sh /startup/
8+
9+
USER omero-server
10+
11+
# default.xml may be modified at runtime for a multinode configuration
12+
RUN cp /opt/omero/server/OMERO.server/etc/templates/grid/default.xml /opt/omero/server/OMERO.server/etc/templates/grid/default.xml.orig
13+
14+
# TODO: Don't expose 4061 (internal links only)
15+
EXPOSE 4061 4063 4064
File renamed without changes.

slave/99-run.sh

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/bin/bash
2+
3+
set -eu
4+
5+
TARGET="${1}"
6+
if [ -z "$TARGET" ]; then
7+
echo "ERROR: Slave-name required"
8+
exit 2
9+
fi
10+
11+
omero=/opt/omero/server/OMERO.server/bin/omero
12+
cd /opt/omero/server
13+
14+
CONFIG_omero_master_host=${CONFIG_omero_master_host:-}
15+
if [ -n "$CONFIG_omero_master_host" ]; then
16+
MASTER_ADDR="$CONFIG_omero_master_host"
17+
else
18+
MASTER_ADDR=master
19+
$omero config set omero.master.host "$MASTER_ADDR"
20+
fi
21+
22+
SLAVE_ADDR=$(hostname -i)
23+
24+
# Is this needed on a slave?
25+
#if stat -t /config/* > /dev/null 2>&1; then
26+
# for f in /config/*; do
27+
# echo "Loading $f"
28+
# $omero load "$f"
29+
# done
30+
#fi
31+
32+
echo "Master addr: $MASTER_ADDR Slave addr: $SLAVE_ADDR"
33+
sed -e "s/@omero.slave.host@/$SLAVE_ADDR/" -e "s/@slave.name@/$TARGET/" \
34+
slave.cfg > OMERO.server/etc/$TARGET.cfg
35+
grep '^Ice.Default.Router=' OMERO.server/etc/ice.config || \
36+
echo Ice.Default.Router= >> OMERO.server/etc/ice.config
37+
sed -i -r "s|^(Ice.Default.Router=).*|\1OMERO.Glacier2/router:tcp -p 4063 -h $MASTER_ADDR|" \
38+
OMERO.server/etc/ice.config
39+
40+
echo "Starting node $TARGET"
41+
exec $omero node $TARGET start --foreground

slave/Dockerfile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# TODO: Switch to openmicroscopy/omero-server when it's merged
2+
FROM test-omero-server
3+
4+
5+
USER root
6+
ADD slave.cfg /opt/omero/server/
7+
# Don't configure database in a slave
8+
RUN rm /startup/60-database.sh
9+
# Replace existing 99-run.sh
10+
ADD 99-run.sh /startup/
11+
12+
USER omero-server
13+
14+
# TODO: Not needed?
15+
EXPOSE 4063 4064
File renamed without changes.

test.sh

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,15 @@
22

33
set -e
44
set -u
5-
set -x
65

7-
PREFIX=omero-grid-test
8-
IMAGE=omero-grid:$PREFIX
9-
IMAGEWEB=omero-grid-web:$PREFIX
10-
BUILD=${BUILD:-}
11-
CLEAN=${CLEAN:-y}
6+
PREFIX=test
7+
IMAGEMASTER=omero-master:$PREFIX
8+
IMAGESLAVE=omero-slave:$PREFIX
129

13-
# Script must be run from omero-grid/
14-
cd "$(dirname $0)"
10+
CLEAN=${CLEAN:-y}
1511

1612
cleanup() {
17-
docker rm -f -v $PREFIX-db $PREFIX-master $PREFIX-slave-1 $PREFIX-web
13+
docker rm -f -v $PREFIX-db $PREFIX-server $PREFIX-slave-1
1814
}
1915

2016
if [ "$CLEAN" = y ]; then
@@ -23,29 +19,32 @@ fi
2319

2420
cleanup || true
2521

26-
# From the README
27-
./build.py --tag $IMAGE $BUILD omero-grid
28-
./build.py --tag $IMAGEWEB $BUILD omero-grid-web
22+
23+
docker build -t $IMAGEMASTER master
24+
docker build -t $IMAGESLAVE slave
2925
docker run -d --name $PREFIX-db -e POSTGRES_PASSWORD=postgres postgres
30-
docker run -d --name $PREFIX-master --link $PREFIX-db:db \
31-
-e DBUSER=postgres -e DBPASS=postgres -e DBNAME=postgres $IMAGE master \
26+
docker run -d --name $PREFIX-server --link $PREFIX-db:db \
27+
-p 4063:4063 -p 4064:4064 \
28+
-e CONFIG_omero_db_user=postgres \
29+
-e CONFIG_omero_db_pass=postgres \
30+
-e CONFIG_omero_db_name=postgres \
31+
-e ROOTPASS=omero-root-password \
32+
$IMAGEMASTER \
3233
master:Blitz-0,Indexer-0,DropBox,MonitorServer,FileServer,Storm,PixelData-0,Tables-0 \
3334
slave-1:Processor-0
3435

35-
docker run -d --name $PREFIX-slave-1 --link $PREFIX-master:master $IMAGE slave-1
36-
docker run -d --name $PREFIX-web --link $PREFIX-master:master -P $IMAGEWEB
37-
38-
echo "Exposed web port:"
39-
docker port $PREFIX-web
36+
docker run -d --name $PREFIX-slave-1 --link $PREFIX-server:master $IMAGESLAVE slave-1
4037

4138
# Smoke tests
4239

4340
export OMERO_USER=root
44-
export OMERO_PASS=omero
41+
export OMERO_PASS=omero-root-password
4542
export PREFIX
4643

47-
# Login to web
44+
# Login to server
4845
bash test_login.sh
46+
# Wait a minute to ensure other servers are running
47+
sleep 60
4948
# Now that we know the server is up, test Dropbox
5049
bash test_dropbox.sh
5150
# And Processor (slave-1)

test_dropbox.sh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ set -x
77
# Must be exported by the caller:
88
# OMERO_USER OMERO_PASS PREFIX
99

10+
OMERO=/opt/omero/server/OMERO.server/bin/omero
1011
FILENAME=$(date +%Y%m%d-%H%M%S-%N).fake
11-
docker exec $PREFIX-master sh -c \
12+
docker exec $PREFIX-server sh -c \
1213
"mkdir -p /OMERO/DropBox/root && touch /OMERO/DropBox/root/$FILENAME"
1314

1415
echo -n "Checking for imported DropBox image $FILENAME "
@@ -17,7 +18,7 @@ i=0
1718
result=
1819
while [ $i -lt 60 ]; do
1920
sleep 4
20-
result=$(docker exec $PREFIX-master OMERO.server/bin/omero hql -q -s localhost -u $OMERO_USER -w $OMERO_PASS "SELECT COUNT (*) FROM Image WHERE name='$FILENAME'" --style plain)
21+
result=$(docker exec $PREFIX-server $OMERO hql -q -s localhost -u $OMERO_USER -w $OMERO_PASS "SELECT COUNT (*) FROM Image WHERE name='$FILENAME'" --style plain)
2122
if [ "$result" = "0,1" ]; then
2223
echo
2324
echo "Found image: $result"

test_login.sh

Lines changed: 11 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -7,56 +7,17 @@ set -x
77
# Must be exported by the caller:
88
# OMERO_USER OMERO_PASS PREFIX
99

10-
WEB_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "8080/tcp") 0).HostPort}}' $PREFIX-web)
10+
OMERO=/opt/omero/server/OMERO.server/bin/omero
1111

12-
LOGIN_URL="http://localhost:$WEB_PORT/webclient/login/"
13-
SERVER="1"
14-
URL="url=%2Fwebclient%2F"
15-
COOKIES=cookies.txt
16-
17-
rm -f $COOKIES
18-
CURL_BIN="curl -i -k -s -c $COOKIES -b $COOKIES -e $LOGIN_URL"
19-
20-
echo -n "Getting CRSF token "
21-
# Retry for 2 mins
22-
i=0
23-
csrf_token=
24-
while [ -z "$csrf_token" -a $i -lt 60 ]; do
25-
sleep 2
26-
$CURL_BIN $LOGIN_URL > /dev/null || true
27-
csrf_token=$(grep csrftoken cookies.txt | awk '{print $7}')
28-
echo -n "."
29-
let ++i
30-
done
31-
echo
32-
33-
if [ -z "$csrf_token" ]; then
34-
echo "Failed to get CSRF token"
35-
exit 2
36-
fi
37-
38-
echo "CSRF token: $csrf_token"
39-
echo -n "Attempting to login "
40-
# Retry for 2 mins
41-
DJANGO_TOKEN="csrfmiddlewaretoken=$csrf_token"
12+
# Wait up to 2 mins
4213
i=0
43-
session_id=
44-
# Retry for 2 mins
45-
while [ -z "$session_id" -a $i -lt 60 ]; do
46-
sleep 2
47-
$CURL_BIN -d \
48-
"$DJANGO_TOKEN&username=$OMERO_USER&password=$OMERO_PASS&server=$SERVER&url=$URL" \
49-
-X POST $LOGIN_URL > /dev/null || true
50-
session_id=$(grep sessionid cookies.txt | awk '{print $7}')
51-
echo -n "."
52-
let ++i
14+
while ! docker exec test-server $OMERO login -C -s localhost -u "$OMERO_USER" -q -w "$OMERO_PASS"; do
15+
i=$(($i+1))
16+
if [ $i -ge 24 ]; then
17+
echo "$(date) - OMERO.server still not reachable, giving up"
18+
exit 1
19+
fi
20+
echo "$(date) - waiting for OMERO.server..."
21+
sleep 5
5322
done
54-
echo
55-
56-
if [ -z "$session_id" ]; then
57-
echo "Failed to login"
58-
exit 2
59-
fi
60-
61-
echo "Session id: $session_id"
62-
rm -f $COOKIES
23+
echo "OMERO.server connection established"

test_processor.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,20 @@ set -x
77
# Must be exported by the caller:
88
# OMERO_USER OMERO_PASS PREFIX
99

10+
OMERO=/opt/omero/server/OMERO.server/bin/omero
1011
DSNAME=$(date +%Y%m%d-%H%M%S-%N)
1112
FILENAME=$(date +%Y%m%d-%H%M%S-%N).fake
1213
SCRIPT=/omero/util_scripts/Dataset_To_Plate.py
1314

14-
dataset_id=$(docker exec $PREFIX-master OMERO.server/bin/omero obj -q -s localhost -u $OMERO_USER -w $OMERO_PASS new Dataset name=$DSNAME | cut -d: -f2)
15+
dataset_id=$(docker exec $PREFIX-server $OMERO obj -q -s localhost -u $OMERO_USER -w $OMERO_PASS new Dataset name=$DSNAME | cut -d: -f2)
1516

16-
docker exec $PREFIX-master sh -c \
17-
"touch $FILENAME && OMERO.server/bin/omero import -d $dataset_id $FILENAME"
17+
docker exec $PREFIX-server sh -c \
18+
"touch /tmp/$FILENAME && $OMERO import -d $dataset_id /tmp/$FILENAME"
1819

19-
docker exec $PREFIX-master OMERO.server/bin/omero script launch $SCRIPT \
20-
IDs=$dataset_id
20+
docker exec $PREFIX-server $OMERO script launch $SCRIPT IDs=$dataset_id
2121
echo "Completed with code $?"
2222

23-
result=$(docker exec $PREFIX-master OMERO.server/bin/omero hql -q -s localhost -u $OMERO_USER -w $OMERO_PASS "SELECT COUNT(w) FROM WellSample w WHERE w.well.plate.name='$DSNAME' AND w.image.name='$FILENAME'" --style plain)
23+
result=$(docker exec $PREFIX-server $OMERO hql -q -s localhost -u $OMERO_USER -w $OMERO_PASS "SELECT COUNT(w) FROM WellSample w WHERE w.well.plate.name='$DSNAME' AND w.image.name='$FILENAME'" --style plain)
2424
if [ "$result" != "0,1" ]; then
2525
echo "Script failed: $result"
2626
exit 2

0 commit comments

Comments
 (0)