Skip to content
Snippets Groups Projects
test_ntp.py 2.09 KiB
Newer Older
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2017, Florent Thiery
Checks that the server is synchronized with the configured NTP server.
import os
import subprocess
import sys

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

# Check that ntpd is synced
if os.path.isfile('/usr/bin/ntpq'):
    cmd = 'LANG=C ntpq -pd'
    expected = 'remote'
    ntpconf = '/etc/ntp.conf'
    ntpconf_expected = r'^(?:server|pool)\s(.*)$'
    cmd = 'LANG=C timedatectl'
    expected = 'NTP synchronized'
    ntpconf = '/etc/systemd/timesyncd.conf'
    ntpconf_expected = r'^NTP=(.*)$'
print('Running %s' % cmd)
status = subprocess.getoutput(cmd)
if expected not in status:
    print('%sNTP not working: %s%s' % (RED, status, DEF))
    sys.exit(1)
print('%sSystem is NTP synchronized.%s' % (GREEN, DEF))
os.chdir(os.path.dirname(__file__))

print('Checking NTP server conforms to conf...')
if not os.path.isfile('../utils.py'):
    print('%sCould not find envsetup conf file or not running from expected location.%s' % (RED, DEF))
    sys.exit(1)

es_utils = imp.load_source('es_utils', '../utils.py')
conf = es_utils.load_conf()

expected_servers = None
if conf.get('NTP_SERVER'):
    expected_servers = [s.strip() for s in conf['NTP_SERVER'].split(',')]
if not expected_servers:
    if 'Ubuntu' in subprocess.getoutput('lsb_release -a'):
        expected_servers = ['ntp.ubuntu.com']
    else:
        expected_servers = ['0.debian.pool.ntp.org iburst']

with open(ntpconf, 'r') as f:
    content = f.read()
servers = list()
for l in content.split('\n'):
    m = re.match(ntpconf_expected, l)
    if m:
        servers.append(m.groups()[0].strip())
for expected_server in expected_servers:
    if expected_server not in servers:
        print('%sWarning: Expected NTP server %s not found in %s, found %s instead.%s' % (YELLOW, expected_server, ntpconf, ', '.join(servers), DEF))
        sys.exit(3)
    else:
        print('Expected NTP server %s found in configuration (total servers: %s).' % (expected_server, len(servers)))
print('%sNTP OK.%s' % (GREEN, DEF))