Created
March 4, 2014 18:08
-
-
Save israelshirk/9352200 to your computer and use it in GitHub Desktop.
/Applications/Vagrant/embedded/gems/gems/vagrant-1.3.5/plugins/guests/redhat/cap/configure_networks.rb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| require "set" | |
| require "tempfile" | |
| require "vagrant/util/retryable" | |
| require "vagrant/util/template_renderer" | |
| module VagrantPlugins | |
| module GuestRedHat | |
| module Cap | |
| class ConfigureNetworks | |
| extend Vagrant::Util::Retryable | |
| include Vagrant::Util | |
| def self.configure_networks(machine, networks) | |
| network_scripts_dir = machine.guest.capability("network_scripts_dir") | |
| # Accumulate the configurations to add to the interfaces file as | |
| # well as what interfaces we're actually configuring since we use that | |
| # later. | |
| interfaces = Set.new | |
| networks.each do |network| | |
| interfaces.add(network[:interface]) | |
| # Remove any previous vagrant configuration in this network interface's | |
| # configuration files. | |
| machine.communicate.sudo("touch #{network_scripts_dir}/ifcfg-eth#{network[:interface]}") | |
| machine.communicate.sudo("sed -e '/^#VAGRANT-BEGIN/,/^#VAGRANT-END/ d' #{network_scripts_dir}/ifcfg-eth#{network[:interface]} > /tmp/vagrant-ifcfg-eth#{network[:interface]}") | |
| machine.communicate.sudo("cat /tmp/vagrant-ifcfg-eth#{network[:interface]} > #{network_scripts_dir}/ifcfg-eth#{network[:interface]}") | |
| machine.communicate.sudo("rm /tmp/vagrant-ifcfg-eth#{network[:interface]}") | |
| # Render and upload the network entry file to a deterministic | |
| # temporary location. | |
| entry = TemplateRenderer.render("guests/redhat/network_#{network[:type]}", | |
| :options => network) | |
| temp = Tempfile.new("vagrant") | |
| temp.binmode | |
| temp.write(entry) | |
| temp.close | |
| machine.communicate.upload(temp.path, "/tmp/vagrant-network-entry_#{network[:interface]}") | |
| end | |
| # Bring down all the interfaces we're reconfiguring. By bringing down | |
| # each specifically, we avoid reconfiguring eth0 (the NAT interface) so | |
| # SSH never dies. | |
| interfaces.each do |interface| | |
| retryable(:on => Vagrant::Errors::VagrantError, :tries => 3, :sleep => 2) do | |
| machine.communicate.sudo("/sbin/ifdown eth#{interface} 2> /dev/null", :error_check => false) | |
| machine.communicate.sudo("cat /tmp/vagrant-network-entry_#{interface} >> #{network_scripts_dir}/ifcfg-eth#{interface}") | |
| machine.communicate.sudo("ARPCHECK=no /sbin/ifup eth#{interface} 2> /dev/null") | |
| end | |
| machine.communicate.sudo("rm /tmp/vagrant-network-entry_#{interface}") | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment