From 5104d075bdeb8670db7aff6c8247506e6ca28a63 Mon Sep 17 00:00:00 2001 From: sophia Date: Mon, 6 Apr 2020 10:53:22 -0400 Subject: [PATCH] Add CentOS guest plugin --- plugins/guests/centos/cap/flavor.rb | 24 ++++++++++++ plugins/guests/centos/guest.rb | 9 +++++ plugins/guests/centos/plugin.rb | 20 ++++++++++ plugins/guests/redhat/cap/flavor.rb | 8 +--- .../plugins/guests/centos/cap/flavor_test.rb | 37 +++++++++++++++++++ .../plugins/guests/redhat/cap/flavor_test.rb | 6 +-- 6 files changed, 94 insertions(+), 10 deletions(-) create mode 100644 plugins/guests/centos/cap/flavor.rb create mode 100644 plugins/guests/centos/guest.rb create mode 100644 plugins/guests/centos/plugin.rb create mode 100644 test/unit/plugins/guests/centos/cap/flavor_test.rb diff --git a/plugins/guests/centos/cap/flavor.rb b/plugins/guests/centos/cap/flavor.rb new file mode 100644 index 000000000..dfaeb3263 --- /dev/null +++ b/plugins/guests/centos/cap/flavor.rb @@ -0,0 +1,24 @@ +module VagrantPlugins + module GuestCentos + module Cap + class Flavor + def self.flavor(machine) + # Read the version file + output = "" + machine.communicate.sudo("cat /etc/centos-release") do |_, data| + output = data + end + + # Detect various flavors we care about + if output =~ /(CentOS)( .+)? 7/i + return :centos_7 + elsif output =~ /(CentOS)( .+)? 8/i + return :centos_8 + else + return :centos + end + end + end + end + end +end diff --git a/plugins/guests/centos/guest.rb b/plugins/guests/centos/guest.rb new file mode 100644 index 000000000..f62a6bd59 --- /dev/null +++ b/plugins/guests/centos/guest.rb @@ -0,0 +1,9 @@ +module VagrantPlugins + module GuestCentos + class Guest < Vagrant.plugin("2", :guest) + def detect?(machine) + machine.communicate.test("cat /etc/centos-release") + end + end + end +end diff --git a/plugins/guests/centos/plugin.rb b/plugins/guests/centos/plugin.rb new file mode 100644 index 000000000..fc07dafd6 --- /dev/null +++ b/plugins/guests/centos/plugin.rb @@ -0,0 +1,20 @@ +require "vagrant" + +module VagrantPlugins + module GuestCentos + class Plugin < Vagrant.plugin("2") + name "CentOS guest" + description "CentOS guest support." + + guest(:centos, :redhat) do + require_relative "guest" + Guest + end + + guest_capability(:centos, :flavor) do + require_relative "cap/flavor" + Cap::Flavor + end + end + end +end diff --git a/plugins/guests/redhat/cap/flavor.rb b/plugins/guests/redhat/cap/flavor.rb index b1187bd09..bfe13d377 100644 --- a/plugins/guests/redhat/cap/flavor.rb +++ b/plugins/guests/redhat/cap/flavor.rb @@ -10,13 +10,7 @@ module VagrantPlugins end # Detect various flavors we care about - if output =~ /(CentOS)( .+)? 7/i - return :centos_7 - elsif output =~ /(CentOS)( .+)? 8/i - return :centos_8 - elsif output =~ /(CentOS)( .+)?/i - return :centos - elsif output =~ /(Red Hat Enterprise|Scientific|Cloud|Virtuozzo)\s*Linux( .+)? release 7/i + if output =~ /(Red Hat Enterprise|Scientific|Cloud|Virtuozzo)\s*Linux( .+)? release 7/i return :rhel_7 elsif output =~ /(Red Hat Enterprise|Scientific|Cloud|Virtuozzo)\s*Linux( .+)? release 8/i return :rhel_8 diff --git a/test/unit/plugins/guests/centos/cap/flavor_test.rb b/test/unit/plugins/guests/centos/cap/flavor_test.rb new file mode 100644 index 000000000..b3bc89cb6 --- /dev/null +++ b/test/unit/plugins/guests/centos/cap/flavor_test.rb @@ -0,0 +1,37 @@ +require_relative "../../../../base" + +describe "VagrantPlugins::GuestCentos::Cap::Flavor" do + let(:caps) do + VagrantPlugins::GuestCentos::Plugin + .components + .guest_capabilities[:centos] + 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 ".flavor" do + let(:cap) { caps.get(:flavor) } + + { + "CentOS Linux 2.4 release 7" => :centos_7, + "CentOS Linux release 8.1.1911 (Core)" => :centos_8, + + "CentOS" => :centos, + "banana" => :centos, + }.each do |str, expected| + it "returns #{expected} for #{str}" do + comm.stub_command("cat /etc/centos-release", stdout: str) + expect(cap.flavor(machine)).to be(expected) + end + end + end +end diff --git a/test/unit/plugins/guests/redhat/cap/flavor_test.rb b/test/unit/plugins/guests/redhat/cap/flavor_test.rb index 0aa26943e..1676d54f2 100644 --- a/test/unit/plugins/guests/redhat/cap/flavor_test.rb +++ b/test/unit/plugins/guests/redhat/cap/flavor_test.rb @@ -22,15 +22,15 @@ describe "VagrantPlugins::GuestRedHat::Cap::Flavor" do let(:cap) { caps.get(:flavor) } { - "CentOS Linux 2.4 release 7" => :centos_7, + "Red Hat Enterprise Linux 2.4 release 7" => :rhel_7, "Red Hat Enterprise Linux release 7" => :rhel_7, "Scientific Linux release 7" => :rhel_7, "CloudLinux release 7.2 (Valeri Kubasov)" => :rhel_7, - "CentOS Linux release 8.1.1911 (Core)" => :centos_8, + "CloudLinux release 8.1.1911 (Valeri Kubasov)" => :rhel_8, "Red Hat Enterprise Linux release 8" => :rhel_8, - "CentOS" => :centos, + "Red Hat Enterprise Linux" => :rhel, "RHEL 6" => :rhel, "banana" => :rhel, }.each do |str, expected|