nixos/networkd: rename the networkd dhcpConfig option to dhcpV4Config

This follows upstreams change in documentation. While the `[DHCP]`
section might still work it is undocumented and we should probably not
be using it anymore. Users can just upgrade to the new option without
much hassle.

I had to create a bit of custom module deprecation code since the usual
approach doesn't support wildcards in the path.
This commit is contained in:
Andreas Rammhold 2020-01-08 20:18:26 +01:00
parent bb9b61e2b7
commit 819e8bb35f
No known key found for this signature in database
GPG key ID: E432E410B5E48C86
3 changed files with 27 additions and 9 deletions

View file

@ -300,6 +300,17 @@ environment.systemPackages = [
<manvolnum>5</manvolnum></citerefentry> for details. <manvolnum>5</manvolnum></citerefentry> for details.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
The <literal>systemd-networkd</literal> option
<literal>systemd.network.networks._name_.dhcpConfig</literal>
has been renamed to
<xref linkend="opt-systemd.network.networks._name_.dhcpV4Config"/>
following upstream systemd's documentation change.
See <citerefentry><refentrytitle>systemd.network</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details.
</para>
</listitem>
</itemizedlist> </itemizedlist>
</section> </section>

View file

@ -275,13 +275,13 @@ let
]) ])
]; ];
checkDhcp = checkUnitConfig "DHCP" [ checkDhcpV4 = checkUnitConfig "DHCPv4" [
(assertOnlyFields [ (assertOnlyFields [
"UseDNS" "RoutesToDNS" "UseNTP" "UseMTU" "Anonymize" "SendHostname" "UseHostname" "UseDNS" "RoutesToDNS" "UseNTP" "UseMTU" "Anonymize" "SendHostname" "UseHostname"
"Hostname" "UseDomains" "UseRoutes" "UseTimezone" "Hostname" "UseDomains" "UseRoutes" "UseTimezone"
"ClientIdentifier" "VendorClassIdentifier" "UserClass" "MaxAttempts" "ClientIdentifier" "VendorClassIdentifier" "UserClass" "MaxAttempts"
"DUIDType" "DUIDRawData" "IAID" "RequestBroadcast" "RouteMetric" "RouteTable" "DUIDType" "DUIDRawData" "IAID" "RequestBroadcast" "RouteMetric" "RouteTable"
"ListenPort" "SendRelease" "RapidCommit" "ListenPort" "SendRelease"
]) ])
(assertValueOneOf "UseDNS" boolValues) (assertValueOneOf "UseDNS" boolValues)
(assertValueOneOf "RoutesToDNS" boolValues) (assertValueOneOf "RoutesToDNS" boolValues)
@ -298,7 +298,6 @@ let
(assertInt "RouteTable") (assertInt "RouteTable")
(assertMinimum "RouteTable" 0) (assertMinimum "RouteTable" 0)
(assertValueOneOf "SendRelease" boolValues) (assertValueOneOf "SendRelease" boolValues)
(assertValueOneOf "RapidCommit" boolValues)
]; ];
checkDhcpV6 = checkUnitConfig "DHCPv6" [ checkDhcpV6 = checkUnitConfig "DHCPv6" [
@ -649,13 +648,20 @@ let
''; '';
}; };
# systemd.network.networks.*.dhcpConfig has been deprecated in favor of ….dhcpV4Config
# Produce a nice warning message so users know it is gone.
dhcpConfig = mkOption { dhcpConfig = mkOption {
visible = false;
apply = _: throw "The option `systemd.network.networks.*.dhcpConfig` can no longer be used since it's been removed. Please use `systemd.network.networks.*.dhcpV4Config` instead.";
};
dhcpV4Config = mkOption {
default = {}; default = {};
example = { UseDNS = true; UseRoutes = true; }; example = { UseDNS = true; UseRoutes = true; };
type = types.addCheck (types.attrsOf unitOption) checkDhcp; type = types.addCheck (types.attrsOf unitOption) checkDhcpV4;
description = '' description = ''
Each attribute in this set specifies an option in the Each attribute in this set specifies an option in the
<literal>[DHCP]</literal> section of the unit. See <literal>[DHCPv4]</literal> section of the unit. See
<citerefentry><refentrytitle>systemd.network</refentrytitle> <citerefentry><refentrytitle>systemd.network</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> for details. <manvolnum>5</manvolnum></citerefentry> for details.
''; '';
@ -998,9 +1004,9 @@ let
${concatStringsSep "\n" (map (s: "Tunnel=${s}") def.tunnel)} ${concatStringsSep "\n" (map (s: "Tunnel=${s}") def.tunnel)}
${concatStringsSep "\n" (map (s: "Xfrm=${s}") def.xfrm)} ${concatStringsSep "\n" (map (s: "Xfrm=${s}") def.xfrm)}
${optionalString (def.dhcpConfig != { }) '' ${optionalString (def.dhcpV4Config != { }) ''
[DHCP] [DHCPv4]
${attrsToSection def.dhcpConfig} ${attrsToSection def.dhcpV4Config}
''} ''}
${optionalString (def.dhcpV6Config != {}) '' ${optionalString (def.dhcpV6Config != {}) ''
@ -1084,6 +1090,7 @@ in
}; };
config = mkMerge [ config = mkMerge [
# .link units are honored by udev, no matter if systemd-networkd is enabled or not. # .link units are honored by udev, no matter if systemd-networkd is enabled or not.
{ {
systemd.network.units = mapAttrs' (n: v: nameValuePair "${n}.link" (linkToUnit n v)) cfg.links; systemd.network.units = mapAttrs' (n: v: nameValuePair "${n}.link" (linkToUnit n v)) cfg.links;

View file

@ -546,7 +546,7 @@ in
Note that this option might require to do some adjustments to the container configuration, Note that this option might require to do some adjustments to the container configuration,
e.g. you might want to set e.g. you might want to set
<varname>systemd.network.networks.$interface.dhcpConfig.ClientIdentifier</varname> to "mac" <varname>systemd.network.networks.$interface.dhcpV4Config.ClientIdentifier</varname> to "mac"
if you use <varname>macvlans</varname> option. if you use <varname>macvlans</varname> option.
This way dhcp client identifier will be stable between the container restarts. This way dhcp client identifier will be stable between the container restarts.