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
28
# File 'lib/vagrant/hostmaster/vm.rb', line 20

def add(options = {})
  options.merge! config_to_h
  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



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

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

#list(options = {}) ⇒ Object



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

def list(options = {})
  options.merge! config_to_h
  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



54
55
56
57
58
59
60
61
# File 'lib/vagrant/hostmaster/vm.rb', line 54

def remove(options = {})
  options.merge! config_to_h
  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



63
64
65
66
67
68
69
70
# File 'lib/vagrant/hostmaster/vm.rb', line 63

def update(options = {})
  options.merge! config_to_h
  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