Newer
Older

Stéphane Diemer
committed
Criticality: Normal

Florent Thiery
committed
Checks that DNS records are provided by the customer servers are correctly set
sys.path.append(str(Path(__file__).parents[1].resolve()))
# pylint: disable=wrong-import-position
from envsetup import utils as u # noqa: E402
for l in d.split("\n"):
if l.startswith("nameserver "):
servers.append(l.split("nameserver ")[1])
if servers == ["127.0.1.1"]:
# NetworkManager
"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]
def check_dns(hostname: str, expected_ip: str, resolvers: list) -> tuple:
warnings = 0
errors = 0
if address == expected_ip:
u.success("dns({}): {} -> {}".format(resolver, hostname, address))
elif address == "127.0.0.1" and resolver == "127.0.0.53":
u.success("dns({}): {} -> {}".format(resolver, hostname, address))
else:
u.error(
"dns({}): {} -> {} (should be {})".format(
resolver, hostname, address, expected_ip
)
)
errors += 1
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
u.error("dns({}): cannot resolve {}".format(resolver, hostname))
errors += 1
return warnings, errors
def check_resolver(conf: dict, resolvers: list, ip: str) -> tuple:
warnings = 0
errors = 0
conf_resolvers_keys = ("NETWORK_DNS1", "NETWORK_DNS2")
for conf_resolver_key in conf_resolvers_keys:
conf_resolver = conf.get(conf_resolver_key)
if conf_resolver and conf_resolver not in resolvers:
u.error("resolver {} not configured".format(conf_resolver))
errors += 1
if not ip and (not errors):
u.info("no IP set in configuration , unable to test DNS")
exit(2)
return warnings, errors
def main():
print("Check DNS settings:")
warnings = 0
errors = 0
conf = u.load_conf()
resolvers = get_dns_servers()
ip = conf.get("NETWORK_IP_NAT") or conf.get("NETWORK_IP")
check_resolver_warn, check_resolver_err = check_resolver(conf, resolvers, ip)
if check_resolver_err:
errors += check_resolver_err
if check_resolver_warn:
warnings += check_resolver_warn
services_info = (
("MS_SERVER_NAME", "mediaserver", "ubicast-mediaserver"),
("MONITOR_SERVER_NAME", "monitor", "ubicast-monitor"),
("CM_SERVER_NAME", "mirismanager", "ubicast-skyreach"),
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
)
for conf_name, default_domain, package in services_info:
domain = conf.get(conf_name)
resolution_ignored = conf.get("TESTER_DNS_RESOLUTION_IGNORED", "").split(",")
if (
domain
and domain not in ("localhost", default_domain)
and domain not in resolution_ignored
):
# check that the service is installed on this system
status, _ = subprocess.getstatusoutput("dpkg -s {}".format(package))
if status == 0:
u.info("- checking IP of {}".format(domain))
check_dns_warn, check_dns_err = check_dns(domain, ip, resolvers)
if check_dns_err:
errors += check_dns_err
if check_dns_warn:
warnings += check_dns_warn
else:
u.info("{} not installed, skip {}".format(package, domain))
if errors:
exit(1)
elif warnings:
exit(3)
if __name__ == "__main__":
main()