Skip to content
Snippets Groups Projects
test_mediaworker.py 3.52 KiB
Newer Older
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
Criticality: High
Florent Thiery's avatar
Florent Thiery committed
Checks that MediaWorker can be reached using SSH and that it can reach the tasks server
'''
import os
import imp
import sys
import subprocess

GREEN = '\033[92m'
RED = '\033[91m'
DEF = '\033[0m'


try:
    import mediaserver
except ImportError:
    print('MediaServer is not installed, skipping test.')
    print('MediaServer version: %s.' % mediaserver.__version__)
os.chdir(os.path.dirname(__file__))
if not os.path.isfile('../utils.py'):
    print('conf.sh not found.')
    sys.exit(1)

es_utils = imp.load_source('es_utils', '../utils.py')
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:\n%s' % cmd)
    try:
        subprocess.check_output(cmd, shell=True, timeout=2)
        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))
        return False
    return True

def run_tests(ip):
    print('Updating envsetup tests on MediaWorker.')
Florent Thiery's avatar
Florent Thiery committed
    cmd = 'ssh -t %s cd /root/envsetup && git pull' % ip
Florent Thiery's avatar
Florent Thiery committed
    os.system(cmd)
    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, ip, DEF))
Stéphane Diemer's avatar
Stéphane Diemer committed
        print('%sapt-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)
    print('Checking celerity connectivity: %s' % cmd)
Florent Thiery's avatar
Florent Thiery committed
    try:
        d = subprocess.check_output(cmd, shell=True, timeout=5, universal_newlines=True)
Florent Thiery's avatar
Florent Thiery committed
    except subprocess.CalledProcessError:
Florent Thiery's avatar
Florent Thiery committed
        d = ''
    if 'Celerity tasks server' in d:
        print('%sSuccessfully reached tasks server from MediaWorker "%s".%s' % (GREEN, ip, DEF))
    print('%sFailed to reach tasks server from MediaWorker "%s".%s' % (RED, ip, DEF))
def check_mediaworker_in_whitelist(ip):
    nginx_vhosts_path = '/etc/nginx/sites-enabled'
    vhosts = os.listdir(nginx_vhosts_path)
    for v in vhosts:
        if v.endswith('.conf'):
Florent Thiery's avatar
Florent Thiery committed
            vhost_path = os.path.join(nginx_vhosts_path, v)
            with open(vhost_path, 'r') as f:
                d = f.read()
                if 'msuser_whitelist' in d:
                    if not ip in d:
Florent Thiery's avatar
Florent Thiery committed
                        print('%sMediaWorker ip %s is not in %s whitelist%s' % (RED, ip, v, DEF))
all_ok = True
tested = False
mediaserver_ip = conf.get('NETWORK_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):
        else:
            if not check_celerity_connectivity(worker_ip):
                all_ok = False
            #if not run_tests(worker_ip):
            #    all_ok = False
            if not check_mediaworker_in_whitelist(worker_ip):
                all_ok = False
if not tested:
    print('Celerity IP not set or running locally, skipping test.')
    sys.exit(2)
Florent Thiery's avatar
Florent Thiery committed
sys.exit(int(not all_ok))