Merge pull request #100155 from primeos/nixos-add-fqdn-option

nixos/networking: Add a read-only option for the FQDN
This commit is contained in:
Florian Klink 2021-01-25 16:45:45 +01:00 committed by GitHub
commit b2f3bd4d79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 44 additions and 17 deletions

View File

@ -124,7 +124,8 @@ in
};
hostName = mkOption {
type = types.str;
default = config.networking.hostName;
default = config.networking.fqdn;
defaultText = "\${config.networking.fqdn}";
example = "somewhere.example.com";
description = "DNS name for the urls generated in the cgi.";
};
@ -156,6 +157,7 @@ in
ownerEmail = mkOption {
type = types.str;
default = "no-reply@${cfg.hostName}";
defaultText = "no-reply@\${hostName}";
example = "no-reply@yourdomain.com";
description = "Email contact for owner";
};
@ -239,18 +241,18 @@ in
targetConfig = mkOption {
type = types.lines;
default = ''
probe = FPing
menu = Top
title = Network Latency Grapher
remark = Welcome to the SmokePing website of xxx Company. \
Here you will learn all about the latency of our network.
+ Local
menu = Local
title = Local Network
++ LocalMachine
menu = Local Machine
title = This host
host = localhost
probe = FPing
menu = Top
title = Network Latency Grapher
remark = Welcome to the SmokePing website of xxx Company. \
Here you will learn all about the latency of our network.
+ Local
menu = Local
title = Local Network
++ LocalMachine
menu = Local Machine
title = This host
host = localhost
'';
description = "Target configuration";
};

View File

@ -398,6 +398,24 @@ in
'';
};
networking.fqdn = mkOption {
readOnly = true;
type = types.str;
default = if (cfg.hostName != "" && cfg.domain != null)
then "${cfg.hostName}.${cfg.domain}"
else throw ''
The FQDN is required but cannot be determined. Please make sure that
both networking.hostName and networking.domain are set properly.
'';
defaultText = literalExample ''''${networking.hostName}.''${networking.domain}'';
description = ''
The fully qualified domain name (FQDN) of this host. It is the result
of combining networking.hostName and networking.domain. Using this
option will result in an evaluation error if the hostname is empty or
no domain is specified.
'';
};
networking.hostId = mkOption {
default = null;
example = "4e98920d";

View File

@ -7,9 +7,12 @@ with import ../lib/testing-python.nix { inherit system pkgs; };
with pkgs.lib;
let
makeHostNameTest = hostName: domain:
makeHostNameTest = hostName: domain: fqdnOrNull:
let
fqdn = hostName + (optionalString (domain != null) ".${domain}");
getStr = str: # maybeString2String
let res = builtins.tryEval str;
in if (res.success && res.value != null) then res.value else "null";
in
makeTest {
name = "hostname-${fqdn}";
@ -26,13 +29,16 @@ let
];
};
testScript = ''
testScript = { nodes, ... }: ''
start_all()
machine = ${hostName}
machine.wait_for_unit("network-online.target")
# Test if NixOS computes the correct FQDN (either a FQDN or an error/null):
assert "${getStr nodes.machine.config.networking.fqdn}" == "${getStr fqdnOrNull}"
# The FQDN, domain name, and hostname detection should work as expected:
assert "${fqdn}" == machine.succeed("hostname --fqdn").strip()
assert "${optionalString (domain != null) domain}" == machine.succeed("dnsdomainname").strip()
@ -60,7 +66,7 @@ let
in
{
noExplicitDomain = makeHostNameTest "ahost" null;
noExplicitDomain = makeHostNameTest "ahost" null null;
explicitDomain = makeHostNameTest "ahost" "adomain";
explicitDomain = makeHostNameTest "ahost" "adomain" "ahost.adomain";
}

View File

@ -8,6 +8,7 @@ import ./make-test-python.nix ({ pkgs, ...} : {
sm =
{ ... }:
{
networking.domain = "example.com"; # FQDN: sm.example.com
services.smokeping = {
enable = true;
port = 8081;