vagrant 0.9.4 → 0.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +17 -0
- data/lib/vagrant/action/vm/network.rb +55 -22
- data/lib/vagrant/action/vm/nfs.rb +1 -0
- data/lib/vagrant/driver/virtualbox_4_0.rb +4 -0
- data/lib/vagrant/driver/virtualbox_4_1.rb +4 -0
- data/lib/vagrant/guest/freebsd.rb +12 -14
- data/lib/vagrant/guest/linux.rb +1 -1
- data/lib/vagrant/guest/redhat.rb +1 -1
- data/lib/vagrant/hosts/bsd.rb +2 -1
- data/lib/vagrant/hosts/freebsd.rb +15 -0
- data/lib/vagrant/provisioners/puppet_server.rb +18 -7
- data/lib/vagrant/version.rb +1 -1
- data/templates/locales/en.yml +9 -1
- data/templates/nfs/exports_freebsd.erb +5 -0
- metadata +5 -4
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
## 0.9.5 (February 5, 2012)
|
2
|
+
|
3
|
+
- Fix crashing case when all network options are `:auto_config false`.
|
4
|
+
[GH-689]
|
5
|
+
- Type of network adapter can be specified with `:nic_type`. [GH-690]
|
6
|
+
- The NFS version can be specified with the `:nfs_version` option
|
7
|
+
on shared folders. [GH-557]
|
8
|
+
- Greatly improved FreeBSD guest and host support. [GH-695]
|
9
|
+
- Fix instability with RedHat guests and host only and bridged networks.
|
10
|
+
[GH-698]
|
11
|
+
- When using bridged networking, only list the network interfaces
|
12
|
+
that are up as choices. [GH-701]
|
13
|
+
- More intelligent handling of the `certname` option for puppet
|
14
|
+
server. [GH-702]
|
15
|
+
- You may now explicitly set the network to bridge to in the Vagrantfile
|
16
|
+
using the `:bridge` parameter. [GH-655]
|
17
|
+
|
1
18
|
## 0.9.4 (January 28, 2012)
|
2
19
|
|
3
20
|
- Important internal changes to middlewares that make plugin developer's
|
@@ -64,7 +64,7 @@ module Vagrant
|
|
64
64
|
# setup until after it is booted.
|
65
65
|
@app.call(env)
|
66
66
|
|
67
|
-
if !adapters.empty?
|
67
|
+
if !adapters.empty? && !networks.empty?
|
68
68
|
# Determine the interface numbers for the guest.
|
69
69
|
assign_interface_numbers(networks, adapters)
|
70
70
|
|
@@ -313,38 +313,70 @@ module Vagrant
|
|
313
313
|
return {
|
314
314
|
:adapter => nil,
|
315
315
|
:mac => nil,
|
316
|
+
:bridge => nil,
|
316
317
|
:auto_config => true
|
317
318
|
}.merge(options)
|
318
319
|
end
|
319
320
|
|
320
321
|
def bridged_adapter(config)
|
322
|
+
# Find the bridged interfaces that are available
|
321
323
|
bridgedifs = @env[:vm].driver.read_bridged_interfaces
|
324
|
+
bridgedifs.delete_if { |interface| interface[:status] == "Down" }
|
322
325
|
|
326
|
+
# The name of the chosen bridge interface will be assigned to this
|
327
|
+
# variable.
|
323
328
|
chosen_bridge = nil
|
324
|
-
if bridgedifs.length == 1
|
325
|
-
# One bridgable interface? Just use it.
|
326
|
-
chosen_bridge = bridgedifs[0][:name]
|
327
|
-
else
|
328
|
-
# More than one bridgable interface requires a user decision, so
|
329
|
-
# show options to choose from.
|
330
|
-
@env[:ui].info I18n.t("vagrant.actions.vm.bridged_networking.available",
|
331
|
-
:prefix => false)
|
332
|
-
bridgedifs.each_index do |index|
|
333
|
-
interface = bridgedifs[index]
|
334
|
-
@env[:ui].info("#{index + 1}) #{interface[:name]}", :prefix => false)
|
335
|
-
end
|
336
329
|
|
337
|
-
|
338
|
-
|
330
|
+
if config[:bridge]
|
331
|
+
@logger.debug("Bridge was directly specified in config, searching for: #{config[:bridge]}")
|
332
|
+
|
333
|
+
# Search for a matching bridged interface
|
334
|
+
bridgedifs.each do |interface|
|
335
|
+
if interface[:name].downcase == config[:bridge].downcase
|
336
|
+
@logger.debug("Specific bridge found as configured in the Vagrantfile. Using it.")
|
337
|
+
chosen_bridge = interface[:name]
|
338
|
+
break
|
339
|
+
end
|
340
|
+
end
|
339
341
|
|
340
|
-
#
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
choice = choice.to_i
|
342
|
+
# If one wasn't found, then we notify the user here.
|
343
|
+
if !chosen_bridge
|
344
|
+
@env[:ui].info I18n.t("vagrant.actions.vm.bridged_networking.specific_not_found",
|
345
|
+
:bridge => config[:bridge])
|
345
346
|
end
|
347
|
+
end
|
346
348
|
|
347
|
-
|
349
|
+
# If we still don't have a bridge chosen (this means that one wasn't
|
350
|
+
# specified in the Vagrantfile, or the bridge specified in the Vagrantfile
|
351
|
+
# wasn't found), then we fall back to the normal means of searchign for a
|
352
|
+
# bridged network.
|
353
|
+
if !chosen_bridge
|
354
|
+
if bridgedifs.length == 1
|
355
|
+
# One bridgable interface? Just use it.
|
356
|
+
chosen_bridge = bridgedifs[0][:name]
|
357
|
+
@logger.debug("Only one bridged interface available. Using it by default.")
|
358
|
+
else
|
359
|
+
# More than one bridgable interface requires a user decision, so
|
360
|
+
# show options to choose from.
|
361
|
+
@env[:ui].info I18n.t("vagrant.actions.vm.bridged_networking.available",
|
362
|
+
:prefix => false)
|
363
|
+
bridgedifs.each_index do |index|
|
364
|
+
interface = bridgedifs[index]
|
365
|
+
@env[:ui].info("#{index + 1}) #{interface[:name]}", :prefix => false)
|
366
|
+
end
|
367
|
+
|
368
|
+
# The range of valid choices
|
369
|
+
valid = Range.new(1, bridgedifs.length)
|
370
|
+
|
371
|
+
# The choice that the user has chosen as the bridging interface
|
372
|
+
choice = nil
|
373
|
+
while !valid.include?(choice)
|
374
|
+
choice = @env[:ui].ask("What interface should the network bridge to? ")
|
375
|
+
choice = choice.to_i
|
376
|
+
end
|
377
|
+
|
378
|
+
chosen_bridge = bridgedifs[choice - 1][:name]
|
379
|
+
end
|
348
380
|
end
|
349
381
|
|
350
382
|
@logger.info("Bridging adapter #{config[:adapter]} to #{chosen_bridge}")
|
@@ -354,7 +386,8 @@ module Vagrant
|
|
354
386
|
:adapter => config[:adapter],
|
355
387
|
:type => :bridged,
|
356
388
|
:bridge => chosen_bridge,
|
357
|
-
:mac_address => config[:mac]
|
389
|
+
:mac_address => config[:mac],
|
390
|
+
:nic_type => config[:nic_type],
|
358
391
|
}
|
359
392
|
end
|
360
393
|
|
@@ -112,6 +112,10 @@ module Vagrant
|
|
112
112
|
args.concat(["--macaddress#{adapter[:adapter]}",
|
113
113
|
adapter[:mac_address]])
|
114
114
|
end
|
115
|
+
|
116
|
+
if adapter[:nic_type]
|
117
|
+
args.concat(["--nictype#{adapter[:adapter]}", adapter[:nic_type].to_s])
|
118
|
+
end
|
115
119
|
end
|
116
120
|
|
117
121
|
execute("modifyvm", @uuid, *args)
|
@@ -112,6 +112,10 @@ module Vagrant
|
|
112
112
|
args.concat(["--macaddress#{adapter[:adapter]}",
|
113
113
|
adapter[:mac_address]])
|
114
114
|
end
|
115
|
+
|
116
|
+
if adapter[:nic_type]
|
117
|
+
args.concat(["--nictype#{adapter[:adapter]}", adapter[:nic_type].to_s])
|
118
|
+
end
|
115
119
|
end
|
116
120
|
|
117
121
|
execute("modifyvm", @uuid, *args)
|
@@ -38,7 +38,10 @@ module Vagrant
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
# TODO:
|
41
|
+
# TODO: vboxsf is currently unsupported in FreeBSD, if you are able to
|
42
|
+
# help out with this project, please contact vbox@FreeBSD.org
|
43
|
+
#
|
44
|
+
# See: http://wiki.freebsd.org/VirtualBox/ToDo
|
42
45
|
# def mount_shared_folder(ssh, name, guestpath)
|
43
46
|
# ssh.exec!("sudo mkdir -p #{guestpath}")
|
44
47
|
# # Using a custom mount method here; could use improvement.
|
@@ -53,23 +56,18 @@ module Vagrant
|
|
53
56
|
end
|
54
57
|
end
|
55
58
|
|
56
|
-
def
|
59
|
+
def configure_networks(networks)
|
57
60
|
# Remove any previous host only network additions to the
|
58
61
|
# interface file.
|
59
|
-
vm.
|
60
|
-
|
61
|
-
ssh.exec!("sudo sed -e '/^#VAGRANT-BEGIN-HOSTONLY/,/^#VAGRANT-END-HOSTONLY/ d' /etc/rc.conf > /tmp/rc.conf")
|
62
|
-
ssh.exec!("sudo mv /tmp/rc.conf /etc/rc.conf")
|
63
|
-
end
|
64
|
-
end
|
62
|
+
vm.channel.sudo("sed -e '/^#VAGRANT-BEGIN-HOSTONLY/,/^#VAGRANT-END-HOSTONLY/ d' /etc/rc.conf > /tmp/rc.conf")
|
63
|
+
vm.channel.sudo("mv /tmp/rc.conf /etc/rc.conf")
|
65
64
|
|
66
|
-
|
67
|
-
|
68
|
-
|
65
|
+
networks.each do |network|
|
66
|
+
entry = "#VAGRANT-BEGIN-HOSTONLY\nifconfig_em#{network[:interface]}=\"inet #{network[:ip]} netmask #{network[:netmask]}\"\n#VAGRANT-END-HOSTONLY\n"
|
67
|
+
vm.channel.upload(StringIO.new(entry), "/tmp/vagrant-network-entry")
|
69
68
|
|
70
|
-
|
71
|
-
|
72
|
-
ssh.exec!("sudo ifconfig em#{net_options[:adapter]} inet #{net_options[:ip]} netmask #{net_options[:netmask]}")
|
69
|
+
vm.channel.sudo("su -m root -c 'cat /tmp/vagrant-network-entry >> /etc/rc.conf'")
|
70
|
+
vm.channel.sudo("ifconfig em#{network[:interface]} inet #{network[:ip]} netmask #{network[:netmask]}")
|
73
71
|
end
|
74
72
|
end
|
75
73
|
end
|
data/lib/vagrant/guest/linux.rb
CHANGED
@@ -60,7 +60,7 @@ module Vagrant
|
|
60
60
|
|
61
61
|
# Do the actual creating and mounting
|
62
62
|
@vm.channel.sudo("mkdir -p #{real_guestpath}")
|
63
|
-
@vm.channel.sudo("mount #{ip}:'#{opts[:hostpath]}' #{real_guestpath}",
|
63
|
+
@vm.channel.sudo("mount -o vers=#{opts[:nfs_version]} #{ip}:'#{opts[:hostpath]}' #{real_guestpath}",
|
64
64
|
:error_class => LinuxError,
|
65
65
|
:error_key => :mount_nfs_fail)
|
66
66
|
end
|
data/lib/vagrant/guest/redhat.rb
CHANGED
@@ -41,7 +41,7 @@ module Vagrant
|
|
41
41
|
interfaces.each do |interface|
|
42
42
|
vm.channel.sudo("/sbin/ifconfig eth#{interface} down 2> /dev/null")
|
43
43
|
vm.channel.sudo("cat /tmp/vagrant-network-entry_#{interface} >> #{network_scripts_dir}/ifcfg-eth#{interface}")
|
44
|
-
vm.channel.sudo("/sbin/
|
44
|
+
vm.channel.sudo("/sbin/ifconfig eth#{interface} up 2> /dev/null")
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
data/lib/vagrant/hosts/bsd.rb
CHANGED
@@ -24,6 +24,7 @@ module Vagrant
|
|
24
24
|
|
25
25
|
@logger = Log4r::Logger.new("vagrant::hosts::bsd")
|
26
26
|
@nfs_restart_command = "sudo nfsd restart"
|
27
|
+
@nfs_exports_template = "nfs/exports"
|
27
28
|
end
|
28
29
|
|
29
30
|
def nfs?
|
@@ -33,7 +34,7 @@ module Vagrant
|
|
33
34
|
end
|
34
35
|
|
35
36
|
def nfs_export(id, ip, folders)
|
36
|
-
output = TemplateRenderer.render(
|
37
|
+
output = TemplateRenderer.render(@nfs_exports_template,
|
37
38
|
:uuid => id,
|
38
39
|
:ip => ip,
|
39
40
|
:folders => folders)
|
@@ -4,6 +4,10 @@ module Vagrant
|
|
4
4
|
module Hosts
|
5
5
|
# Represents a FreeBSD host
|
6
6
|
class FreeBSD < BSD
|
7
|
+
class FreeBSDHostError < Errors::VagrantError
|
8
|
+
error_namespace("vagrant.hosts.freebsd")
|
9
|
+
end
|
10
|
+
|
7
11
|
include Util
|
8
12
|
include Util::Retryable
|
9
13
|
|
@@ -16,10 +20,21 @@ module Vagrant
|
|
16
20
|
5
|
17
21
|
end
|
18
22
|
|
23
|
+
def nfs_export(id, ip, folders)
|
24
|
+
folders.each do |folder_name, folder_values|
|
25
|
+
if folder_values[:hostpath] =~ /\s+/
|
26
|
+
raise FreeBSDHostError, :_key => :nfs_whitespace
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
super
|
31
|
+
end
|
32
|
+
|
19
33
|
def initialize(*args)
|
20
34
|
super
|
21
35
|
|
22
36
|
@nfs_restart_command = "sudo /etc/rc.d/mountd onereload"
|
37
|
+
@nfs_exports_template = "nfs/exports_freebsd"
|
23
38
|
end
|
24
39
|
end
|
25
40
|
end
|
@@ -10,11 +10,8 @@ module Vagrant
|
|
10
10
|
attr_accessor :puppet_node
|
11
11
|
attr_accessor :options
|
12
12
|
|
13
|
-
def
|
14
|
-
|
15
|
-
@puppet_node = "puppet_node"
|
16
|
-
@options = []
|
17
|
-
end
|
13
|
+
def puppet_server; @puppet_server || "puppet"; end
|
14
|
+
def options; @options ||= []; end
|
18
15
|
end
|
19
16
|
|
20
17
|
def self.config_class
|
@@ -35,14 +32,28 @@ module Vagrant
|
|
35
32
|
|
36
33
|
def run_puppetd_client
|
37
34
|
options = config.options
|
38
|
-
options = options
|
35
|
+
options = [options] if !options.is_a?(Array)
|
36
|
+
|
37
|
+
# Intelligently set the puppet node cert name based on certain
|
38
|
+
# external parameters.
|
39
|
+
cn = nil
|
39
40
|
if config.puppet_node
|
41
|
+
# If a node name is given, we use that directly for the certname
|
40
42
|
cn = config.puppet_node
|
43
|
+
elsif env[:vm].config.vm.host_name
|
44
|
+
# If a host name is given, we explicitly set the certname to
|
45
|
+
# nil so that the hostname becomes the cert name.
|
46
|
+
cn = nil
|
41
47
|
else
|
48
|
+
# Otherwise, we default to the name of the box.
|
42
49
|
cn = env[:vm].config.vm.box
|
43
50
|
end
|
44
51
|
|
45
|
-
|
52
|
+
# Add the certname option if there is one
|
53
|
+
options += ["--certname", cn] if cn
|
54
|
+
options = options.join(" ")
|
55
|
+
|
56
|
+
command = "puppetd #{options} --server #{config.puppet_server}"
|
46
57
|
|
47
58
|
env[:ui].info I18n.t("vagrant.provisioners.puppet_server.running_puppetd")
|
48
59
|
env[:vm].channel.sudo(command) do |type, data|
|
data/lib/vagrant/version.rb
CHANGED
data/templates/locales/en.yml
CHANGED
@@ -299,6 +299,9 @@ en:
|
|
299
299
|
Enabling bridged network...
|
300
300
|
preparing: |-
|
301
301
|
Preparing bridged networking...
|
302
|
+
specific_not_found: |-
|
303
|
+
Specific bridge '%{bridge}' not found. You may be asked to specify
|
304
|
+
which network to bridge to.
|
302
305
|
check_box:
|
303
306
|
not_found: Box %{name} was not found. Fetching box from specified URL...
|
304
307
|
not_specified: |-
|
@@ -383,7 +386,8 @@ en:
|
|
383
386
|
forwarding_entry: |-
|
384
387
|
-- %{guest_port} => %{host_port} (adapter %{adapter})
|
385
388
|
non_nat: |-
|
386
|
-
VirtualBox adapter #%{adapter} not configured as "NAT". Skipping
|
389
|
+
VirtualBox adapter #%{adapter} not configured as "NAT". Skipping port
|
390
|
+
forwards on this adapter.
|
387
391
|
privileged_ports: |-
|
388
392
|
You are trying to forward to privileged ports (ports <= 1024). Most
|
389
393
|
operating systems restrict this to only privileged process (typically
|
@@ -554,6 +558,10 @@ en:
|
|
554
558
|
arch:
|
555
559
|
nfs_export:
|
556
560
|
prepare: "Preparing to edit /etc/exports. Administrator privileges will be required..."
|
561
|
+
freebsd:
|
562
|
+
nfs_whitespace: |-
|
563
|
+
FreeBSD hosts do not support sharing directories with whitespace in
|
564
|
+
their path. Please adjust your path accordingly.
|
557
565
|
|
558
566
|
provisioners:
|
559
567
|
chef:
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 49
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
9
|
+
- 5
|
10
|
+
version: 0.9.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Mitchell Hashimoto
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2012-
|
19
|
+
date: 2012-02-05 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
@@ -442,6 +442,7 @@ files:
|
|
442
442
|
- templates/guests/redhat/network_static.erb
|
443
443
|
- templates/locales/en.yml
|
444
444
|
- templates/nfs/exports.erb
|
445
|
+
- templates/nfs/exports_freebsd.erb
|
445
446
|
- templates/nfs/exports_linux.erb
|
446
447
|
- templates/package_Vagrantfile.erb
|
447
448
|
- templates/provisioners/chef_client/client.erb
|