From 0979cfcf4c6bb2250543f32434eb5ba716b85fc0 Mon Sep 17 00:00:00 2001 From: sophia Date: Mon, 26 Oct 2020 16:50:38 -0500 Subject: [PATCH 1/2] Don't use hostnamectl if not on system --- plugins/guests/suse/cap/change_host_name.rb | 43 ++++++++++++++----- .../guests/suse/cap/change_host_name_test.rb | 15 +++++++ 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/plugins/guests/suse/cap/change_host_name.rb b/plugins/guests/suse/cap/change_host_name.rb index a5452c00c..912f79505 100644 --- a/plugins/guests/suse/cap/change_host_name.rb +++ b/plugins/guests/suse/cap/change_host_name.rb @@ -1,22 +1,43 @@ -require_relative '../../linux/cap/change_host_name' +require 'vagrant/util/guest_hosts' +require 'vagrant/util/guest_inspection' module VagrantPlugins module GuestSUSE module Cap class ChangeHostName - extend VagrantPlugins::GuestLinux::Cap::ChangeHostName - def self.change_host_name?(comm, name) - basename = name.split(".", 2)[0] - !comm.test("test \"$(hostnamectl --static status)\" = \"#{basename}\"", sudo: false) - end + extend Vagrant::Util::GuestInspection::Linux + extend Vagrant::Util::GuestHosts::Linux - def self.change_name_command(name) + def self.change_host_name(machine, name) + comm = machine.communicate basename = name.split(".", 2)[0] - return <<-EOH.gsub(/^ {14}/, "") - hostnamectl set-hostname '#{basename}' - echo #{name} > /etc/HOSTNAME - EOH + + network_with_hostname = machine.config.vm.networks.map {|_, c| c if c[:hostname] }.compact[0] + if network_with_hostname + replace_host(comm, name, network_with_hostname[:ip]) + else + add_hostname_to_loopback_interface(comm, name) + end + + if hostnamectl?(comm) + if !comm.test("test \"$(hostnamectl --static status)\" = \"#{basename}\"", sudo: false) + cmd = <<-EOH.gsub(/^ {14}/, "") + hostnamectl set-hostname '#{basename}' + echo #{name} > /etc/HOSTNAME + EOH + comm.sudo(cmd) + end + else + if !comm.test("hostname -f | grep '^#{name}$'", sudo: false) + cmd = <<-EOH.gsub(/^ {14}/, "") + echo #{name} > /etc/HOSTNAME + hostname '#{basename}' + EOH + comm.sudo(cmd) + end + end + end end end diff --git a/test/unit/plugins/guests/suse/cap/change_host_name_test.rb b/test/unit/plugins/guests/suse/cap/change_host_name_test.rb index 6cae24d0f..faf3b11ea 100644 --- a/test/unit/plugins/guests/suse/cap/change_host_name_test.rb +++ b/test/unit/plugins/guests/suse/cap/change_host_name_test.rb @@ -15,6 +15,7 @@ describe "VagrantPlugins::GuestSUSE::Cap::ChangeHostName" do before do allow(machine).to receive(:communicate).and_return(comm) + allow(cap).to receive(:hostnamectl?).and_return(true) end after do @@ -45,6 +46,20 @@ describe "VagrantPlugins::GuestSUSE::Cap::ChangeHostName" do cap.change_host_name(machine, name) expect(comm.received_commands.size).to eq(3) end + + context "hostnamectl is not present" do + before do + allow(cap).to receive(:hostnamectl?).and_return(false) + end + + it "sets the hostname" do + comm.stub_command("hostname -f | grep '^#{name}$'", exit_code: 1) + + cap.change_host_name(machine, name) + expect(comm.received_commands[2]).to match(/echo #{name} > \/etc\/HOSTNAME/) + expect(comm.received_commands[2]).to match(/hostname '#{basename}'/) + end + end end end end From 12d5b56f145632b7c72a1d7ae9071f7e39821194 Mon Sep 17 00:00:00 2001 From: sophia Date: Wed, 28 Oct 2020 12:35:36 -0500 Subject: [PATCH 2/2] Fix indentation --- plugins/guests/suse/cap/change_host_name.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/guests/suse/cap/change_host_name.rb b/plugins/guests/suse/cap/change_host_name.rb index 912f79505..9cd75d036 100644 --- a/plugins/guests/suse/cap/change_host_name.rb +++ b/plugins/guests/suse/cap/change_host_name.rb @@ -29,13 +29,13 @@ module VagrantPlugins comm.sudo(cmd) end else - if !comm.test("hostname -f | grep '^#{name}$'", sudo: false) - cmd = <<-EOH.gsub(/^ {14}/, "") - echo #{name} > /etc/HOSTNAME - hostname '#{basename}' - EOH - comm.sudo(cmd) - end + if !comm.test("hostname -f | grep '^#{name}$'", sudo: false) + cmd = <<-EOH.gsub(/^ {14}/, "") + echo #{name} > /etc/HOSTNAME + hostname '#{basename}' + EOH + comm.sudo(cmd) + end end end