vagrant 0.7.0.beta → 0.7.0.beta2
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/.gitignore +2 -0
- data/CHANGELOG.md +26 -0
- data/Gemfile +0 -8
- data/config/default.rb +1 -2
- data/contrib/README.md +12 -0
- data/contrib/emacs/vagrant.el +8 -0
- data/contrib/vim/vagrantfile.vim +9 -0
- data/lib/vagrant.rb +14 -18
- data/lib/vagrant/action.rb +12 -0
- data/lib/vagrant/action/box.rb +11 -0
- data/lib/vagrant/action/box/download.rb +0 -1
- data/lib/vagrant/action/env.rb +7 -0
- data/lib/vagrant/action/general.rb +8 -0
- data/lib/vagrant/action/vm.rb +30 -0
- data/lib/vagrant/action/vm/boot.rb +3 -2
- data/lib/vagrant/action/vm/check_box.rb +1 -0
- data/lib/vagrant/action/vm/network.rb +1 -1
- data/lib/vagrant/action/vm/nfs.rb +3 -1
- data/lib/vagrant/action/vm/provision.rb +14 -25
- data/lib/vagrant/action/vm/share_folders.rb +11 -4
- data/lib/vagrant/command.rb +25 -0
- data/lib/vagrant/config.rb +78 -128
- data/lib/vagrant/config/base.rb +17 -3
- data/lib/vagrant/config/ssh.rb +1 -0
- data/lib/vagrant/config/top.rb +61 -0
- data/lib/vagrant/config/vagrant.rb +1 -6
- data/lib/vagrant/config/vm.rb +34 -20
- data/lib/vagrant/config/vm/provisioner.rb +56 -0
- data/lib/vagrant/config/vm/sub_vm.rb +17 -0
- data/lib/vagrant/downloaders.rb +7 -0
- data/lib/vagrant/downloaders/file.rb +1 -0
- data/lib/vagrant/downloaders/http.rb +9 -0
- data/lib/vagrant/environment.rb +25 -13
- data/lib/vagrant/errors.rb +0 -15
- data/lib/vagrant/hosts.rb +7 -0
- data/lib/vagrant/provisioners.rb +8 -0
- data/lib/vagrant/provisioners/base.rb +19 -1
- data/lib/vagrant/provisioners/chef.rb +31 -52
- data/lib/vagrant/provisioners/chef_server.rb +34 -10
- data/lib/vagrant/provisioners/chef_solo.rb +31 -9
- data/lib/vagrant/provisioners/puppet.rb +70 -60
- data/lib/vagrant/provisioners/puppet_server.rb +57 -0
- data/lib/vagrant/ssh.rb +3 -72
- data/lib/vagrant/ssh/session.rb +81 -0
- data/lib/vagrant/systems.rb +9 -0
- data/lib/vagrant/systems/base.rb +16 -1
- data/lib/vagrant/systems/debian.rb +26 -0
- data/lib/vagrant/systems/gentoo.rb +27 -0
- data/lib/vagrant/systems/linux.rb +14 -56
- data/lib/vagrant/systems/linux/config.rb +21 -0
- data/lib/vagrant/systems/linux/error.rb +9 -0
- data/lib/vagrant/systems/redhat.rb +31 -0
- data/lib/vagrant/test_helpers.rb +1 -1
- data/lib/vagrant/version.rb +1 -1
- data/lib/vagrant/vm.rb +25 -5
- data/templates/chef_solo_solo.erb +11 -3
- data/templates/locales/en.yml +65 -25
- data/templates/{network_entry.erb → network_entry_debian.erb} +0 -0
- data/templates/network_entry_gentoo.erb +7 -0
- data/templates/network_entry_redhat.erb +8 -0
- data/test/vagrant/action/vm/check_box_test.rb +1 -0
- data/test/vagrant/action/vm/nfs_test.rb +7 -1
- data/test/vagrant/action/vm/provision_test.rb +24 -79
- data/test/vagrant/action/vm/share_folders_test.rb +6 -1
- data/test/vagrant/command/helpers_test.rb +2 -2
- data/test/vagrant/config/base_test.rb +0 -6
- data/test/vagrant/config/vagrant_test.rb +0 -8
- data/test/vagrant/config/vm/provisioner_test.rb +92 -0
- data/test/vagrant/config/vm_test.rb +8 -0
- data/test/vagrant/config_test.rb +49 -89
- data/test/vagrant/downloaders/file_test.rb +18 -4
- data/test/vagrant/environment_test.rb +36 -12
- data/test/vagrant/provisioners/base_test.rb +28 -1
- data/test/vagrant/provisioners/chef_server_test.rb +50 -41
- data/test/vagrant/provisioners/chef_solo_test.rb +39 -16
- data/test/vagrant/provisioners/chef_test.rb +11 -81
- data/test/vagrant/provisioners/puppet_server_test.rb +69 -0
- data/test/vagrant/provisioners/puppet_test.rb +69 -54
- data/test/vagrant/{ssh_session_test.rb → ssh/session_test.rb} +0 -0
- data/test/vagrant/ssh_test.rb +12 -1
- data/test/vagrant/systems/base_test.rb +18 -0
- data/test/vagrant/systems/linux_test.rb +2 -2
- data/test/vagrant/vm_test.rb +33 -5
- data/vagrant.gemspec +6 -5
- metadata +42 -16
- data/lib/vagrant/util/glob_loader.rb +0 -24
@@ -0,0 +1,57 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Provisioners
|
3
|
+
class PuppetServerError < Vagrant::Errors::VagrantError
|
4
|
+
error_namespace("vagrant.provisioners.puppet_server")
|
5
|
+
end
|
6
|
+
|
7
|
+
class PuppetServer < Base
|
8
|
+
register :puppet_server
|
9
|
+
|
10
|
+
class Config < Vagrant::Config::Base
|
11
|
+
attr_accessor :puppet_server
|
12
|
+
attr_accessor :puppet_node
|
13
|
+
attr_accessor :options
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
@puppet_server = "puppet"
|
17
|
+
@puppet_node = "puppet_node"
|
18
|
+
@options = []
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def provision!
|
23
|
+
verify_binary("puppetd")
|
24
|
+
run_puppetd_client
|
25
|
+
end
|
26
|
+
|
27
|
+
def verify_binary(binary)
|
28
|
+
vm.ssh.execute do |ssh|
|
29
|
+
ssh.shell do |sh|
|
30
|
+
sh.execute("sudo -i which #{binary}", :error_class => PuppetServerError, :_key => :puppetd_not_detected, :binary => binary)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def run_puppetd_client
|
36
|
+
options = config.options
|
37
|
+
options = options.join(" ") if options.is_a?(Array)
|
38
|
+
if config.puppet_node
|
39
|
+
cn = config.puppet_node
|
40
|
+
else
|
41
|
+
cn = env.config.vm.box
|
42
|
+
end
|
43
|
+
|
44
|
+
command = "sudo -i puppetd #{options} --server #{config.puppet_server} --certname #{cn}"
|
45
|
+
|
46
|
+
env.ui.info I18n.t("vagrant.provisioners.puppet_server.running_puppetd")
|
47
|
+
|
48
|
+
vm.ssh.execute do |ssh|
|
49
|
+
ssh.exec!(command) do |channel, type, data|
|
50
|
+
ssh.check_exit_status(data, command) if type == :exit_status
|
51
|
+
env.ui.info(data) if type != :exit_status
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/vagrant/ssh.rb
CHANGED
@@ -3,6 +3,8 @@ require 'net/ssh'
|
|
3
3
|
require 'net/scp'
|
4
4
|
require 'mario'
|
5
5
|
|
6
|
+
require 'vagrant/ssh/session'
|
7
|
+
|
6
8
|
module Vagrant
|
7
9
|
# Manages SSH access to a specific environment. Allows an environment to
|
8
10
|
# replace the process with SSH itself, run a specific set of commands,
|
@@ -42,6 +44,7 @@ module Vagrant
|
|
42
44
|
"-o StrictHostKeyChecking=no", "-o IdentitiesOnly=yes",
|
43
45
|
"-i #{options[:private_key_path]}"]
|
44
46
|
command_options << "-o ForwardAgent=yes" if env.config.ssh.forward_agent
|
47
|
+
command_options << "-o ForwardX11=yes" if env.config.ssh.forward_x11
|
45
48
|
|
46
49
|
# Some hackery going on here. On Mac OS X Leopard (10.5), exec fails
|
47
50
|
# (GH-51). As a workaround, we fork and wait. On all other platforms,
|
@@ -162,76 +165,4 @@ module Vagrant
|
|
162
165
|
return env.config.ssh.port
|
163
166
|
end
|
164
167
|
end
|
165
|
-
|
166
|
-
class SSH
|
167
|
-
# A helper class which wraps around `Net::SSH::Connection::Session`
|
168
|
-
# in order to provide basic command error checking while still
|
169
|
-
# providing access to the actual session object.
|
170
|
-
class Session
|
171
|
-
include Util::Retryable
|
172
|
-
|
173
|
-
attr_reader :session
|
174
|
-
|
175
|
-
def initialize(session)
|
176
|
-
@session = session
|
177
|
-
end
|
178
|
-
|
179
|
-
# Executes a given command on the SSH session and blocks until
|
180
|
-
# the command completes. This is an almost line for line copy of
|
181
|
-
# the actual `exec!` implementation, except that this
|
182
|
-
# implementation also reports `:exit_status` to the block if given.
|
183
|
-
def exec!(command, options=nil, &block)
|
184
|
-
options = {
|
185
|
-
:error_check => true
|
186
|
-
}.merge(options || {})
|
187
|
-
|
188
|
-
block ||= Proc.new do |ch, type, data|
|
189
|
-
check_exit_status(data, command, options) if type == :exit_status && options[:error_check]
|
190
|
-
|
191
|
-
ch[:result] ||= ""
|
192
|
-
ch[:result] << data if [:stdout, :stderr].include?(type)
|
193
|
-
end
|
194
|
-
|
195
|
-
retryable(:tries => 5, :on => IOError, :sleep => 0.5) do
|
196
|
-
metach = session.open_channel do |channel|
|
197
|
-
channel.exec(command) do |ch, success|
|
198
|
-
raise "could not execute command: #{command.inspect}" unless success
|
199
|
-
|
200
|
-
# Output stdout data to the block
|
201
|
-
channel.on_data do |ch2, data|
|
202
|
-
block.call(ch2, :stdout, data)
|
203
|
-
end
|
204
|
-
|
205
|
-
# Output stderr data to the block
|
206
|
-
channel.on_extended_data do |ch2, type, data|
|
207
|
-
block.call(ch2, :stderr, data)
|
208
|
-
end
|
209
|
-
|
210
|
-
# Output exit status information to the block
|
211
|
-
channel.on_request("exit-status") do |ch2, data|
|
212
|
-
block.call(ch2, :exit_status, data.read_long)
|
213
|
-
end
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
metach.wait
|
218
|
-
metach[:result]
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
# Checks for an erroroneous exit status and raises an exception
|
223
|
-
# if so.
|
224
|
-
def check_exit_status(exit_status, command, options=nil)
|
225
|
-
if exit_status != 0
|
226
|
-
options = {
|
227
|
-
:_error_class => Errors::VagrantError,
|
228
|
-
:_key => :ssh_bad_exit_status,
|
229
|
-
:command => command
|
230
|
-
}.merge(options || {})
|
231
|
-
|
232
|
-
raise options[:_error_class], options
|
233
|
-
end
|
234
|
-
end
|
235
|
-
end
|
236
|
-
end
|
237
168
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Vagrant
|
2
|
+
class SSH
|
3
|
+
# A helper class which wraps around `Net::SSH::Connection::Session`
|
4
|
+
# in order to provide basic command error checking while still
|
5
|
+
# providing access to the actual session object.
|
6
|
+
class Session
|
7
|
+
include Util::Retryable
|
8
|
+
|
9
|
+
attr_reader :session
|
10
|
+
|
11
|
+
def initialize(session)
|
12
|
+
@session = session
|
13
|
+
end
|
14
|
+
|
15
|
+
# Executes a given command and simply returns true/false if the
|
16
|
+
# command succeeded or not.
|
17
|
+
def test?(command)
|
18
|
+
exec!(command) do |ch, type, data|
|
19
|
+
return true if type == :exit_status && data == 0
|
20
|
+
end
|
21
|
+
|
22
|
+
false
|
23
|
+
end
|
24
|
+
|
25
|
+
# Executes a given command on the SSH session and blocks until
|
26
|
+
# the command completes. This is an almost line for line copy of
|
27
|
+
# the actual `exec!` implementation, except that this
|
28
|
+
# implementation also reports `:exit_status` to the block if given.
|
29
|
+
def exec!(command, options=nil, &block)
|
30
|
+
options = { :error_check => true }.merge(options || {})
|
31
|
+
|
32
|
+
block ||= Proc.new do |ch, type, data|
|
33
|
+
check_exit_status(data, command, options) if type == :exit_status && options[:error_check]
|
34
|
+
|
35
|
+
ch[:result] ||= ""
|
36
|
+
ch[:result] << data if [:stdout, :stderr].include?(type)
|
37
|
+
end
|
38
|
+
|
39
|
+
retryable(:tries => 5, :on => IOError, :sleep => 0.5) do
|
40
|
+
metach = session.open_channel do |channel|
|
41
|
+
channel.exec(command) do |ch, success|
|
42
|
+
raise "could not execute command: #{command.inspect}" unless success
|
43
|
+
|
44
|
+
# Output stdout data to the block
|
45
|
+
channel.on_data do |ch2, data|
|
46
|
+
block.call(ch2, :stdout, data)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Output stderr data to the block
|
50
|
+
channel.on_extended_data do |ch2, type, data|
|
51
|
+
block.call(ch2, :stderr, data)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Output exit status information to the block
|
55
|
+
channel.on_request("exit-status") do |ch2, data|
|
56
|
+
block.call(ch2, :exit_status, data.read_long)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
metach.wait
|
62
|
+
metach[:result]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Checks for an erroroneous exit status and raises an exception
|
67
|
+
# if so.
|
68
|
+
def check_exit_status(exit_status, command, options=nil)
|
69
|
+
if exit_status != 0
|
70
|
+
options = {
|
71
|
+
:_error_class => Errors::VagrantError,
|
72
|
+
:_key => :ssh_bad_exit_status,
|
73
|
+
:command => command
|
74
|
+
}.merge(options || {})
|
75
|
+
|
76
|
+
raise options[:_error_class], options
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# These can't be autoloaded because they have to register functionality
|
2
|
+
# with Vagrant core.
|
3
|
+
require 'vagrant/systems/base'
|
4
|
+
require 'vagrant/systems/linux'
|
5
|
+
require 'vagrant/systems/solaris'
|
6
|
+
|
7
|
+
require 'vagrant/systems/debian'
|
8
|
+
require 'vagrant/systems/gentoo'
|
9
|
+
require 'vagrant/systems/redhat'
|
data/lib/vagrant/systems/base.rb
CHANGED
@@ -15,6 +15,10 @@ module Vagrant
|
|
15
15
|
# required by systems can and will change at any time. Any
|
16
16
|
# changes will be noted on release notes.**
|
17
17
|
class Base
|
18
|
+
class BaseError < Errors::VagrantError
|
19
|
+
error_namespace("vagrant.systems.base")
|
20
|
+
end
|
21
|
+
|
18
22
|
include Vagrant::Util
|
19
23
|
|
20
24
|
# The VM which this system is tied to.
|
@@ -27,6 +31,15 @@ module Vagrant
|
|
27
31
|
@vm = vm
|
28
32
|
end
|
29
33
|
|
34
|
+
# This method is automatically called when the system is available (when
|
35
|
+
# Vagrant can successfully SSH into the machine) to give the system a chance
|
36
|
+
# to determine the distro and return a distro-specific system.
|
37
|
+
#
|
38
|
+
# **Warning:** If a return value which subclasses from {Base} is
|
39
|
+
# returned, Vagrant will use it as the new system instance for the
|
40
|
+
# class.
|
41
|
+
def distro_dispatch; end
|
42
|
+
|
30
43
|
# Halt the machine. This method should gracefully shut down the
|
31
44
|
# operating system. This method will cause `vagrant halt` and associated
|
32
45
|
# commands to _block_, meaning that if the machine doesn't halt
|
@@ -55,7 +68,9 @@ module Vagrant
|
|
55
68
|
|
56
69
|
# Prepares the system for host only networks. This is called
|
57
70
|
# once prior to any `enable_host_only_network` calls.
|
58
|
-
def prepare_host_only_network
|
71
|
+
def prepare_host_only_network(net_options=nil)
|
72
|
+
raise BaseError, :_key => :unsupported_host_only
|
73
|
+
end
|
59
74
|
|
60
75
|
# Setup the system by adding a new host only network. This
|
61
76
|
# method should configure and bring up the interface for the
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Systems
|
3
|
+
class Debian < Linux
|
4
|
+
def prepare_host_only_network(net_options=nil)
|
5
|
+
# Remove any previous host only network additions to the
|
6
|
+
# interface file.
|
7
|
+
vm.ssh.execute do |ssh|
|
8
|
+
# Clear out any previous entries
|
9
|
+
ssh.exec!("sudo sed -e '/^#VAGRANT-BEGIN/,/^#VAGRANT-END/ d' /etc/network/interfaces > /tmp/vagrant-network-interfaces")
|
10
|
+
ssh.exec!("sudo su -c 'cat /tmp/vagrant-network-interfaces > /etc/network/interfaces'")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def enable_host_only_network(net_options)
|
15
|
+
entry = TemplateRenderer.render('network_entry_debian', :net_options => net_options)
|
16
|
+
vm.ssh.upload!(StringIO.new(entry), "/tmp/vagrant-network-entry")
|
17
|
+
|
18
|
+
vm.ssh.execute do |ssh|
|
19
|
+
ssh.exec!("sudo /sbin/ifdown eth#{net_options[:adapter]} 2> /dev/null")
|
20
|
+
ssh.exec!("sudo su -c 'cat /tmp/vagrant-network-entry >> /etc/network/interfaces'")
|
21
|
+
ssh.exec!("sudo /sbin/ifup eth#{net_options[:adapter]}")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Systems
|
3
|
+
class Gentoo < Linux
|
4
|
+
def prepare_host_only_network(net_options=nil)
|
5
|
+
# Remove any previous host only network additions to the
|
6
|
+
# interface file.
|
7
|
+
vm.ssh.execute do |ssh|
|
8
|
+
# Clear out any previous entries
|
9
|
+
ssh.exec!("sudo sed -e '/^#VAGRANT-BEGIN/,/^#VAGRANT-END/ d' /etc/conf.d/net > /tmp/vagrant-network-interfaces")
|
10
|
+
ssh.exec!("sudo su -c 'cat /tmp/vagrant-network-interfaces > /etc/conf.d/net'")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def enable_host_only_network(net_options)
|
15
|
+
entry = TemplateRenderer.render('network_entry_gentoo', :net_options => net_options)
|
16
|
+
vm.ssh.upload!(StringIO.new(entry), "/tmp/vagrant-network-entry")
|
17
|
+
|
18
|
+
vm.ssh.execute do |ssh|
|
19
|
+
ssh.exec!("sudo ln -s /etc/init.d/net.lo /etc/init.d/net.eth#{net_options[:adapter]}")
|
20
|
+
ssh.exec!("sudo /etc/init.d/net.eth#{net_options[:adapter]} stop 2> /dev/null")
|
21
|
+
ssh.exec!("sudo su -c 'cat /tmp/vagrant-network-entry >> /etc/conf.d/net'")
|
22
|
+
ssh.exec!("sudo /etc/init.d/net.eth#{net_options[:adapter]} start")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,32 +1,20 @@
|
|
1
|
+
require 'vagrant/systems/linux/error'
|
2
|
+
require 'vagrant/systems/linux/config'
|
3
|
+
|
1
4
|
module Vagrant
|
2
5
|
module Systems
|
3
|
-
# A general Vagrant system implementation for "linux." In general,
|
4
|
-
# any linux-based OS will work fine with this system, although its
|
5
|
-
# not tested exhaustively. BSD or other based systems may work as
|
6
|
-
# well, but that hasn't been tested at all.
|
7
|
-
#
|
8
|
-
# At any rate, this system implementation should server as an
|
9
|
-
# example of how to implement any custom systems necessary.
|
10
6
|
class Linux < Base
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
configures :linux
|
17
|
-
|
18
|
-
attr_accessor :halt_timeout
|
19
|
-
attr_accessor :halt_check_interval
|
20
|
-
|
21
|
-
def initialize
|
22
|
-
@halt_timeout = 30
|
23
|
-
@halt_check_interval = 1
|
7
|
+
def distro_dispatch
|
8
|
+
vm.ssh.execute do |ssh|
|
9
|
+
return :debian if ssh.test?("cat /etc/debian_version")
|
10
|
+
return :gentoo if ssh.test?("cat /etc/gentoo-release")
|
11
|
+
return :redhat if ssh.test?("cat /etc/redhat-release")
|
24
12
|
end
|
13
|
+
|
14
|
+
# Can't detect the distro, assume vanilla linux
|
15
|
+
nil
|
25
16
|
end
|
26
17
|
|
27
|
-
#-------------------------------------------------------------------
|
28
|
-
# Overridden methods
|
29
|
-
#-------------------------------------------------------------------
|
30
18
|
def halt
|
31
19
|
vm.env.ui.info I18n.t("vagrant.systems.linux.attempting_halt")
|
32
20
|
vm.ssh.execute do |ssh|
|
@@ -57,43 +45,19 @@ module Vagrant
|
|
57
45
|
folders.each do |name, opts|
|
58
46
|
vm.ssh.execute do |ssh|
|
59
47
|
ssh.exec!("sudo mkdir -p #{opts[:guestpath]}")
|
60
|
-
ssh.exec!("sudo mount #{ip}:#{opts[:hostpath]} #{opts[:guestpath]}")
|
48
|
+
ssh.exec!("sudo mount #{ip}:#{opts[:hostpath]} #{opts[:guestpath]}", :error_class => LinuxError, :_key => :mount_nfs_fail)
|
61
49
|
end
|
62
50
|
end
|
63
51
|
end
|
64
52
|
|
65
|
-
def prepare_host_only_network
|
66
|
-
# Remove any previous host only network additions to the
|
67
|
-
# interface file.
|
68
|
-
vm.ssh.execute do |ssh|
|
69
|
-
# Verify debian/ubuntu
|
70
|
-
ssh.exec!("cat /etc/debian_version", :error_class => LinuxError, :_key => :network_not_debian)
|
71
|
-
|
72
|
-
# Clear out any previous entries
|
73
|
-
ssh.exec!("sudo sed -e '/^#VAGRANT-BEGIN/,/^#VAGRANT-END/ d' /etc/network/interfaces > /tmp/vagrant-network-interfaces")
|
74
|
-
ssh.exec!("sudo su -c 'cat /tmp/vagrant-network-interfaces > /etc/network/interfaces'")
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def enable_host_only_network(net_options)
|
79
|
-
entry = TemplateRenderer.render('network_entry', :net_options => net_options)
|
80
|
-
vm.ssh.upload!(StringIO.new(entry), "/tmp/vagrant-network-entry")
|
81
|
-
|
82
|
-
vm.ssh.execute do |ssh|
|
83
|
-
ssh.exec!("sudo /sbin/ifdown eth#{net_options[:adapter]} 2> /dev/null")
|
84
|
-
ssh.exec!("sudo su -c 'cat /tmp/vagrant-network-entry >> /etc/network/interfaces'")
|
85
|
-
ssh.exec!("sudo /sbin/ifup eth#{net_options[:adapter]}")
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
53
|
#-------------------------------------------------------------------
|
90
54
|
# "Private" methods which assist above methods
|
91
55
|
#-------------------------------------------------------------------
|
92
56
|
def mount_folder(ssh, name, guestpath, sleeptime=5)
|
93
57
|
# Determine the permission string to attach to the mount command
|
94
58
|
perms = []
|
95
|
-
perms << "uid
|
96
|
-
perms << "gid
|
59
|
+
perms << "uid=`id -u #{vm.env.config.vm.shared_folder_uid}`"
|
60
|
+
perms << "gid=`id -g #{vm.env.config.vm.shared_folder_gid}`"
|
97
61
|
perms = " -o #{perms.join(",")}" if !perms.empty?
|
98
62
|
|
99
63
|
attempts = 0
|
@@ -111,11 +75,5 @@ module Vagrant
|
|
111
75
|
end
|
112
76
|
end
|
113
77
|
end
|
114
|
-
|
115
|
-
class Linux < Base
|
116
|
-
class LinuxError < Errors::VagrantError
|
117
|
-
error_namespace("vagrant.systems.linux")
|
118
|
-
end
|
119
|
-
end
|
120
78
|
end
|
121
79
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Systems
|
3
|
+
class Linux < Vagrant::Systems::Base
|
4
|
+
# A custom config class which will be made accessible via `config.linux`
|
5
|
+
# This is not necessary for all system implementers, of course. However,
|
6
|
+
# generally, Vagrant tries to make almost every aspect of its execution
|
7
|
+
# configurable, and this assists that goal.
|
8
|
+
class LinuxConfig < Vagrant::Config::Base
|
9
|
+
configures :linux
|
10
|
+
|
11
|
+
attr_accessor :halt_timeout
|
12
|
+
attr_accessor :halt_check_interval
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@halt_timeout = 30
|
16
|
+
@halt_check_interval = 1
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|