From f13a37796c333069a7c9e08aa0b00c0643cf3ee0 Mon Sep 17 00:00:00 2001 From: Stephan Weinberger <47156030+beinvisible@users.noreply.github.com> Date: Fri, 8 Feb 2019 17:32:42 +0100 Subject: [PATCH] Manually configure master IP/network/netmask (#173) * Manually configure master IP/network/netmask Allow direct configuration of IP/network/netmask for DHCP/PXE. This is important for systems where you cannot control the naming of network interfaces and a DHCP server running on the wrong interface might have catastrophic consequences. * mention new config options in provision.conf and error messages --- provision/etc/provision.conf | 7 +++++++ provision/lib/Warewulf/Provision/Dhcp/Isc.pm | 8 ++++---- provision/lib/Warewulf/Provision/HostsFile.pm | 8 ++++---- provision/lib/Warewulf/Provision/Pxe.pm | 8 ++++---- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/provision/etc/provision.conf b/provision/etc/provision.conf index f6db1a4d..e0c6e5e0 100644 --- a/provision/etc/provision.conf +++ b/provision/etc/provision.conf @@ -3,6 +3,13 @@ # communicate with the nodes? network device = eth1 +# Alternatively configure the network addresses directly, e.g. if the +# network device name might change. This overrides the values derived +# from the 'network device' setting (if configured) one by one. +# ip address = 172.16.1.1 +# ip netmask = 255.255.0.0 +# ip network = 172.16.0.0 + # Which DHCP server implementation should be used? dhcp server = isc diff --git a/provision/lib/Warewulf/Provision/Dhcp/Isc.pm b/provision/lib/Warewulf/Provision/Dhcp/Isc.pm index 4b6de564..43d0d896 100644 --- a/provision/lib/Warewulf/Provision/Dhcp/Isc.pm +++ b/provision/lib/Warewulf/Provision/Dhcp/Isc.pm @@ -149,9 +149,9 @@ persist() my $netobj = Warewulf::Network->new(); my $config = Warewulf::Config->new("provision.conf"); my $devname = $config->get("network device"); - my $ipaddr = $netobj->ipaddr($devname); - my $netmask = $netobj->netmask($devname); - my $network = $netobj->network($devname); + my $ipaddr = $config->get("ip address") // $netobj->ipaddr($devname); + my $netmask = $config->get("ip netmask") // $netobj->netmask($devname); + my $network = $config->get("ip network") // $netobj->network($devname); my $config_template; my $dhcpd_contents; my %seen; @@ -168,7 +168,7 @@ persist() if (! $ipaddr or ! $netmask or ! $network) { - &wprint("Could not configure DHCP, check 'network device' configuration!\n"); + &wprint("Could not configure DHCP, check 'network device' or 'ip address/netmask/network' configuration!\n"); return undef; } diff --git a/provision/lib/Warewulf/Provision/HostsFile.pm b/provision/lib/Warewulf/Provision/HostsFile.pm index d3b9214d..be76eb69 100644 --- a/provision/lib/Warewulf/Provision/HostsFile.pm +++ b/provision/lib/Warewulf/Provision/HostsFile.pm @@ -93,12 +93,12 @@ generate() my $netdev = $config->get("network device"); my $defdomain = $config->get("use localdomain") || "yes"; - my $master_ipaddr = $netobj->ipaddr($netdev); - my $master_netmask = $netobj->netmask($netdev); - my $master_network = $netobj->network($netdev); + my $master_ipaddr = $config->get("ip address") // $netobj->ipaddr($netdev); + my $master_network = $config->get("ip network") // $netobj->network($netdev); + my $master_netmask = $config->get("ip netmask") // $netobj->netmask($netdev); if (! $master_ipaddr or ! $master_netmask or ! $master_network) { - &wprint("Could not generate hostfile, check 'network device' configuration!\n"); + &wprint("Could not generate hostfile, check 'network device' or 'ip address/netmask/network' configuration!\n"); return undef; } diff --git a/provision/lib/Warewulf/Provision/Pxe.pm b/provision/lib/Warewulf/Provision/Pxe.pm index 04ea1729..d8f08cfb 100644 --- a/provision/lib/Warewulf/Provision/Pxe.pm +++ b/provision/lib/Warewulf/Provision/Pxe.pm @@ -136,12 +136,12 @@ update() my $db = Warewulf::DataStore->new(); my $config = Warewulf::Config->new("provision.conf"); my $devname = $config->get("network device"); - my $master_ipaddr = $netobj->ipaddr($devname); - my $master_network = $netobj->network($devname); - my $master_netmask = $netobj->netmask($devname); + my $master_ipaddr = $config->get("ip address") // $netobj->ipaddr($devname); + my $master_network = $config->get("ip network") // $netobj->network($devname); + my $master_netmask = $config->get("ip netmask") // $netobj->netmask($devname); if (! $master_ipaddr) { - &wprint("Could not generate PXE configurations, check 'network device' configuration!\n"); + &wprint("Could not generate PXE configurations, check 'network device' or 'ip address/netmask/network' configuration!\n"); return undef; }