From: Tom Hughes Date: Wed, 20 Mar 2019 09:21:58 +0000 (+0000) Subject: Handle interfaces with multiple addresses X-Git-Url: https://git.openstreetmap.org/chef.git/commitdiff_plain/4b42639cc5fa059adf6a16939f07f01252f63bae Handle interfaces with multiple addresses --- diff --git a/cookbooks/networking/recipes/default.rb b/cookbooks/networking/recipes/default.rb index 2c7ca3e01..aa86de7eb 100644 --- a/cookbooks/networking/recipes/default.rb +++ b/cookbooks/networking/recipes/default.rb @@ -56,41 +56,45 @@ node[:networking][:interfaces].each do |name, interface| node.normal[:networking][:interfaces][name][:network] = IPAddr.new(interface[:address]).mask(prefix) if node[:networking][:netplan] - if interface[:interface] =~ /^(.*)\.(\d+)$/ - deviceplan = netplan["network"]["vlans"][interface[:interface]] = { - "id" => Regexp.last_match(2).to_i, - "link" => Regexp.last_match(1), - "accept-ra" => false, - "addresses" => [], - "routes" => [] - } - elsif interface[:bond] - deviceplan = netplan["network"]["bonds"][interface[:interface]] = { - "accept-ra" => false, - "addresses" => [], - "routes" => [], - "interfaces" => interface[:bond][:slaves].to_a, - "parameters" => { - "mode" => interface[:bond][:mode] || "active-backup", - "primary" => interface[:bond][:slaves].first, - "mii-monitor-interval" => interface[:bond][:miimon] || 100, - "down-delay" => interface[:bond][:downdelay] || 200, - "up-delay" => interface[:bond][:updelay] || 200 - } + deviceplan = if interface[:interface] =~ /^(.*)\.(\d+)$/ + netplan["network"]["vlans"][interface[:interface]] ||= { + "id" => Regexp.last_match(2).to_i, + "link" => Regexp.last_match(1), + "accept-ra" => false, + "addresses" => [], + "routes" => [] + } + elsif interface[:interface] =~ /^bond\d+$/ + netplan["network"]["bonds"][interface[:interface]] ||= { + "accept-ra" => false, + "addresses" => [], + "routes" => [] + } + else + netplan["network"]["ethernets"][interface[:interface]] ||= { + "accept-ra" => false, + "addresses" => [], + "routes" => [] + } + end + + deviceplan["addresses"].push("#{interface[:address]}/#{prefix}") + + if interface[:bond] + deviceplan["interfaces"] = interface[:bond][:slaves].to_a + + deviceplan["parameters"] = { + "mode" => interface[:bond][:mode] || "active-backup", + "primary" => interface[:bond][:slaves].first, + "mii-monitor-interval" => interface[:bond][:miimon] || 100, + "down-delay" => interface[:bond][:downdelay] || 200, + "up-delay" => interface[:bond][:updelay] || 200 } deviceplan["parameters"]["transmit-hash-policy"] = interface[:bond][:xmithashpolicy] if interface[:bond][:xmithashpolicy] deviceplan["parameters"]["lacp-rate"] = interface[:bond][:lacprate] if interface[:bond][:lacprate] - else - deviceplan = netplan["network"]["ethernets"][interface[:interface]] = { - "accept-ra" => false, - "addresses" => [], - "routes" => [] - } end - deviceplan["addresses"].push("#{interface[:address]}/#{prefix}") - if interface[:gateway] if interface[:family] == "inet" default_route = "0.0.0.0/0"