Newer
Older
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2017, Florent Thiery

Stéphane Diemer
committed
Criticality: Normal

Florent Thiery
committed
Checks that DNS records are provided by the customer servers are correctly set
import subprocess
import os
import sys
import imp
def get_dns_servers():
servers = list()
for l in d.split("\n"):
if l.startswith("nameserver "):
servers.append(l.split("nameserver ")[1])
if servers == ["127.0.1.1"]:
# NetworkManager
status, output = subprocess.getstatusoutput(
"nmcli -f all device show | grep IP4.DNS | awk '{ print $2 }'"
)
servers.extend(output.split("\n"))
for line in output.split("\n"):
if "has address " in line:
return line.split("has address ")[1]

Florent Thiery
committed
def check_dns(hostname, expected_ip):
all_ok = True
for resolver in resolvers:
status, output = subprocess.getstatusoutput(
'host "%s" "%s"' % (hostname, resolver)
)
color = GREEN
address = get_result(output)
if address == "127.0.0.1" and resolver == "127.0.0.53":
elif address != expected_ip:
print('Expected ip was: "%s", got "%s".' % (expected_ip, address))

Florent Thiery
committed
color = RED
all_ok = False
else:
color = RED
all_ok = False
address = "FAIL"
print(
'%sDNS resolution of "%s" on server "%s" returned "%s".%s'
% (color, hostname, resolver, address, DEF)
)
if not os.path.isfile("../utils.py"):
print("conf.sh not found")

Florent Thiery
committed
sys.exit(1)
for conf_resolver_key in conf_resolvers_keys:
conf_resolver = conf.get(conf_resolver_key)
if conf_resolver and conf_resolver != "0" and conf_resolver not in resolvers:
print("Resolver %s not configured on the system." % conf_resolver)
ip = conf.get("NETWORK_IP_NAT")
if not ip or ip == "0":
ip = conf.get("NETWORK_IP")
if not ip or ip == "0":
services_info = (
("MS_SERVER_NAME", "mediaserver", "python3-mediaserver"),
("MONITOR_SERVER_NAME", "monitor", "python3-mediaserver-monitor"),
("CM_SERVER_NAME", "mirismanager", "skyreach"),
for conf_name, default_domain, package in services_info:
domain = conf.get(conf_name)
# check that the service is installed on this system
status, output = subprocess.getstatusoutput("dpkg -s %s" % package)
if status == 0:
print('Checking IP of "%s".' % domain)
ok = check_dns(domain, ip)
if not ok:
all_ok = False
else:
print(
'Package %s is not installed, IP of "%s" will not be checked.'
% (package, domain)
)
if not all_ok:
sys.exit(1)
else:
sys.exit(0)