This removes a conflict with systemd-resolved and provides an option to set your own port
111 lines
2.4 KiB
Nix
111 lines
2.4 KiB
Nix
{
|
|
...
|
|
}:
|
|
{
|
|
name = "coredns";
|
|
|
|
clan = {
|
|
directory = ./.;
|
|
test.useContainers = true;
|
|
inventory = {
|
|
|
|
machines = {
|
|
dns = { }; # 192.168.1.2
|
|
server01 = { }; # 192.168.1.3
|
|
server02 = { }; # 192.168.1.4
|
|
client = { }; # 192.168.1.1
|
|
};
|
|
|
|
instances = {
|
|
coredns = {
|
|
|
|
module.name = "@clan/coredns";
|
|
module.input = "self";
|
|
|
|
roles.default.tags.all = { };
|
|
|
|
# First service
|
|
roles.default.machines."server01".settings = {
|
|
ip = "192.168.1.3";
|
|
services = [ "one" ];
|
|
};
|
|
|
|
# Second service
|
|
roles.default.machines."server02".settings = {
|
|
ip = "192.168.1.4";
|
|
services = [ "two" ];
|
|
};
|
|
|
|
# DNS server
|
|
roles.server.machines."dns".settings = {
|
|
ip = "192.168.1.2";
|
|
tld = "foo";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
nodes = {
|
|
dns =
|
|
{ pkgs, ... }:
|
|
{
|
|
environment.systemPackages = [ pkgs.net-tools ];
|
|
};
|
|
|
|
client =
|
|
{ pkgs, ... }:
|
|
{
|
|
environment.systemPackages = [ pkgs.net-tools ];
|
|
};
|
|
|
|
server01 = {
|
|
services.nginx = {
|
|
enable = true;
|
|
virtualHosts."one.foo" = {
|
|
locations."/" = {
|
|
return = "200 'test server response one'";
|
|
extraConfig = "add_header Content-Type text/plain;";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
server02 = {
|
|
services.nginx = {
|
|
enable = true;
|
|
virtualHosts."two.foo" = {
|
|
locations."/" = {
|
|
return = "200 'test server response two'";
|
|
extraConfig = "add_header Content-Type text/plain;";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
testScript = ''
|
|
import json
|
|
start_all()
|
|
|
|
machines = [server01, server02, dns, client]
|
|
|
|
for m in machines:
|
|
m.systemctl("start network-online.target")
|
|
|
|
for m in machines:
|
|
m.wait_for_unit("network-online.target")
|
|
|
|
# This should work, but is borken in tests i think? Instead we dig directly
|
|
|
|
# client.succeed("curl -k -v http://one.foo")
|
|
# client.succeed("curl -k -v http://two.foo")
|
|
|
|
answer = client.succeed("dig @192.168.1.2 -p 1053 one.foo")
|
|
assert "192.168.1.3" in answer, "IP not found"
|
|
|
|
answer = client.succeed("dig @192.168.1.2 -p 1053 two.foo")
|
|
assert "192.168.1.4" in answer, "IP not found"
|
|
|
|
'';
|
|
}
|