From 987ab17f4ddfbf5d07c777025c2b45478893aade Mon Sep 17 00:00:00 2001 From: sophia Date: Wed, 25 Mar 2020 12:20:53 -0400 Subject: [PATCH] Add suport for SMB on redhat --- plugins/guests/redhat/cap/smb.rb | 20 ++++++++++ plugins/guests/redhat/plugin.rb | 5 +++ .../plugins/guests/redhat/cap/smb_test.rb | 38 +++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 plugins/guests/redhat/cap/smb.rb create mode 100644 test/unit/plugins/guests/redhat/cap/smb_test.rb diff --git a/plugins/guests/redhat/cap/smb.rb b/plugins/guests/redhat/cap/smb.rb new file mode 100644 index 000000000..84c39c911 --- /dev/null +++ b/plugins/guests/redhat/cap/smb.rb @@ -0,0 +1,20 @@ +module VagrantPlugins + module GuestRedHat + module Cap + class SMB + def self.smb_install(machine) + comm = machine.communicate + if !comm.test("test -f /sbin/mount.cifs") + comm.sudo <<-EOH.gsub(/^ {14}/, '') + if command -v dnf; then + dnf -y install cifs-utils + else + yum -y install cifs-utils + fi + EOH + end + end + end + end + end +end diff --git a/plugins/guests/redhat/plugin.rb b/plugins/guests/redhat/plugin.rb index 8ea37baf4..2a6440d12 100644 --- a/plugins/guests/redhat/plugin.rb +++ b/plugins/guests/redhat/plugin.rb @@ -40,6 +40,11 @@ module VagrantPlugins require_relative "cap/rsync" Cap::RSync end + + guest_capability(:redhat, :smb_install) do + require_relative "cap/smb" + Cap::SMB + end end end end diff --git a/test/unit/plugins/guests/redhat/cap/smb_test.rb b/test/unit/plugins/guests/redhat/cap/smb_test.rb new file mode 100644 index 000000000..ff008f3a7 --- /dev/null +++ b/test/unit/plugins/guests/redhat/cap/smb_test.rb @@ -0,0 +1,38 @@ +require_relative "../../../../base" + +describe "VagrantPlugins::GuestRedHat::Cap::SMB" do + let(:described_class) do + VagrantPlugins::GuestRedHat::Plugin + .components + .guest_capabilities[:redhat] + .get(:smb_install) + end + + let(:machine) { double("machine") } + let(:comm) { VagrantTests::DummyCommunicator::Communicator.new(machine) } + + before do + allow(machine).to receive(:communicate).and_return(comm) + end + + after do + comm.verify_expectations! + end + + describe ".smb_install" do + it "installs smb when /sbin/mount.cifs does not exist" do + comm.stub_command("test -f /sbin/mount.cifs", exit_code: 1) + described_class.smb_install(machine) + + expect(comm.received_commands[1]).to match(/if command -v dnf; then/) + expect(comm.received_commands[1]).to match(/dnf -y install cifs-utils/) + end + + it "does not install smb when /sbin/mount.cifs exists" do + comm.stub_command("test -f /sbin/mount.cifs", exit_code: 0) + described_class.smb_install(machine) + + expect(comm.received_commands.join("")).to_not match(/update/) + end + end +end