Skip to content

Commit

Permalink
fix: get local DNS queries working (needed for Docker Compose Integra…
Browse files Browse the repository at this point in the history
…tion)
  • Loading branch information
rpoisel committed Jan 17, 2025
1 parent 06f0156 commit 12a0596
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 7 deletions.
6 changes: 2 additions & 4 deletions tests/util/test_docker.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,10 @@ def test_docker_compose_renderer_local(in_docker_container: MagicMock, primary_h
assert renderer.map_service("openvpn-server") == IPv4Address("1.2.3.4")


@patch("docker.resolve")
@patch("docker.in_docker_container")
def test_docker_compose_renderer_dind(in_docker_container: MagicMock, resolve: MagicMock) -> None:
resolve.return_value = IPv4Address("5.6.7.8")
def test_docker_compose_renderer_dind(in_docker_container: MagicMock) -> None:
in_docker_container.return_value = True

renderer = DockerInDockerComposeRenderer(OPENVPN_COMPOSE_TEMPLATE)
assert renderer.port_mappings["udp"]["openvpn"] == 1194
assert renderer.map_service("openvpn-server") == IPv4Address("5.6.7.8")
assert renderer.map_service("openvpn-server") == "openvpn-server"
4 changes: 2 additions & 2 deletions util/docker.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

import yaml
from fs import create_temp_dir
from network import get_free_tcp_port, get_free_udp_port, primary_host_ip, resolve
from network import get_free_tcp_port, get_free_udp_port, primary_host_ip


def in_docker_container() -> bool:
Expand Down Expand Up @@ -109,7 +109,7 @@ def map_service(self, hostname: str) -> str | IPv4Address:
# currently, it seems the OpenWrt in QEMU DNS resolver is not able to forward
# its requests to the hosts DNS server; but as routing works in general,
# when mapping a hostname, we use the host's DNS resolver directly
return resolve(hostname)
return hostname


def create_compose_renderer(compose_template: str) -> ComposeRenderer:
Expand Down
7 changes: 7 additions & 0 deletions util/openwrt.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,10 @@ def enable_dhcp(runner: Runner) -> None:
service.restart(runner, "network", wait=1)
if not wait_for(partial(get_gateway_ip, runner), "gateway IP has been assigned", delay=1):
raise NetworkConfigurationError("no gateway has been assigned on time.")


def enable_local_dns_queries(runner: Runner) -> None:
uci.set(runner, "dhcp.@dnsmasq[0].domainneeded", "0")
uci.set(runner, "dhcp.@dnsmasq[0].rebind_protection", "0")
uci.commit(runner, "dhcp")
service.restart(runner, "dnsmasq")
3 changes: 2 additions & 1 deletion util/strategy/qemu_strategy.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from labgrid.step import Step
from labgrid.strategy import Strategy, StrategyError
from labgrid.util import get_free_port
from openwrt import enable_dhcp
from openwrt import enable_dhcp, enable_local_dns_queries

from .status import Status

Expand Down Expand Up @@ -107,6 +107,7 @@ def transition(self, status: Status | str, *, step: Step | None = None) -> None:

assert self.shell
enable_dhcp(self.shell)
enable_local_dns_queries(self.shell)

elif status == Status.ssh:
self.transition(Status.internet)
Expand Down

0 comments on commit 12a0596

Please sign in to comment.