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