2013-12-05 15:01:44 +00:00
# -*- coding: utf-8 -*-
2013-05-14 20:22:19 +00:00
require " tempfile "
require " vagrant/util/template_renderer "
2013-04-04 18:39:58 +00:00
module VagrantPlugins
module GuestArch
module Cap
class ConfigureNetworks
2013-05-22 15:29:58 +00:00
include Vagrant :: Util
2013-04-04 18:39:58 +00:00
def self . configure_networks ( machine , networks )
networks . each do | network |
entry = TemplateRenderer . render ( " guests/arch/network_ #{ network [ :type ] } " ,
:options = > network )
temp = Tempfile . new ( " vagrant " )
temp . binmode
temp . write ( entry )
temp . close
machine . communicate . upload ( temp . path , " /tmp/vagrant_network " )
2013-12-07 20:59:40 +00:00
machine . communicate . sudo ( " ln -sf /dev/null /etc/udev/rules.d/80-net-name-slot.rules " )
2014-03-26 01:44:42 +00:00
machine . communicate . sudo ( " udevadm control --reload " )
2013-05-23 21:16:26 +00:00
machine . communicate . sudo ( " mv /tmp/vagrant_network /etc/netctl/eth #{ network [ :interface ] } " )
2013-12-05 14:16:59 +00:00
2013-12-05 15:01:44 +00:00
# Only consider nth line of sed's output below. There's always an
# offset of two lines in the below sed command given the current
# interface number -> 1: lo, 2: nat device,
snth = network [ :interface ] + 2
# A hack not to rely on udev rule 80-net-name-slot.rules masking
# (ln -sf /dev/null /etc/udev/80-net-name-slot.rules).
2013-12-05 14:16:59 +00:00
# I assume this to be the most portable solution because
# otherwise we would need to rely on the Virtual Machine implementation
# to provide details on the configured interfaces, e.g mac address
2013-12-05 15:01:44 +00:00
# to write a custom udev rule. Templating the netcfg files and
# replacing the correct interface name within ruby seems more
# complicted too (I'm far from being a ruby expert though).
machine . communicate . sudo ( " sed -i \" s/eth #{ network [ :interface ] } /`ip link | sed -n 's/.*: \\ s \\ (.* \\ ): <.*/ \\ 1/p' | sed -n #{ snth } p`/g \" /etc/netctl/eth #{ network [ :interface ] } " )
2013-12-07 20:22:19 +00:00
machine . communicate . sudo ( " ip link set eth #{ network [ :interface ] } down " )
2013-05-23 21:16:26 +00:00
machine . communicate . sudo ( " netctl start eth #{ network [ :interface ] } " )
2013-04-04 18:39:58 +00:00
end
end
end
end
end
end