rvagrant 0.8.7.dev
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 +25 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +386 -0
- data/Gemfile +21 -0
- data/LICENSE +21 -0
- data/README.md +61 -0
- data/Rakefile +11 -0
- data/bin/vagrant +28 -0
- data/config/default.rb +38 -0
- data/contrib/README.md +12 -0
- data/contrib/emacs/vagrant.el +8 -0
- data/contrib/vim/vagrantfile.vim +9 -0
- data/keys/README.md +17 -0
- data/keys/vagrant +27 -0
- data/keys/vagrant.ppk +26 -0
- data/keys/vagrant.pub +1 -0
- data/lib/vagrant.rb +44 -0
- data/lib/vagrant/action.rb +138 -0
- data/lib/vagrant/action/box.rb +11 -0
- data/lib/vagrant/action/box/destroy.rb +21 -0
- data/lib/vagrant/action/box/download.rb +72 -0
- data/lib/vagrant/action/box/package.rb +19 -0
- data/lib/vagrant/action/box/unpackage.rb +55 -0
- data/lib/vagrant/action/box/verify.rb +23 -0
- data/lib/vagrant/action/builder.rb +124 -0
- data/lib/vagrant/action/builtin.rb +108 -0
- data/lib/vagrant/action/env.rb +7 -0
- data/lib/vagrant/action/env/set.rb +18 -0
- data/lib/vagrant/action/environment.rb +50 -0
- data/lib/vagrant/action/general.rb +8 -0
- data/lib/vagrant/action/general/package.rb +113 -0
- data/lib/vagrant/action/general/validate.rb +19 -0
- data/lib/vagrant/action/vm.rb +34 -0
- data/lib/vagrant/action/vm/boot.rb +48 -0
- data/lib/vagrant/action/vm/check_accessible.rb +23 -0
- data/lib/vagrant/action/vm/check_box.rb +28 -0
- data/lib/vagrant/action/vm/check_guest_additions.rb +35 -0
- data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
- data/lib/vagrant/action/vm/clear_forwarded_ports.rb +26 -0
- data/lib/vagrant/action/vm/clear_nfs_exports.rb +20 -0
- data/lib/vagrant/action/vm/clear_shared_folders.rb +27 -0
- data/lib/vagrant/action/vm/customize.rb +26 -0
- data/lib/vagrant/action/vm/destroy.rb +19 -0
- data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +30 -0
- data/lib/vagrant/action/vm/discard_state.rb +22 -0
- data/lib/vagrant/action/vm/export.rb +52 -0
- data/lib/vagrant/action/vm/forward_ports.rb +133 -0
- data/lib/vagrant/action/vm/forward_ports_helpers.rb +28 -0
- data/lib/vagrant/action/vm/halt.rb +29 -0
- data/lib/vagrant/action/vm/host_name.rb +21 -0
- data/lib/vagrant/action/vm/import.rb +40 -0
- data/lib/vagrant/action/vm/match_mac_address.rb +26 -0
- data/lib/vagrant/action/vm/modify.rb +37 -0
- data/lib/vagrant/action/vm/network.rb +146 -0
- data/lib/vagrant/action/vm/nfs.rb +160 -0
- data/lib/vagrant/action/vm/nfs_helpers.rb +11 -0
- data/lib/vagrant/action/vm/package.rb +23 -0
- data/lib/vagrant/action/vm/package_vagrantfile.rb +33 -0
- data/lib/vagrant/action/vm/provision.rb +34 -0
- data/lib/vagrant/action/vm/provisioner_cleanup.rb +26 -0
- data/lib/vagrant/action/vm/resume.rb +20 -0
- data/lib/vagrant/action/vm/share_folders.rb +78 -0
- data/lib/vagrant/action/vm/suspend.rb +20 -0
- data/lib/vagrant/action/warden.rb +85 -0
- data/lib/vagrant/box.rb +90 -0
- data/lib/vagrant/box_collection.rb +53 -0
- data/lib/vagrant/cli.rb +55 -0
- data/lib/vagrant/command.rb +25 -0
- data/lib/vagrant/command/base.rb +106 -0
- data/lib/vagrant/command/box.rb +33 -0
- data/lib/vagrant/command/destroy.rb +17 -0
- data/lib/vagrant/command/group_base.rb +107 -0
- data/lib/vagrant/command/halt.rb +18 -0
- data/lib/vagrant/command/helpers.rb +33 -0
- data/lib/vagrant/command/init.rb +14 -0
- data/lib/vagrant/command/named_base.rb +14 -0
- data/lib/vagrant/command/package.rb +41 -0
- data/lib/vagrant/command/provision.rb +23 -0
- data/lib/vagrant/command/reload.rb +17 -0
- data/lib/vagrant/command/resume.rb +17 -0
- data/lib/vagrant/command/ssh.rb +49 -0
- data/lib/vagrant/command/ssh_config.rb +29 -0
- data/lib/vagrant/command/status.rb +31 -0
- data/lib/vagrant/command/suspend.rb +17 -0
- data/lib/vagrant/command/up.rb +19 -0
- data/lib/vagrant/command/upgrade_to_060.rb +45 -0
- data/lib/vagrant/command/version.rb +13 -0
- data/lib/vagrant/config.rb +123 -0
- data/lib/vagrant/config/base.rb +85 -0
- data/lib/vagrant/config/error_recorder.rb +19 -0
- data/lib/vagrant/config/nfs.rb +10 -0
- data/lib/vagrant/config/package.rb +9 -0
- data/lib/vagrant/config/ssh.rb +38 -0
- data/lib/vagrant/config/top.rb +61 -0
- data/lib/vagrant/config/vagrant.rb +17 -0
- data/lib/vagrant/config/vm.rb +148 -0
- data/lib/vagrant/config/vm/provisioner.rb +56 -0
- data/lib/vagrant/config/vm/sub_vm.rb +17 -0
- data/lib/vagrant/data_store.rb +70 -0
- data/lib/vagrant/downloaders.rb +7 -0
- data/lib/vagrant/downloaders/base.rb +23 -0
- data/lib/vagrant/downloaders/file.rb +22 -0
- data/lib/vagrant/downloaders/http.rb +70 -0
- data/lib/vagrant/environment.rb +516 -0
- data/lib/vagrant/errors.rb +352 -0
- data/lib/vagrant/hosts.rb +9 -0
- data/lib/vagrant/hosts/arch.rb +27 -0
- data/lib/vagrant/hosts/base.rb +76 -0
- data/lib/vagrant/hosts/bsd.rb +58 -0
- data/lib/vagrant/hosts/fedora.rb +11 -0
- data/lib/vagrant/hosts/linux.rb +69 -0
- data/lib/vagrant/plugin.rb +79 -0
- data/lib/vagrant/provisioners.rb +9 -0
- data/lib/vagrant/provisioners/base.rb +67 -0
- data/lib/vagrant/provisioners/chef.rb +155 -0
- data/lib/vagrant/provisioners/chef_client.rb +120 -0
- data/lib/vagrant/provisioners/chef_solo.rb +135 -0
- data/lib/vagrant/provisioners/puppet.rb +137 -0
- data/lib/vagrant/provisioners/puppet_server.rb +55 -0
- data/lib/vagrant/provisioners/shell.rb +96 -0
- data/lib/vagrant/ssh.rb +224 -0
- data/lib/vagrant/ssh/session.rb +136 -0
- data/lib/vagrant/systems.rb +13 -0
- data/lib/vagrant/systems/arch.rb +34 -0
- data/lib/vagrant/systems/base.rb +87 -0
- data/lib/vagrant/systems/debian.rb +36 -0
- data/lib/vagrant/systems/freebsd.rb +84 -0
- data/lib/vagrant/systems/gentoo.rb +27 -0
- data/lib/vagrant/systems/linux.rb +82 -0
- data/lib/vagrant/systems/linux/config.rb +21 -0
- data/lib/vagrant/systems/linux/error.rb +9 -0
- data/lib/vagrant/systems/redhat.rb +48 -0
- data/lib/vagrant/systems/solaris.rb +67 -0
- data/lib/vagrant/systems/suse.rb +9 -0
- data/lib/vagrant/systems/ubuntu.rb +17 -0
- data/lib/vagrant/test_helpers.rb +128 -0
- data/lib/vagrant/ui.rb +81 -0
- data/lib/vagrant/util.rb +13 -0
- data/lib/vagrant/util/busy.rb +59 -0
- data/lib/vagrant/util/counter.rb +24 -0
- data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
- data/lib/vagrant/util/platform.rb +57 -0
- data/lib/vagrant/util/retryable.rb +25 -0
- data/lib/vagrant/util/safe_exec.rb +35 -0
- data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
- data/lib/vagrant/util/template_renderer.rb +83 -0
- data/lib/vagrant/version.rb +6 -0
- data/lib/vagrant/vm.rb +181 -0
- data/templates/chef_server_client.erb +32 -0
- data/templates/chef_solo_solo.erb +23 -0
- data/templates/commands/init/Vagrantfile.erb +86 -0
- data/templates/config/validation_failed.erb +7 -0
- data/templates/locales/en.yml +556 -0
- data/templates/network_entry_arch.erb +9 -0
- data/templates/network_entry_debian.erb +8 -0
- data/templates/network_entry_gentoo.erb +5 -0
- data/templates/network_entry_redhat.erb +9 -0
- data/templates/nfs/exports.erb +5 -0
- data/templates/nfs/exports_linux.erb +5 -0
- data/templates/package_Vagrantfile.erb +11 -0
- data/templates/ssh_config.erb +15 -0
- data/test/unit/locales/en.yml +8 -0
- data/test/unit/test_helper.rb +28 -0
- data/test/unit/vagrant/action/box/destroy_test.rb +18 -0
- data/test/unit/vagrant/action/box/download_test.rb +125 -0
- data/test/unit/vagrant/action/box/package_test.rb +25 -0
- data/test/unit/vagrant/action/box/unpackage_test.rb +84 -0
- data/test/unit/vagrant/action/box/verify_test.rb +30 -0
- data/test/unit/vagrant/action/builder_test.rb +207 -0
- data/test/unit/vagrant/action/env/set_test.rb +24 -0
- data/test/unit/vagrant/action/environment_test.rb +27 -0
- data/test/unit/vagrant/action/general/package_test.rb +268 -0
- data/test/unit/vagrant/action/general/validate_test.rb +31 -0
- data/test/unit/vagrant/action/vm/boot_test.rb +66 -0
- data/test/unit/vagrant/action/vm/check_accessible_test.rb +61 -0
- data/test/unit/vagrant/action/vm/check_box_test.rb +56 -0
- data/test/unit/vagrant/action/vm/check_guest_additions_test.rb +9 -0
- data/test/unit/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
- data/test/unit/vagrant/action/vm/clear_forwarded_ports_test.rb +52 -0
- data/test/unit/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
- data/test/unit/vagrant/action/vm/clear_shared_folders_test.rb +40 -0
- data/test/unit/vagrant/action/vm/customize_test.rb +37 -0
- data/test/unit/vagrant/action/vm/destroy_test.rb +25 -0
- data/test/unit/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
- data/test/unit/vagrant/action/vm/discard_state_test.rb +45 -0
- data/test/unit/vagrant/action/vm/export_test.rb +107 -0
- data/test/unit/vagrant/action/vm/forward_ports_helpers_test.rb +77 -0
- data/test/unit/vagrant/action/vm/forward_ports_test.rb +213 -0
- data/test/unit/vagrant/action/vm/halt_test.rb +79 -0
- data/test/unit/vagrant/action/vm/host_name_test.rb +36 -0
- data/test/unit/vagrant/action/vm/import_test.rb +66 -0
- data/test/unit/vagrant/action/vm/match_mac_address_test.rb +40 -0
- data/test/unit/vagrant/action/vm/modify_test.rb +38 -0
- data/test/unit/vagrant/action/vm/network_test.rb +286 -0
- data/test/unit/vagrant/action/vm/nfs_helpers_test.rb +26 -0
- data/test/unit/vagrant/action/vm/nfs_test.rb +260 -0
- data/test/unit/vagrant/action/vm/package_test.rb +25 -0
- data/test/unit/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
- data/test/unit/vagrant/action/vm/provision_test.rb +65 -0
- data/test/unit/vagrant/action/vm/provisioner_cleanup_test.rb +56 -0
- data/test/unit/vagrant/action/vm/resume_test.rb +35 -0
- data/test/unit/vagrant/action/vm/share_folders_test.rb +144 -0
- data/test/unit/vagrant/action/vm/suspend_test.rb +35 -0
- data/test/unit/vagrant/action/warden_test.rb +125 -0
- data/test/unit/vagrant/action_test.rb +89 -0
- data/test/unit/vagrant/box_collection_test.rb +45 -0
- data/test/unit/vagrant/box_test.rb +74 -0
- data/test/unit/vagrant/cli_test.rb +35 -0
- data/test/unit/vagrant/command/base_test.rb +23 -0
- data/test/unit/vagrant/command/group_base_test.rb +15 -0
- data/test/unit/vagrant/command/helpers_test.rb +88 -0
- data/test/unit/vagrant/command/package_test.rb +27 -0
- data/test/unit/vagrant/config/base_test.rb +52 -0
- data/test/unit/vagrant/config/error_recorder_test.rb +18 -0
- data/test/unit/vagrant/config/ssh_test.rb +12 -0
- data/test/unit/vagrant/config/vagrant_test.rb +35 -0
- data/test/unit/vagrant/config/vm/provisioner_test.rb +92 -0
- data/test/unit/vagrant/config/vm_test.rb +56 -0
- data/test/unit/vagrant/config_test.rb +162 -0
- data/test/unit/vagrant/data_store_test.rb +77 -0
- data/test/unit/vagrant/downloaders/base_test.rb +28 -0
- data/test/unit/vagrant/downloaders/file_test.rb +48 -0
- data/test/unit/vagrant/downloaders/http_test.rb +82 -0
- data/test/unit/vagrant/environment_test.rb +598 -0
- data/test/unit/vagrant/errors_test.rb +42 -0
- data/test/unit/vagrant/hosts/base_test.rb +46 -0
- data/test/unit/vagrant/hosts/bsd_test.rb +53 -0
- data/test/unit/vagrant/hosts/linux_test.rb +54 -0
- data/test/unit/vagrant/plugin_test.rb +9 -0
- data/test/unit/vagrant/provisioners/base_test.rb +63 -0
- data/test/unit/vagrant/provisioners/chef_client_test.rb +190 -0
- data/test/unit/vagrant/provisioners/chef_solo_test.rb +114 -0
- data/test/unit/vagrant/provisioners/chef_test.rb +202 -0
- data/test/unit/vagrant/provisioners/puppet_server_test.rb +68 -0
- data/test/unit/vagrant/provisioners/puppet_test.rb +182 -0
- data/test/unit/vagrant/provisioners/shell_test.rb +79 -0
- data/test/unit/vagrant/ssh/session_test.rb +40 -0
- data/test/unit/vagrant/ssh_test.rb +307 -0
- data/test/unit/vagrant/systems/base_test.rb +18 -0
- data/test/unit/vagrant/systems/linux_test.rb +104 -0
- data/test/unit/vagrant/ui_test.rb +29 -0
- data/test/unit/vagrant/util/busy_test.rb +106 -0
- data/test/unit/vagrant/util/counter_test.rb +29 -0
- data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +39 -0
- data/test/unit/vagrant/util/platform_test.rb +18 -0
- data/test/unit/vagrant/util/retryable_test.rb +50 -0
- data/test/unit/vagrant/util/stacked_proc_runner_test.rb +43 -0
- data/test/unit/vagrant/util/template_renderer_test.rb +145 -0
- data/test/unit/vagrant/vm_test.rb +300 -0
- data/vagrant.gemspec +35 -0
- metadata +431 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require 'rbconfig'
|
|
2
|
+
|
|
3
|
+
module Vagrant
|
|
4
|
+
module Util
|
|
5
|
+
# This class just contains some platform checking code.
|
|
6
|
+
class Platform
|
|
7
|
+
class << self
|
|
8
|
+
def tiger?
|
|
9
|
+
platform.include?("darwin8")
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def leopard?
|
|
13
|
+
platform.include?("darwin9")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
[:darwin, :bsd, :linux].each do |type|
|
|
17
|
+
define_method("#{type}?") do
|
|
18
|
+
platform.include?(type.to_s)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def windows?
|
|
23
|
+
%W[mingw mswin].each do |text|
|
|
24
|
+
return true if platform.include?(text)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
false
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Returns boolean noting whether this is a 64-bit CPU. This
|
|
31
|
+
# is not 100% accurate and there could easily be false negatives.
|
|
32
|
+
#
|
|
33
|
+
# @return [Boolean]
|
|
34
|
+
def bit64?
|
|
35
|
+
["x86_64", "amd64"].include?(RbConfig::CONFIG["host_cpu"])
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Returns boolean noting whether this is a 32-bit CPU. This
|
|
39
|
+
# can easily throw false positives since it relies on {#bit64?}.
|
|
40
|
+
#
|
|
41
|
+
# @return [Boolean]
|
|
42
|
+
def bit32?
|
|
43
|
+
!bit64?
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def tar_file_options
|
|
47
|
+
# create, write only, fail if the file exists, binary if windows
|
|
48
|
+
File::WRONLY | File::EXCL | File::CREAT | (windows? ? File::BINARY : 0)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def platform
|
|
52
|
+
RbConfig::CONFIG["host_os"].downcase
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
module Util
|
|
3
|
+
module Retryable
|
|
4
|
+
# Retries a given block a specified number of times in the
|
|
5
|
+
# event the specified exception is raised. If the retries
|
|
6
|
+
# run out, the final exception is raised.
|
|
7
|
+
#
|
|
8
|
+
# This code is adapted slightly from the following blog post:
|
|
9
|
+
# http://blog.codefront.net/2008/01/14/retrying-code-blocks-in-ruby-on-exceptions-whatever/
|
|
10
|
+
def retryable(opts=nil)
|
|
11
|
+
opts = { :tries => 1, :on => Exception }.merge(opts || {})
|
|
12
|
+
|
|
13
|
+
begin
|
|
14
|
+
return yield
|
|
15
|
+
rescue *opts[:on]
|
|
16
|
+
if (opts[:tries] -= 1) > 0
|
|
17
|
+
sleep opts[:sleep].to_f if opts[:sleep]
|
|
18
|
+
retry
|
|
19
|
+
end
|
|
20
|
+
raise
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
module Util
|
|
3
|
+
# This module provies a `safe_exec` method which is a drop-in
|
|
4
|
+
# replacement for `Kernel.exec` which addresses a specific issue
|
|
5
|
+
# which manifests on OS X 10.5 and perhaps other operating systems.
|
|
6
|
+
# This issue causes `exec` to fail if there is more than one system
|
|
7
|
+
# thread. In that case, `safe_exec` automatically falls back to
|
|
8
|
+
# forking.
|
|
9
|
+
module SafeExec
|
|
10
|
+
def safe_exec(command)
|
|
11
|
+
# Create a list of things to rescue from. Since this is OS
|
|
12
|
+
# specific, we need to do some defined? checks here to make
|
|
13
|
+
# sure they exist.
|
|
14
|
+
rescue_from = []
|
|
15
|
+
rescue_from << Errno::EOPNOTSUPP if defined?(Errno::EOPNOTSUPP)
|
|
16
|
+
rescue_from << Errno::E045 if defined?(Errno::E045)
|
|
17
|
+
|
|
18
|
+
fork_instead = false
|
|
19
|
+
begin
|
|
20
|
+
pid = nil
|
|
21
|
+
pid = fork if fork_instead
|
|
22
|
+
Kernel.exec(command) if pid.nil?
|
|
23
|
+
Process.wait(pid) if pid
|
|
24
|
+
rescue *rescue_from
|
|
25
|
+
# We retried already, raise the issue and be done
|
|
26
|
+
raise if fork_instead
|
|
27
|
+
|
|
28
|
+
# The error manifested itself, retry with a fork.
|
|
29
|
+
fork_instead = true
|
|
30
|
+
retry
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
module Util
|
|
3
|
+
# Represents the "stacked proc runner" behavior which is used a
|
|
4
|
+
# couple places within Vagrant. This allows procs to "stack" on
|
|
5
|
+
# each other, then all execute in a single action. An example of
|
|
6
|
+
# its uses can be seen in the {Config} class.
|
|
7
|
+
module StackedProcRunner
|
|
8
|
+
# Returns the proc stack. This should always be called as the
|
|
9
|
+
# accessor of the stack. The instance variable itself should _never_
|
|
10
|
+
# be used.
|
|
11
|
+
#
|
|
12
|
+
# @return [Array<Proc>]
|
|
13
|
+
def proc_stack
|
|
14
|
+
@_proc_stack ||= []
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Adds (pushes) a proc to the stack. The actual proc added here is
|
|
18
|
+
# not executed, but merely stored.
|
|
19
|
+
#
|
|
20
|
+
# @param [Proc] block
|
|
21
|
+
def push_proc(&block)
|
|
22
|
+
proc_stack << block
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Executes all the procs on the stack, passing in the given arguments.
|
|
26
|
+
# The stack is not cleared afterwords. It is up to the user of this
|
|
27
|
+
# mixin to clear the stack by calling `proc_stack.clear`.
|
|
28
|
+
def run_procs!(*args)
|
|
29
|
+
proc_stack.each do |proc|
|
|
30
|
+
proc.call(*args)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
require 'ostruct'
|
|
2
|
+
require 'erubis'
|
|
3
|
+
|
|
4
|
+
module Vagrant
|
|
5
|
+
module Util
|
|
6
|
+
# This class is used to render the ERB templates in the
|
|
7
|
+
# `GEM_ROOT/templates` directory.
|
|
8
|
+
class TemplateRenderer < OpenStruct
|
|
9
|
+
class << self
|
|
10
|
+
# Render a given template and return the result. This method optionally
|
|
11
|
+
# takes a block which will be passed the renderer prior to rendering, which
|
|
12
|
+
# allows the caller to set any view variables within the renderer itself.
|
|
13
|
+
#
|
|
14
|
+
# @return [String] Rendered template
|
|
15
|
+
def render(*args)
|
|
16
|
+
render_with(:render, *args)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Render a given string and return the result. This method optionally
|
|
20
|
+
# takes a block which will be passed the renderer prior to rendering, which
|
|
21
|
+
# allows the caller to set any view variables within the renderer itself.
|
|
22
|
+
#
|
|
23
|
+
# @param [String] template The template data string.
|
|
24
|
+
# @return [String] Rendered template
|
|
25
|
+
def render_string(*args)
|
|
26
|
+
render_with(:render_string, *args)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Method used internally to DRY out the other renderers. This method
|
|
30
|
+
# creates and sets up the renderer before calling a specified method on it.
|
|
31
|
+
def render_with(method, template, data={})
|
|
32
|
+
renderer = new(template, data)
|
|
33
|
+
yield renderer if block_given?
|
|
34
|
+
renderer.send(method.to_sym)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def initialize(template, data = {})
|
|
39
|
+
super()
|
|
40
|
+
|
|
41
|
+
data[:template] = template
|
|
42
|
+
data.each do |key, value|
|
|
43
|
+
send("#{key}=", value)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Renders the template using the class intance as the binding. Because the
|
|
48
|
+
# renderer inherits from `OpenStruct`, additional view variables can be
|
|
49
|
+
# added like normal accessors.
|
|
50
|
+
#
|
|
51
|
+
# @return [String]
|
|
52
|
+
def render
|
|
53
|
+
# TODO: Seems like a pretty dirty way to do this. Perhaps refactor this
|
|
54
|
+
old_template = template
|
|
55
|
+
result = nil
|
|
56
|
+
File.open(full_template_path, 'r') do |f|
|
|
57
|
+
self.template = f.read
|
|
58
|
+
result = render_string
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
result
|
|
62
|
+
ensure
|
|
63
|
+
self.template = old_template
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Renders a template, handling the template as a string, but otherwise
|
|
67
|
+
# acting the same way as {#render}.
|
|
68
|
+
#
|
|
69
|
+
# @return [String]
|
|
70
|
+
def render_string
|
|
71
|
+
Erubis::Eruby.new(template, :trim => true).result(binding)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Returns the full path to the template, taking into accoun the gem directory
|
|
75
|
+
# and adding the `.erb` extension to the end.
|
|
76
|
+
#
|
|
77
|
+
# @return [String]
|
|
78
|
+
def full_template_path
|
|
79
|
+
Vagrant.source_root.join('templates', "#{template}.erb").to_s.squeeze("/")
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
data/lib/vagrant/vm.rb
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
module Vagrant
|
|
2
|
+
class VM
|
|
3
|
+
include Vagrant::Util
|
|
4
|
+
|
|
5
|
+
attr_reader :env
|
|
6
|
+
attr_reader :name
|
|
7
|
+
attr_reader :vm
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
# Finds a virtual machine by a given UUID and either returns
|
|
11
|
+
# a Vagrant::VM object or returns nil.
|
|
12
|
+
def find(uuid, env=nil, name=nil)
|
|
13
|
+
vm = VirtualBox::VM.find(uuid)
|
|
14
|
+
new(:vm => vm, :env => env, :name => name)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def initialize(opts=nil)
|
|
19
|
+
defaults = {
|
|
20
|
+
:vm => nil,
|
|
21
|
+
:env => nil,
|
|
22
|
+
:name => nil
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
opts = defaults.merge(opts || {})
|
|
26
|
+
|
|
27
|
+
@vm = opts[:vm]
|
|
28
|
+
@name = opts[:name]
|
|
29
|
+
|
|
30
|
+
if !opts[:env].nil?
|
|
31
|
+
# We have an environment, so we create a new child environment
|
|
32
|
+
# specifically for this VM. This step will load any custom
|
|
33
|
+
# config and such.
|
|
34
|
+
@env = Vagrant::Environment.new({
|
|
35
|
+
:cwd => opts[:env].cwd,
|
|
36
|
+
:parent => opts[:env],
|
|
37
|
+
:vm => self
|
|
38
|
+
}).load!
|
|
39
|
+
|
|
40
|
+
# Load the associated system.
|
|
41
|
+
load_system!
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
@loaded_system_distro = false
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Loads the system associated with the VM. The system class is
|
|
48
|
+
# responsible for OS-specific functionality. More information
|
|
49
|
+
# can be found by reading the documentation on {Vagrant::Systems::Base}.
|
|
50
|
+
#
|
|
51
|
+
# **This method should never be called manually.**
|
|
52
|
+
def load_system!(system=nil)
|
|
53
|
+
system ||= env.config.vm.system
|
|
54
|
+
env.logger.info("vm: #{name}") { "Loading system: #{system}" }
|
|
55
|
+
|
|
56
|
+
if system.is_a?(Class)
|
|
57
|
+
raise Errors::VMSystemError, :_key => :invalid_class, :system => system.to_s if !(system <= Systems::Base)
|
|
58
|
+
@system = system.new(self)
|
|
59
|
+
elsif system.is_a?(Symbol)
|
|
60
|
+
# Hard-coded internal systems
|
|
61
|
+
mapping = {
|
|
62
|
+
:debian => Systems::Debian,
|
|
63
|
+
:ubuntu => Systems::Ubuntu,
|
|
64
|
+
:freebsd => Systems::FreeBSD,
|
|
65
|
+
:gentoo => Systems::Gentoo,
|
|
66
|
+
:redhat => Systems::Redhat,
|
|
67
|
+
:suse => Systems::Suse,
|
|
68
|
+
:linux => Systems::Linux,
|
|
69
|
+
:solaris => Systems::Solaris,
|
|
70
|
+
:arch => Systems::Arch
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
raise Errors::VMSystemError, :_key => :unknown_type, :system => system.to_s if !mapping.has_key?(system)
|
|
74
|
+
@system = mapping[system].new(self)
|
|
75
|
+
else
|
|
76
|
+
raise Errors::VMSystemError, :unspecified
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Returns the system for this VM, loading the distro of the system if
|
|
81
|
+
# we can.
|
|
82
|
+
def system
|
|
83
|
+
if !@loaded_system_distro && created? && vm.running?
|
|
84
|
+
# Load the system distro for the first time
|
|
85
|
+
result = @system.distro_dispatch
|
|
86
|
+
load_system!(result)
|
|
87
|
+
@loaded_system_distro = true
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
@system
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Access the {Vagrant::SSH} object associated with this VM.
|
|
94
|
+
# On the initial call, this will initialize the object. On
|
|
95
|
+
# subsequent calls it will reuse the existing object.
|
|
96
|
+
def ssh
|
|
97
|
+
@ssh ||= SSH.new(env)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Returns a boolean true if the VM has been created, otherwise
|
|
101
|
+
# returns false.
|
|
102
|
+
#
|
|
103
|
+
# @return [Boolean]
|
|
104
|
+
def created?
|
|
105
|
+
!vm.nil?
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Sets the currently active VM for this VM. If the VM is a valid,
|
|
109
|
+
# created virtual machine, then it will also update the local data
|
|
110
|
+
# to persist the VM. Otherwise, it will remove itself from the
|
|
111
|
+
# local data (if it exists).
|
|
112
|
+
def vm=(value)
|
|
113
|
+
@vm = value
|
|
114
|
+
env.local_data[:active] ||= {}
|
|
115
|
+
|
|
116
|
+
if value && value.uuid
|
|
117
|
+
env.local_data[:active][name.to_s] = value.uuid
|
|
118
|
+
else
|
|
119
|
+
env.local_data[:active].delete(name.to_s)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Commit the local data so that the next time vagrant is initialized,
|
|
123
|
+
# it realizes the VM exists
|
|
124
|
+
env.local_data.commit
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def uuid
|
|
128
|
+
vm ? vm.uuid : nil
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def reload!
|
|
132
|
+
@vm = VirtualBox::VM.find(@vm.uuid)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def package(options=nil)
|
|
136
|
+
env.actions.run(:package, { "validate" => false }.merge(options || {}))
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def up(options=nil)
|
|
140
|
+
env.actions.run(:up, options)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def start(options=nil)
|
|
144
|
+
raise Errors::VMInaccessible if !@vm.accessible?
|
|
145
|
+
return if @vm.running?
|
|
146
|
+
return resume if @vm.saved?
|
|
147
|
+
|
|
148
|
+
env.actions.run(:start, options)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def halt(options=nil)
|
|
152
|
+
env.actions.run(:halt, options)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def reload
|
|
156
|
+
env.actions.run(:reload)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def provision
|
|
160
|
+
env.actions.run(:provision)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def destroy
|
|
164
|
+
env.actions.run(:destroy)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def suspend
|
|
168
|
+
env.actions.run(:suspend)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def resume
|
|
172
|
+
env.actions.run(:resume)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def saved?
|
|
176
|
+
@vm.saved?
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def powered_off?; @vm.powered_off? end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
log_level <%= log_level.inspect %>
|
|
2
|
+
log_location STDOUT
|
|
3
|
+
<% if node_name %>
|
|
4
|
+
node_name "<%= node_name %>"
|
|
5
|
+
<% end %>
|
|
6
|
+
ssl_verify_mode :verify_none
|
|
7
|
+
chef_server_url "<%= chef_server_url %>"
|
|
8
|
+
|
|
9
|
+
validation_client_name "<%= validation_client_name %>"
|
|
10
|
+
validation_key "<%= validation_key %>"
|
|
11
|
+
client_key "<%= client_key %>"
|
|
12
|
+
|
|
13
|
+
encrypted_data_bag_secret "<%= encrypted_data_bag_secret %>"
|
|
14
|
+
|
|
15
|
+
<% unless environment.nil? %>
|
|
16
|
+
environment "<%= environment %>"
|
|
17
|
+
<% end %>
|
|
18
|
+
|
|
19
|
+
file_cache_path "<%= file_cache_path %>"
|
|
20
|
+
file_backup_path "<%= file_backup_path %>"
|
|
21
|
+
|
|
22
|
+
http_proxy <%= http_proxy.inspect %>
|
|
23
|
+
http_proxy_user <%= http_proxy_user.inspect %>
|
|
24
|
+
http_proxy_pass <%= http_proxy_pass.inspect %>
|
|
25
|
+
https_proxy <%= https_proxy.inspect %>
|
|
26
|
+
https_proxy_user <%= https_proxy_user.inspect %>
|
|
27
|
+
https_proxy_pass <%= https_proxy_pass.inspect %>
|
|
28
|
+
no_proxy <%= no_proxy.inspect %>
|
|
29
|
+
|
|
30
|
+
pid_file "/var/run/chef/chef-client.pid"
|
|
31
|
+
|
|
32
|
+
Mixlib::Log::Formatter.show_time = true
|