vagrantup 0.6.9 → 0.7.0
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.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/CHANGELOG.md +37 -0
- data/Gemfile +0 -8
- data/README.md +5 -0
- data/config/default.rb +1 -3
- data/contrib/README.md +12 -0
- data/contrib/emacs/vagrant.el +8 -0
- data/contrib/vim/vagrantfile.vim +9 -0
- data/lib/vagrant/action/box/download.rb +0 -1
- data/lib/vagrant/action/box.rb +11 -0
- data/lib/vagrant/action/builtin.rb +1 -2
- data/lib/vagrant/action/env.rb +7 -0
- data/lib/vagrant/action/general.rb +8 -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/clean_machine_folder.rb +1 -1
- data/lib/vagrant/action/vm/destroy.rb +1 -1
- data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +7 -12
- 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/action/vm.rb +30 -0
- data/lib/vagrant/action.rb +12 -0
- data/lib/vagrant/command.rb +25 -0
- data/lib/vagrant/config/base.rb +17 -3
- data/lib/vagrant/config/ssh.rb +2 -2
- data/lib/vagrant/config/top.rb +61 -0
- data/lib/vagrant/config/vagrant.rb +1 -6
- data/lib/vagrant/config/vm/provisioner.rb +56 -0
- data/lib/vagrant/config/vm/sub_vm.rb +17 -0
- data/lib/vagrant/config/vm.rb +34 -20
- data/lib/vagrant/config.rb +78 -128
- data/lib/vagrant/downloaders/file.rb +1 -0
- data/lib/vagrant/downloaders/http.rb +9 -0
- data/lib/vagrant/downloaders.rb +7 -0
- data/lib/vagrant/environment.rb +26 -14
- data/lib/vagrant/errors.rb +5 -15
- data/lib/vagrant/hosts.rb +7 -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 +111 -60
- data/lib/vagrant/provisioners/puppet_server.rb +57 -0
- data/lib/vagrant/provisioners.rb +8 -0
- data/lib/vagrant/ssh/session.rb +81 -0
- data/lib/vagrant/ssh.rb +6 -76
- 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/config.rb +21 -0
- data/lib/vagrant/systems/linux/error.rb +9 -0
- data/lib/vagrant/systems/linux.rb +14 -56
- data/lib/vagrant/systems/redhat.rb +31 -0
- data/lib/vagrant/systems.rb +9 -0
- data/lib/vagrant/test_helpers.rb +1 -1
- data/lib/vagrant/version.rb +1 -1
- data/lib/vagrant/vm.rb +25 -5
- data/lib/vagrant.rb +14 -18
- data/templates/chef_solo_solo.erb +11 -3
- data/templates/commands/init/Vagrantfile.erb +13 -11
- data/templates/locales/en.yml +76 -26
- 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/templates/ssh_config.erb +1 -1
- data/test/vagrant/action/vm/check_box_test.rb +1 -0
- data/test/vagrant/action/vm/clean_machine_folder_test.rb +6 -4
- data/test/vagrant/action/vm/destroy_test.rb +1 -1
- data/test/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +10 -7
- 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 +116 -69
- data/test/vagrant/{ssh_session_test.rb → ssh/session_test.rb} +0 -0
- data/test/vagrant/ssh_test.rb +20 -7
- 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 +38 -14
- data/lib/vagrant/action/vm/disable_networks.rb +0 -34
- data/lib/vagrant/util/glob_loader.rb +0 -24
- data/test/vagrant/action/vm/disable_networks_test.rb +0 -48
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,
|
|
@@ -139,8 +142,7 @@ module Vagrant
|
|
|
139
142
|
|
|
140
143
|
# Returns the port which is either given in the options hash or taken from
|
|
141
144
|
# the config by finding it in the forwarded ports hash based on the
|
|
142
|
-
# `config.ssh.forwarded_port_key
|
|
143
|
-
# when port forwarding isn't used.
|
|
145
|
+
# `config.ssh.forwarded_port_key`.
|
|
144
146
|
def port(opts={})
|
|
145
147
|
# Check if port was specified in options hash
|
|
146
148
|
pnum = opts[:port]
|
|
@@ -158,80 +160,8 @@ module Vagrant
|
|
|
158
160
|
|
|
159
161
|
return pnum.hostport if pnum
|
|
160
162
|
|
|
161
|
-
#
|
|
162
|
-
|
|
163
|
-
end
|
|
164
|
-
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
|
|
163
|
+
# This should NEVER happen.
|
|
164
|
+
raise Errors::SSHPortNotDetected
|
|
235
165
|
end
|
|
236
166
|
end
|
|
237
167
|
end
|
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
|
|
@@ -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
|
|
@@ -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,31 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
module Systems
|
|
3
|
+
class Redhat < Linux
|
|
4
|
+
def prepare_host_only_network(net_options)
|
|
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/sysconfig/network-scripts/ifcfg-eth#{net_options[:adapter]} > /tmp/vagrant-ifcfg-eth#{net_options[:adapter]}")
|
|
10
|
+
ssh.exec!("sudo su -c 'cat /tmp/vagrant-ifcfg-eth#{net_options[:adapter]} > /etc/sysconfig/network-scripts/ifcfg-eth#{net_options[:adapter]}'")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def enable_host_only_network(net_options)
|
|
15
|
+
entry = TemplateRenderer.render('network_entry_redhat', :net_options => net_options)
|
|
16
|
+
|
|
17
|
+
vm.ssh.upload!(StringIO.new(entry), "/tmp/vagrant-network-entry")
|
|
18
|
+
|
|
19
|
+
vm.ssh.execute do |ssh|
|
|
20
|
+
interface_up = ssh.test?("/sbin/ifconfig eth#{net_options[:adapter]} | grep 'inet addr:'")
|
|
21
|
+
ssh.exec!("sudo /sbin/ifdown eth#{net_options[:adapter]} 2> /dev/null") if interface_up
|
|
22
|
+
ssh.exec!("sudo su -c 'cat /tmp/vagrant-network-entry >> /etc/sysconfig/network-scripts/ifcfg-eth#{net_options[:adapter]}'")
|
|
23
|
+
ssh.exec!("sudo /sbin/ifup eth#{net_options[:adapter]}")
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
@@ -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/test_helpers.rb
CHANGED
|
@@ -31,8 +31,8 @@ module Vagrant
|
|
|
31
31
|
|
|
32
32
|
str = args.shift || ""
|
|
33
33
|
File.open(path.to_s, "w") do |f|
|
|
34
|
+
f.puts "ENV['VAGRANT_HOME'] = '#{home_path}'"
|
|
34
35
|
f.puts "Vagrant::Config.run do |config|"
|
|
35
|
-
f.puts "config.vagrant.home = '#{home_path}'"
|
|
36
36
|
f.puts "config.vm.base_mac = 'foo' if !config.vm.base_mac"
|
|
37
37
|
f.puts "config.vm.box = 'base'"
|
|
38
38
|
f.puts str
|
data/lib/vagrant/version.rb
CHANGED
data/lib/vagrant/vm.rb
CHANGED
|
@@ -3,7 +3,6 @@ module Vagrant
|
|
|
3
3
|
include Vagrant::Util
|
|
4
4
|
|
|
5
5
|
attr_reader :env
|
|
6
|
-
attr_reader :system
|
|
7
6
|
attr_reader :name
|
|
8
7
|
attr_reader :vm
|
|
9
8
|
|
|
@@ -41,6 +40,8 @@ module Vagrant
|
|
|
41
40
|
# Load the associated system.
|
|
42
41
|
load_system!
|
|
43
42
|
end
|
|
43
|
+
|
|
44
|
+
@loaded_system_distro = false
|
|
44
45
|
end
|
|
45
46
|
|
|
46
47
|
# Loads the system associated with the VM. The system class is
|
|
@@ -48,15 +49,21 @@ module Vagrant
|
|
|
48
49
|
# can be found by reading the documentation on {Vagrant::Systems::Base}.
|
|
49
50
|
#
|
|
50
51
|
# **This method should never be called manually.**
|
|
51
|
-
def load_system!
|
|
52
|
-
system
|
|
52
|
+
def load_system!(system=nil)
|
|
53
|
+
system ||= env.config.vm.system
|
|
53
54
|
|
|
54
55
|
if system.is_a?(Class)
|
|
56
|
+
raise Errors::VMSystemError, :_key => :invalid_class, :system => system.to_s if !(system <= Systems::Base)
|
|
55
57
|
@system = system.new(self)
|
|
56
|
-
raise Errors::VMSystemError, :_key => :invalid_class, :system => system.to_s if !@system.is_a?(Systems::Base)
|
|
57
58
|
elsif system.is_a?(Symbol)
|
|
58
59
|
# Hard-coded internal systems
|
|
59
|
-
mapping = {
|
|
60
|
+
mapping = {
|
|
61
|
+
:debian => Systems::Debian,
|
|
62
|
+
:gentoo => Systems::Gentoo,
|
|
63
|
+
:redhat => Systems::Redhat,
|
|
64
|
+
:linux => Systems::Linux,
|
|
65
|
+
:solaris => Systems::Solaris
|
|
66
|
+
}
|
|
60
67
|
|
|
61
68
|
raise Errors::VMSystemError, :_key => :unknown_type, :system => system.to_s if !mapping.has_key?(system)
|
|
62
69
|
@system = mapping[system].new(self)
|
|
@@ -65,6 +72,19 @@ module Vagrant
|
|
|
65
72
|
end
|
|
66
73
|
end
|
|
67
74
|
|
|
75
|
+
# Returns the system for this VM, loading the distro of the system if
|
|
76
|
+
# we can.
|
|
77
|
+
def system
|
|
78
|
+
if !@loaded_system_distro && created? && vm.running?
|
|
79
|
+
# Load the system distro for the first time
|
|
80
|
+
result = @system.distro_dispatch
|
|
81
|
+
load_system!(result)
|
|
82
|
+
@loaded_system_distro = true
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
@system
|
|
86
|
+
end
|
|
87
|
+
|
|
68
88
|
# Access the {Vagrant::SSH} object associated with this VM.
|
|
69
89
|
# On the initial call, this will initialize the object. On
|
|
70
90
|
# subsequent calls it will reuse the existing object.
|
data/lib/vagrant.rb
CHANGED
|
@@ -4,25 +4,21 @@ require 'i18n'
|
|
|
4
4
|
require 'virtualbox'
|
|
5
5
|
|
|
6
6
|
module Vagrant
|
|
7
|
-
|
|
8
|
-
# start small, but slowly move everything over.
|
|
9
|
-
|
|
7
|
+
autoload :Action, 'vagrant/action'
|
|
10
8
|
autoload :Box, 'vagrant/box'
|
|
11
9
|
autoload :BoxCollection, 'vagrant/box_collection'
|
|
12
10
|
autoload :CLI, 'vagrant/cli'
|
|
13
11
|
autoload :Config, 'vagrant/config'
|
|
14
12
|
autoload :DataStore, 'vagrant/data_store'
|
|
13
|
+
autoload :Downloaders, 'vagrant/downloaders'
|
|
14
|
+
autoload :Environment, 'vagrant/environment'
|
|
15
15
|
autoload :Errors, 'vagrant/errors'
|
|
16
|
+
autoload :Hosts, 'vagrant/hosts'
|
|
16
17
|
autoload :Plugin, 'vagrant/plugin'
|
|
17
18
|
autoload :TestHelpers, 'vagrant/test_helpers'
|
|
19
|
+
autoload :UI, 'vagrant/ui'
|
|
18
20
|
autoload :Util, 'vagrant/util'
|
|
19
|
-
|
|
20
|
-
module Command
|
|
21
|
-
autoload :Base, 'vagrant/command/base'
|
|
22
|
-
autoload :GroupBase, 'vagrant/command/group_base'
|
|
23
|
-
autoload :Helpers, 'vagrant/command/helpers'
|
|
24
|
-
autoload :NamedBase, 'vagrant/command/named_base'
|
|
25
|
-
end
|
|
21
|
+
autoload :VM, 'vagrant/vm'
|
|
26
22
|
|
|
27
23
|
# The source root is the path to the root directory of
|
|
28
24
|
# the Vagrant gem.
|
|
@@ -34,13 +30,13 @@ end
|
|
|
34
30
|
# Default I18n to load the en locale
|
|
35
31
|
I18n.load_path << File.expand_path("templates/locales/en.yml", Vagrant.source_root)
|
|
36
32
|
|
|
37
|
-
# Load
|
|
38
|
-
#
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
33
|
+
# Load the things which must be loaded before anything else. Note that
|
|
34
|
+
# I'm not sure why 'vagrant/ssh' must be loaded. But if I don't, I get
|
|
35
|
+
# a very scary "unsupported cipher" error from net-ssh for no apparent reason.
|
|
36
|
+
require 'vagrant/command'
|
|
37
|
+
require 'vagrant/provisioners'
|
|
38
|
+
require 'vagrant/systems'
|
|
39
|
+
require 'vagrant/ssh'
|
|
40
|
+
require 'vagrant/version'
|
|
45
41
|
Vagrant::Action.builtin!
|
|
46
42
|
Vagrant::Plugin.load!
|
|
@@ -4,8 +4,16 @@ node_name "<%= node_name %>"
|
|
|
4
4
|
file_cache_path "<%= provisioning_path %>"
|
|
5
5
|
cookbook_path <%= cookbooks_path %>
|
|
6
6
|
role_path <%= roles_path %>
|
|
7
|
-
log_level
|
|
7
|
+
log_level <%= log_level.inspect %>
|
|
8
8
|
|
|
9
|
-
<% if recipe_url
|
|
9
|
+
<% if recipe_url -%>
|
|
10
10
|
recipe_url "<%= recipe_url %>"
|
|
11
|
-
<% end
|
|
11
|
+
<% end -%>
|
|
12
|
+
|
|
13
|
+
http_proxy <%= http_proxy.inspect %>
|
|
14
|
+
http_proxy_user <%= http_proxy_user.inspect %>
|
|
15
|
+
http_proxy_pass <%= http_proxy_pass.inspect %>
|
|
16
|
+
https_proxy <%= https_proxy.inspect %>
|
|
17
|
+
https_proxy_user <%= https_proxy_user.inspect %>
|
|
18
|
+
https_proxy_pass <%= https_proxy_pass.inspect %>
|
|
19
|
+
no_proxy <%= no_proxy.inspect %>
|
|
@@ -24,18 +24,19 @@ Vagrant::Config.run do |config|
|
|
|
24
24
|
# Share an additional folder to the guest VM. The first argument is
|
|
25
25
|
# an identifier, the second is the path on the guest to mount the
|
|
26
26
|
# folder, and the third is the path on the host to the actual folder.
|
|
27
|
-
# config.vm.share_folder
|
|
27
|
+
# config.vm.share_folder "v-data", "/vagrant_data", "../data"
|
|
28
28
|
|
|
29
29
|
# Enable provisioning with chef solo, specifying a cookbooks path (relative
|
|
30
30
|
# to this Vagrantfile), and adding some recipes and/or roles.
|
|
31
31
|
#
|
|
32
|
-
# config.vm.
|
|
33
|
-
#
|
|
34
|
-
#
|
|
35
|
-
#
|
|
32
|
+
# config.vm.provision :chef_solo do |chef|
|
|
33
|
+
# chef.cookbooks_path = "cookbooks"
|
|
34
|
+
# chef.add_recipe "mysql"
|
|
35
|
+
# chef.add_role "web"
|
|
36
36
|
#
|
|
37
|
-
# You may also specify custom JSON attributes:
|
|
38
|
-
#
|
|
37
|
+
# # You may also specify custom JSON attributes:
|
|
38
|
+
# chef.json = { :mysql_password => "foo" }
|
|
39
|
+
# end
|
|
39
40
|
|
|
40
41
|
# Enable provisioning with chef server, specifying the chef server URL,
|
|
41
42
|
# and the path to the validation key (relative to this Vagrantfile).
|
|
@@ -47,9 +48,10 @@ Vagrant::Config.run do |config|
|
|
|
47
48
|
# HTTP instead of HTTPS depending on your configuration. Also change the
|
|
48
49
|
# validation key to validation.pem.
|
|
49
50
|
#
|
|
50
|
-
# config.vm.
|
|
51
|
-
#
|
|
52
|
-
#
|
|
51
|
+
# config.vm.provision :chef_server do |chef|
|
|
52
|
+
# chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
|
|
53
|
+
# chef.validation_key_path = "ORGNAME-validator.pem"
|
|
54
|
+
# end
|
|
53
55
|
#
|
|
54
56
|
# If you're using the Opscode platform, your validator client is
|
|
55
57
|
# ORGNAME-validator, replacing ORGNAME with your organization name.
|
|
@@ -57,5 +59,5 @@ Vagrant::Config.run do |config|
|
|
|
57
59
|
# IF you have your own Chef Server, the default validation client name is
|
|
58
60
|
# chef-validator, unless you changed the configuration.
|
|
59
61
|
#
|
|
60
|
-
#
|
|
62
|
+
# chef.validation_client_name = "ORGNAME-validator"
|
|
61
63
|
end
|