Update amazonlinux guest network configuration

Adds suppport for configuring networking on amazonlinux when
network devices are handled by networkd. When not handled by
networkd, falls back to using the redhat capability.
This commit is contained in:
Chris Roberts 2025-03-20 12:49:00 -07:00
parent d21f17674c
commit 78ec3f2ea9
No known key found for this signature in database
5 changed files with 82 additions and 6 deletions

View file

@ -0,0 +1,26 @@
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1
require_relative "../../debian/cap/configure_networks"
require_relative "../../redhat/cap/configure_networks"
module VagrantPlugins
module GuestAmazon
module Cap
class ConfigureNetworks
extend Vagrant::Util::GuestInspection::Linux
def self.configure_networks(machine, networks)
# If the guest is using networkd, call the debian capability
# as it will handle networkd. Otherwise, fallback to using
# the RHEL capability.
if systemd_networkd?(machine.communicate)
VagrantPlugins::GuestDebian::Cap::ConfigureNetworks.configure_networks(machine, networks)
else
VagrantPlugins::GuestRedHat::Cap::ConfigureNetworks.configure_networks(machine, networks)
end
end
end
end
end
end

View file

@ -18,6 +18,11 @@ module VagrantPlugins
require_relative "cap/flavor"
Cap::Flavor
end
guest_capability(:amazon, :configure_networks) do
require_relative "cap/configure_networks"
Cap::ConfigureNetworks
end
end
end
end

View file

@ -68,7 +68,7 @@ module VagrantPlugins
renderer = "networkd"
ethernets.keys.each do |k|
if nm_controlled?(comm, k)
render = "NetworkManager"
renderer = "NetworkManager"
if !nmcli?(comm)
raise Vagrant::Errors::NetworkManagerNotInstalled, device: k
end
@ -94,7 +94,6 @@ module VagrantPlugins
# Configure guest networking using networkd
def self.configure_networkd(machine, interfaces, comm, networks)
root_device = interfaces.first
networks.each do |network|
dev_name = interfaces[network[:interface]]
net_conf = []

View file

@ -0,0 +1,46 @@
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1
require_relative "../../../../base"
describe "VagrantPlugins::GuestAmazon::Cap::ConfigureNetworks" do
let(:caps) do
VagrantPlugins::GuestAmazon::Plugin
.components
.guest_capabilities[:amazon]
end
let(:machine) { double("machine", communicate: communicator) }
let(:communicator) { double("communicator") }
let(:networks) { double("networks") }
describe ".configure_networks" do
let(:cap) { caps.get(:configure_networks) }
before do
allow(cap).to receive(:systemd_networkd?).
with(communicator).and_return(is_networkd)
end
context "when guest is using networkd" do
let(:is_networkd) { true }
it "should call the debian capability" do
expect(VagrantPlugins::GuestDebian::Cap::ConfigureNetworks).
to receive(:configure_networks).with(machine, networks)
cap.configure_networks(machine, networks)
end
end
context "when guest is not using networkd" do
let(:is_networkd) { false }
it "should call the redhat capability" do
expect(VagrantPlugins::GuestRedHat::Cap::ConfigureNetworks).
to receive(:configure_networks).with(machine, networks)
cap.configure_networks(machine, networks)
end
end
end
end

View file

@ -27,7 +27,7 @@ describe VagrantPlugins::HostDarwin::Cap::FsISO do
it "builds an iso" do
expect(Vagrant::Util::Subprocess).to receive(:execute).with(
"hdiutil", "makehybrid", "-hfs", "-iso", "-joliet", "-ov", "-o", /.iso/, /\/foo\/src/
"hdiutil", "makehybrid", "-iso", "-joliet", "-ov", "-o", /.iso/, /\/foo\/src/
).and_return(double(exit_code: 0))
expect(FileUtils).to receive(:mkdir_p).with(Pathname.new(file_destination).dirname)
@ -37,7 +37,7 @@ describe VagrantPlugins::HostDarwin::Cap::FsISO do
it "builds an iso with volume_id" do
expect(Vagrant::Util::Subprocess).to receive(:execute).with(
"hdiutil", "makehybrid", "-hfs", "-iso", "-joliet", "-ov", "-default-volume-name", "cidata", "-o", /.iso/, /\/foo\/src/
"hdiutil", "makehybrid", "-iso", "-joliet", "-ov", "-default-volume-name", "cidata", "-o", /.iso/, /\/foo\/src/
).and_return(double(exit_code: 0))
expect(FileUtils).to receive(:mkdir_p).with(Pathname.new(file_destination).dirname)
@ -47,7 +47,7 @@ describe VagrantPlugins::HostDarwin::Cap::FsISO do
it "builds an iso given a file destination without an extension" do
expect(Vagrant::Util::Subprocess).to receive(:execute).with(
"hdiutil", "makehybrid", "-hfs", "-iso", "-joliet", "-ov", "-o", /.iso/, /\/foo\/src/
"hdiutil", "makehybrid", "-iso", "-joliet", "-ov", "-o", /.iso/, /\/foo\/src/
).and_return(double(exit_code: 0))
expect(FileUtils).to receive(:mkdir_p).with(Pathname.new("/woo/out_dir"))
@ -61,7 +61,7 @@ describe VagrantPlugins::HostDarwin::Cap::FsISO do
allow(file_destination).to receive(:path).and_return(file_destination)
allow(file_destination).to receive(:delete)
expect(Vagrant::Util::Subprocess).to receive(:execute).with(
"hdiutil", "makehybrid", "-hfs", "-iso", "-joliet", "-ov", "-o", /.iso/, /\/foo\/src/
"hdiutil", "makehybrid", "-iso", "-joliet", "-ov", "-o", /.iso/, /\/foo\/src/
).and_return(double(exit_code: 0))
# Should create a directory wherever Tempfile creates files by default
expect(FileUtils).to receive(:mkdir_p).with(Pathname.new(file_destination).dirname)