lib/vagrant-hosts/provisioner.rb in vagrant-hosts-1.1.1 vs lib/vagrant-hosts/provisioner.rb in vagrant-hosts-1.1.2

- old
+ new

@@ -1,96 +1,20 @@ require 'vagrant' require 'tempfile' module VagrantHosts -class Provisioner < Vagrant.plugin('2', :provisioner) + class Provisioner < Vagrant.plugin('2', :provisioner) - def initialize(machine, config) - @machine, @config = machine, config - end - - def provision - # too tired to do this. detect target platform, select according provider, - # add entries that are specified in the config and are not on the client - - driver = Linux.new(@machine, @config) - driver.sync! - end - - class Linux - - # This has to be inside of this class, because otherwise the hostname mixin - # will create this class with a different superclass. It makes me sad. :( require 'vagrant-hosts/provisioner/hostname' - include VagrantHosts::Provisioner::Hostname + require 'vagrant-hosts/provisioner/linux' - def initialize(machine, config) @machine, @config = machine, config end - def sync! - upload_tmphosts - update_hosts + # @todo use guest capabilities instead of hardcoded provisioner provider + def provision + driver = Linux.new(@machine, @config) + driver.sync! end - - private - - def upload_tmphosts - cache = Tempfile.new('tmp-hosts') - cache.write(format_hosts) - cache.flush - @machine.communicate.upload(cache.path, '/tmp/hosts') - end - - def update_hosts - hostname = @machine.config.vm.hostname || @machine.name.to_s - change_host_name(hostname) - @machine.communicate.sudo('install -m 644 /tmp/hosts /etc/hosts') - end - - # Generates content appropriate for a linux hosts file - # - # @return [String] All hosts in the config joined into hosts records - def format_hosts - all_hosts.inject('') do |str, (address, aliases)| - str << "#{address} #{aliases.join(' ')}\n" - end - end - - def all_hosts - all_hosts = [] - - if @config.autoconfigure - all_hosts += vagrant_hosts - else - all_hosts += @config.hosts - end - - all_hosts.unshift(['127.0.0.1', ['localhost']]) - all_hosts.unshift(['127.0.1.1', [@machine.name]]) - end - - def vagrant_hosts - hosts = [] - env = @machine.env - names = env.machine_names - - # Assume that all VMs are using the current provider - provider = @machine.provider - - names.each do |name| - network_settings = env.machine(name, :virtualbox).config.vm.networks - hostname = env.machine(name, :virtualbox).config.vm.hostname - network_settings.each do |entry| - if entry[0] == :private_network - ipaddr = entry[1][:ip] - hosts << [ipaddr, [hostname, name]] - end - end - end - - hosts - end end -end end