nixos/networking: Add a read-only option for the FQDN

This is a convenience option that can be used to quickly obtain the
configured FQDN.
This commit is contained in:
Michael Weiss 2020-10-10 11:30:47 +00:00 committed by Michael Weiss
parent b13bb2402b
commit 971f0b45ef
No known key found for this signature in database
GPG key ID: 5BE487C4D4771D83
2 changed files with 28 additions and 4 deletions

View file

@ -394,6 +394,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";
}