From 6e666b9674a66ac948da51817b4483d750f92963 Mon Sep 17 00:00:00 2001 From: Nicolas KAROLAK <nicolas@karolak.fr> Date: Tue, 15 Oct 2019 12:32:50 +0000 Subject: [PATCH] make use of nmcli when systemd-resolved is used --- tests/test_dns_records.py | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/tests/test_dns_records.py b/tests/test_dns_records.py index dbb185c9..19003871 100755 --- a/tests/test_dns_records.py +++ b/tests/test_dns_records.py @@ -15,21 +15,18 @@ sys.path.append(str(Path(__file__).parents[1].resolve())) from envsetup import utils as u # noqa: E402 -def get_dns_servers() -> list: - servers = list() +def get_dns_servers() -> set: with open("/etc/resolv.conf", "r") as f: d = f.read().strip() - for l in d.split("\n"): - if l.startswith("nameserver "): - servers.append(l.split("nameserver ")[1]) - if servers == ["127.0.1.1"]: - # NetworkManager + servers = [l.split()[1] for l in d.split("\n") if l.startswith("nameserver")] + if len(servers) and servers[0].startswith("127.0."): + # network-manager or systemd-resolved _, output = subprocess.getstatusoutput( "nmcli -f all device show | grep IP4.DNS | awk '{ print $2 }'" ) - servers.extend(output.split("\n")) + servers = output.split("\n") - return servers + return set(servers) def get_result(output: str) -> str: @@ -38,7 +35,7 @@ def get_result(output: str) -> str: return line.split("has address ")[1] -def check_dns(hostname: str, expected_ip: str, resolvers: list) -> tuple: +def check_dns(hostname: str, expected_ip: str, resolvers: set) -> tuple: warnings = 0 errors = 0 @@ -50,8 +47,6 @@ def check_dns(hostname: str, expected_ip: str, resolvers: list) -> tuple: address = get_result(output) 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( @@ -66,7 +61,7 @@ def check_dns(hostname: str, expected_ip: str, resolvers: list) -> tuple: return warnings, errors -def check_resolver(conf: dict, resolvers: list, ip: str) -> tuple: +def check_resolver(conf: dict, resolvers: set, ip: str) -> tuple: warnings = 0 errors = 0 @@ -74,8 +69,8 @@ def check_resolver(conf: dict, resolvers: list, ip: str) -> tuple: 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 + u.warning("resolver {} not configured".format(conf_resolver)) + warnings += 1 if not ip and (not errors): u.info("no IP set in configuration , unable to test DNS") -- GitLab