From ff021fcab404c95e52566bfca4207da9c0101e01 Mon Sep 17 00:00:00 2001 From: Chris Roberts Date: Thu, 20 Sep 2018 16:44:08 -0700 Subject: [PATCH] Update redhat change host name capability to support systemd Update capability to use guest inspection module for determining correct actions to execute. When systemd is in use restart the correct active service, either NetworkManager or networkd. Default to using the original service restart when systemd service is not found. --- plugins/guests/redhat/cap/change_host_name.rb | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/plugins/guests/redhat/cap/change_host_name.rb b/plugins/guests/redhat/cap/change_host_name.rb index ae0246015..5da660df0 100644 --- a/plugins/guests/redhat/cap/change_host_name.rb +++ b/plugins/guests/redhat/cap/change_host_name.rb @@ -2,6 +2,9 @@ module VagrantPlugins module GuestRedHat module Cap class ChangeHostName + + extend Vagrant::Util::GuestInspection + def self.change_host_name(machine, name) comm = machine.communicate @@ -10,34 +13,32 @@ module VagrantPlugins comm.sudo <<-EOH.gsub(/^ {14}/, '') # Update sysconfig sed -i 's/\\(HOSTNAME=\\).*/\\1#{name}/' /etc/sysconfig/network - # Update DNS sed -i 's/\\(DHCP_HOSTNAME=\\).*/\\1\"#{basename}\"/' /etc/sysconfig/network-scripts/ifcfg-* - # Set the hostname - use hostnamectl if available echo '#{name}' > /etc/hostname - if command -v hostnamectl; then - hostnamectl set-hostname --static '#{name}' - hostnamectl set-hostname --transient '#{name}' - else - hostname -F /etc/hostname - fi - - # Prepend ourselves to /etc/hosts grep -w '#{name}' /etc/hosts || { sed -i'' '1i 127.0.0.1\\t#{name}\\t#{basename}' /etc/hosts } - - # Restart network - if (test -f /usr/bin/systemctl && systemctl -q is-active NetworkManager.service); then - systemctl restart NetworkManager.service - elif test -f /etc/init.d/network; then - service network restart - else - printf "Could not restart the network to set the new hostname!\n" - exit 1 - fi EOH + + if hostnamectl?(comm) + comm.sudo("hostnamectl set-hostname --static '#{name}' ; " \ + "hostnamectl set-hostname --transient '#{name}'") + else + comm.sudo("hostname -F /etc/hostname") + end + + restart_command = "service network restart" + + if systemd? + if systemd_networkd?(comm) + restart_command = "systemctl restart systemd-networkd.service" + elsif systemd_controlled?(comm, "NetworkManager.service") + restart_command = "systemctl restart NetworkManager.service" + end + end + comm.sudo(restart_command) end end end