Class: Vagrant::Action::VM::SaneDefaults

Inherits:
Object
  • Object
show all
Defined in:
lib/vagrant/action/vm/sane_defaults.rb

Overview

This middleware enforces some sane defaults on the virtualbox VM which help with performance, stability, and in some cases behavior.

Instance Method Summary collapse

Constructor Details

#initialize(app, env) ⇒ SaneDefaults

Returns a new instance of SaneDefaults.

[View source]

10
11
12
13
# File 'lib/vagrant/action/vm/sane_defaults.rb', line 10

def initialize(app, env)
  @logger = Log4r::Logger.new("vagrant::action::vm::sanedefaults")
  @app = app
end

Instance Method Details

#call(env) ⇒ Object

[View source]

15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/vagrant/action/vm/sane_defaults.rb', line 15

def call(env)
  # Set the env on an instance variable so we can access it in
  # helpers.
  @env = env

  # Enable the host IO cache on the sata controller. Note that
  # if this fails then its not a big deal, so we don't raise any
  # errors. The Host IO cache vastly improves disk IO performance
  # for VMs.
  command = [
    "storagectl", env[:vm].uuid,
    "--name", "SATA Controller",
    "--hostiocache", "on"
  ]
  attempt_and_log(command, "Enabling the Host I/O cache on the SATA controller...")

  enable_dns_proxy = true
  begin
    contents = File.read("/etc/resolv.conf")

    if contents =~ /^nameserver 127\.0\.(0|1)\.1$/
      # The use of both natdnsproxy and natdnshostresolver break on
      # Ubuntu 12.04 that uses resolvconf with localhost. When used
      # VirtualBox will give the client dns server 10.0.2.3, while
      # not binding to that address itself. Therefore disable this
      # feature if host uses the resolvconf server 127.0.0.1
      @logger.info("Disabling DNS proxy since resolv.conf contains 127.0.0.1")
      enable_dns_proxy = false
    end
  rescue Errno::ENOENT; end

  # Enable/disable the NAT DNS proxy as necessary
  if enable_dns_proxy
    command = [
      "modifyvm", env[:vm].uuid,
      "--natdnsproxy1", "on"
    ]
    attempt_and_log(command, "Enable the NAT DNS proxy on adapter 1...")
  else
    command = [ "modifyvm", env[:vm].uuid, "--natdnsproxy1", "off" ]
    attempt_and_log(command, "Disable the NAT DNS proxy on adapter 1...")
    command = [ "modifyvm", env[:vm].uuid, "--natdnshostresolver1", "off" ]
    attempt_and_log(command, "Disable the NAT DNS resolver on adapter 1...")
  end

  @app.call(env)
end