Class: Vagrant::Hostmaster::VM

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/vagrant/hostmaster/vm.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(vm) ⇒ VM

Returns a new instance of VM.



16
17
18
# File 'lib/vagrant/hostmaster/vm.rb', line 16

def initialize(vm)
  @vm = vm
end

Class Method Details

.hosts_pathObject



11
12
13
# File 'lib/vagrant/hostmaster/vm.rb', line 11

def hosts_path
  Util::Platform.windows? ? "#{ENV['SYSTEMROOT']}/system32/drivers/etc/hosts" : "/etc/hosts"
end

Instance Method Details

#add(options = {}) ⇒ Object



20
21
22
23
24
25
26
27
# File 'lib/vagrant/hostmaster/vm.rb', line 20

def add(options = {})
  if process_local?(options)
    env.ui.info("Adding host entry for #{name} VM. Administrator privileges will be required...") unless options[:quiet]
    sudo add_command
  end

  with_other_vms { |vm| channel.sudo vm.add_command(:uuid => uuid, :hosts_path => hosts_path) } if process_guests?(options)
end

#hosts_pathObject



29
30
31
32
# File 'lib/vagrant/hostmaster/vm.rb', line 29

def hosts_path
  # TODO: if windows guests are supported, this will need to be smarter
  "/etc/hosts"
end

#list(options = {}) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/vagrant/hostmaster/vm.rb', line 34

def list(options = {})
  if process_local?(options)
    output = `#{list_command}`.chomp
    env.ui.info("[local] #{output}\n\n", :prefix => false) unless output.empty?
  end

  if process_guests?(options)
    entries = ""
    with_other_vms do |vm|
      channel.execute(vm.list_command(:uuid => uuid, :hosts_path => hosts_path), :error_check => false) do |type, data|
        entries << data if type == :stdout
      end
    end
    entries = entries.split($/).collect { |entry| "[#{name}] #{entry}" }.join("\n")
    env.ui.info("#{entries}\n\n", :prefix => false) unless entries.empty?
  end
end

#remove(options = {}) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/vagrant/hostmaster/vm.rb', line 52

def remove(options = {})
  if process_local?(options)
    env.ui.info("Removing host entry for #{name} VM. Administrator privileges will be required...") unless options[:quiet]
    sudo remove_command
  end
  with_other_vms { |vm| channel.sudo vm.remove_command(:uuid => uuid, :hosts_path => hosts_path) } if process_guests?(options)
end

#update(options = {}) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/vagrant/hostmaster/vm.rb', line 60

def update(options = {})
  if process_local?(options)
    env.ui.info("Updating host entry for #{name} VM. Administrator privileges will be required...") unless options[:quiet]
    sudo(remove_command) && sudo(add_command)
  end
  with_other_vms { |vm| channel.sudo(vm.remove_command(:uuid => uuid, :hosts_path => hosts_path)) && channel.sudo(vm.add_command(:uuid => uuid, :hosts_path => hosts_path)) } if process_guests?(options)
end