From d0baf177203376b01c998624a1d43c1b8ee25979 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Diemer?= <stephane.diemer@ubicast.eu>
Date: Wed, 15 Mar 2017 08:58:29 +0100
Subject: [PATCH] Allow multiple IP for worker (refs #20799).

---
 2.Common_services/5.Nginx/0_setup.py          |  8 ++-
 .../5.Nginx/vhost_mediaserver-msuser.conf     |  3 +-
 .../2.Fill_empty_conf/0_setup.sh              | 10 ----
 global-conf.sh                                |  1 +
 tests/test_mediaworker.py                     | 54 ++++++++++---------
 5 files changed, 38 insertions(+), 38 deletions(-)

diff --git a/2.Common_services/5.Nginx/0_setup.py b/2.Common_services/5.Nginx/0_setup.py
index 3272df95..ad0a082d 100644
--- a/2.Common_services/5.Nginx/0_setup.py
+++ b/2.Common_services/5.Nginx/0_setup.py
@@ -48,8 +48,14 @@ def setup(interactive=True):
     if os.path.exists('/home/msuser/msinstance'):
         need_uwsgi = True
         server_name = utils.get_conf('MS_SERVER_NAME') or 'mediaserver'
+        worker_ips = utils.get_conf('CELERITY_WORKER_IP') or '127.0.1.1'
+        whitelist = ''
+        for worker_ip in worker_ips.split(','):
+            worker_ip = worker_ip.strip()
+            if worker_ip:
+                whitelist += '\n\t%s 1;' % worker_ip
         cmds.extend(vhost_write_cmds(dir_path, 'mediaserver-msuser', server_name,
-            secret=utils.get_conf('MS_SECRET') or 'secret', worker_ip=utils.get_conf('CELERITY_WORKER_IP') or '127.0.1.1'))
+            secret=utils.get_conf('MS_SECRET') or 'secret', whitelist=whitelist))
         hosts.append(server_name)
     # Monitor vhost
     if os.path.exists('/home/msmonitor/msmonitor'):
diff --git a/2.Common_services/5.Nginx/vhost_mediaserver-msuser.conf b/2.Common_services/5.Nginx/vhost_mediaserver-msuser.conf
index b9ecefc7..5fc64b97 100644
--- a/2.Common_services/5.Nginx/vhost_mediaserver-msuser.conf
+++ b/2.Common_services/5.Nginx/vhost_mediaserver-msuser.conf
@@ -1,7 +1,6 @@
 geo $msuser_whitelist {
 	default 0;
-	127.0.0.1 1;
-	{{ worker_ip }} 1;
+	127.0.0.1 1;{{ whitelist }}
 }
 map $msuser_whitelist $msuser_allowed {
 	0 $secure_link;
diff --git a/3.New_server_deployment/2.Fill_empty_conf/0_setup.sh b/3.New_server_deployment/2.Fill_empty_conf/0_setup.sh
index e8d7a231..add9be4e 100755
--- a/3.New_server_deployment/2.Fill_empty_conf/0_setup.sh
+++ b/3.New_server_deployment/2.Fill_empty_conf/0_setup.sh
@@ -34,13 +34,3 @@ if [ "${MS_SECRET}" = "secret" ]; then
 	fi
 	echo "The config MS_SECRET has been set."
 fi
-# Worker IP for whitelist
-if [ "${CELERITY_WORKER_IP}" = "" ] || [ "${CELERITY_WORKER_IP}" = "127.0.1.1" ]; then
-	CELERITY_WORKER_IP=$(ip addr show | grep inet | grep -v 127 | grep -v ":" | awk -F " " '{print$2}' | awk -F "/" '{print$1}')
-	if ( cat "/root/envsetup/conf.sh" | grep "CELERITY_WORKER_IP" >/dev/null ); then
-		sed -i "s@^CELERITY_WORKER_IP=.*@CELERITY_WORKER_IP='${CELERITY_WORKER_IP}'@" /root/envsetup/conf.sh
-	else
-		echo "CELERITY_WORKER_IP='${CELERITY_WORKER_IP}'" >> /root/envsetup/conf.sh
-	fi
-	echo "The config CELERITY_WORKER_IP has been set."
-fi
diff --git a/global-conf.sh b/global-conf.sh
index 4f45bd45..4b287cf7 100644
--- a/global-conf.sh
+++ b/global-conf.sh
@@ -73,6 +73,7 @@ MYSQL_CONTACT_IP=
 
 # -- Celerity --
 CELERITY_SIGNING_KEY='test'
+# worker IP adresses, use commas to separate values
 CELERITY_WORKER_IP='127.0.1.1'
 
 # -- Network configuration --
diff --git a/tests/test_mediaworker.py b/tests/test_mediaworker.py
index cd4ec950..a395b7c9 100755
--- a/tests/test_mediaworker.py
+++ b/tests/test_mediaworker.py
@@ -17,15 +17,15 @@ DEF = '\033[0m'
 try:
     import mediaserver
 except ImportError:
-    print('MediaServer is not installed, skipping test')
+    print('MediaServer is not installed, skipping test.')
     sys.exit(2)
 else:
-    print('MediaServer version: %s' % mediaserver.__version__)
+    print('MediaServer version: %s.' % mediaserver.__version__)
 
 
 os.chdir(os.path.dirname(__file__))
 if not os.path.isfile('../utils.py'):
-    print('conf.sh not found')
+    print('conf.sh not found.')
     sys.exit(1)
 
 es_utils = imp.load_source('es_utils', '../utils.py')
@@ -34,60 +34,64 @@ conf = es_utils.load_conf()
 
 def check_ssh(ip):
     cmd = 'ssh -o StrictHostKeyChecking=no -o PasswordAuthentication=no %s ls /tmp' % ip
-    print('Connecting to MediaWorker: %s' % cmd)
+    print('Connecting to MediaWorker:\n%s' % cmd)
     try:
         subprocess.check_output(cmd, shell=True, timeout=2)
-        print('%sLogged in successfully%s' % (GREEN, DEF))
+        print('%sLogged in successfully in "%s".%s' % (GREEN, ip, DEF))
     except subprocess.CalledProcessError:
-        print('%sFailed to login using SSH, run ssh-copy-id %s %s' % (RED, ip, DEF))
+        print('%sFailed to login using SSH, run "ssh-copy-id %s".%s' % (RED, ip, DEF))
         return False
     return True
 
 
 def run_tests(ip):
-    print('Updating envsetup tests on MediaWorker')
+    print('Updating envsetup tests on MediaWorker.')
     cmd = 'ssh -t %s cd /root/envsetup && git pull' % ip
     os.system(cmd)
-    print('Running envsetup tests on MediaWorker')
+    print('Running envsetup tests on MediaWorker.')
     cmd = 'ssh -t %s /root/envsetup/tester.py' % ip
     status = os.system(cmd)
     if status == 0:
         subprocess.check_output(cmd, shell=True, timeout=60)
-        print('%sAll tests completed on MediaWorker%s' % (GREEN, DEF))
+        print('%sAll tests completed on MediaWorker "%s".' % (GREEN, ip, DEF))
         return True
     else:
-        print('%apt-get update failed on MediaWorker%s' % (RED, DEF))
+        print('%apt-get update failed on MediaWorker "%s".%s' % (RED, ip, DEF))
         return False
 
 
 def check_celerity_connectivity(ip):
     h = conf.get('MS_SERVER_NAME')
-    cmd = "ssh %s curl -k https://%s:6200" % (ip, h)
+    cmd = 'ssh %s curl -k https://%s:6200' % (ip, h)
     print('Checking celerity connectivity: %s' % cmd)
     try:
         d = subprocess.check_output(cmd, shell=True, timeout=5, universal_newlines=True)
     except subprocess.CalledProcessError:
         d = ''
-    if "Celerity tasks server" in d:
-        print('%sSuccessfully reached tasks server%s' % (GREEN, DEF))
+    if 'Celerity tasks server' in d:
+        print('%sSuccessfully reached tasks server from MediaWorker "%s".%s' % (GREEN, ip, DEF))
         return True
-    print('%sMediaWorker %s failed to reach tasks server%s' % (RED, ip, DEF))
+    print('%sFailed to reach tasks server from MediaWorker "%s".%s' % (RED, ip, DEF))
     return False
 
-all_ok = True
 
+all_ok = True
+tested = False
 mediaserver_ip = conf.get('NETWORK_IP')
-worker_ip = conf.get('CELERITY_WORKER_IP')
-if worker_ip != '127.0.1.1' and worker_ip != mediaserver_ip:
-    if not check_ssh(worker_ip):
-        all_ok = False
-    else:
-        if not check_celerity_connectivity(worker_ip):
+worker_ips = conf.get('CELERITY_WORKER_IP')
+for worker_ip in worker_ips.split(','):
+    worker_ip = worker_ip.strip()
+    if worker_ip and worker_ip != '127.0.1.1' and worker_ip != mediaserver_ip:
+        tested = True
+        if not check_ssh(worker_ip):
             all_ok = False
-        if not run_tests(worker_ip):
-            all_ok = False
-else:
-    print('Celerity IP not set or running locally, skipping test')
+        else:
+            if not check_celerity_connectivity(worker_ip):
+                all_ok = False
+            if not run_tests(worker_ip):
+                all_ok = False
+if not tested:
+    print('Celerity IP not set or running locally, skipping test.')
     sys.exit(2)
 
 sys.exit(int(not all_ok))
-- 
GitLab