fixed-vagrant 0.7.4.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 +15 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +272 -0
- data/Gemfile +21 -0
- data/LICENSE +21 -0
- data/README.md +75 -0
- data/Rakefile +22 -0
- data/bin/vagrant +22 -0
- data/config/default.rb +39 -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 +42 -0
- data/lib/vagrant/action.rb +134 -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 +104 -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 +109 -0
- data/lib/vagrant/action/general/validate.rb +19 -0
- data/lib/vagrant/action/vm.rb +31 -0
- data/lib/vagrant/action/vm/boot.rb +48 -0
- data/lib/vagrant/action/vm/check_box.rb +28 -0
- data/lib/vagrant/action/vm/check_guest_additions.rb +30 -0
- data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
- data/lib/vagrant/action/vm/clear_forwarded_ports.rb +39 -0
- data/lib/vagrant/action/vm/clear_nfs_exports.rb +20 -0
- data/lib/vagrant/action/vm/clear_shared_folders.rb +32 -0
- data/lib/vagrant/action/vm/customize.rb +21 -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 +134 -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 +35 -0
- data/lib/vagrant/action/vm/match_mac_address.rb +21 -0
- data/lib/vagrant/action/vm/network.rb +139 -0
- data/lib/vagrant/action/vm/nfs.rb +159 -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 +41 -0
- data/lib/vagrant/action/vm/resume.rb +20 -0
- data/lib/vagrant/action/vm/share_folders.rb +70 -0
- data/lib/vagrant/action/vm/suspend.rb +20 -0
- data/lib/vagrant/action/warden.rb +79 -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 +17 -0
- data/lib/vagrant/command/reload.rb +17 -0
- data/lib/vagrant/command/resume.rb +17 -0
- data/lib/vagrant/command/ssh.rb +42 -0
- data/lib/vagrant/command/ssh_config.rb +26 -0
- data/lib/vagrant/command/status.rb +22 -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 +33 -0
- data/lib/vagrant/config/top.rb +61 -0
- data/lib/vagrant/config/vagrant.rb +16 -0
- data/lib/vagrant/config/vm.rb +137 -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 +64 -0
- data/lib/vagrant/environment.rb +392 -0
- data/lib/vagrant/errors.rb +332 -0
- data/lib/vagrant/hosts.rb +8 -0
- data/lib/vagrant/hosts/arch.rb +27 -0
- data/lib/vagrant/hosts/base.rb +78 -0
- data/lib/vagrant/hosts/bsd.rb +52 -0
- data/lib/vagrant/hosts/linux.rb +47 -0
- data/lib/vagrant/plugin.rb +57 -0
- data/lib/vagrant/provisioners.rb +9 -0
- data/lib/vagrant/provisioners/base.rb +63 -0
- data/lib/vagrant/provisioners/chef.rb +130 -0
- data/lib/vagrant/provisioners/chef_server.rb +103 -0
- data/lib/vagrant/provisioners/chef_solo.rb +142 -0
- data/lib/vagrant/provisioners/puppet.rb +137 -0
- data/lib/vagrant/provisioners/puppet_server.rb +55 -0
- data/lib/vagrant/provisioners/shell.rb +52 -0
- data/lib/vagrant/ssh.rb +173 -0
- data/lib/vagrant/ssh/session.rb +125 -0
- data/lib/vagrant/systems.rb +11 -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 +83 -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 +39 -0
- data/lib/vagrant/systems/solaris.rb +62 -0
- data/lib/vagrant/systems/ubuntu.rb +17 -0
- data/lib/vagrant/test_helpers.rb +128 -0
- data/lib/vagrant/ui.rb +69 -0
- data/lib/vagrant/util.rb +13 -0
- data/lib/vagrant/util/busy.rb +59 -0
- data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
- data/lib/vagrant/util/plain_logger.rb +25 -0
- data/lib/vagrant/util/platform.rb +65 -0
- data/lib/vagrant/util/resource_logger.rb +63 -0
- data/lib/vagrant/util/retryable.rb +25 -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 +177 -0
- data/templates/chef_server_client.erb +18 -0
- data/templates/chef_solo_solo.erb +19 -0
- data/templates/commands/init/Vagrantfile.erb +82 -0
- data/templates/config/validation_failed.erb +7 -0
- data/templates/locales/en.yml +535 -0
- data/templates/network_entry_debian.erb +8 -0
- data/templates/network_entry_gentoo.erb +5 -0
- data/templates/network_entry_redhat.erb +8 -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 +9 -0
- data/test/locales/en.yml +8 -0
- data/test/test_helper.rb +26 -0
- data/test/vagrant/action/box/destroy_test.rb +18 -0
- data/test/vagrant/action/box/download_test.rb +125 -0
- data/test/vagrant/action/box/package_test.rb +25 -0
- data/test/vagrant/action/box/unpackage_test.rb +84 -0
- data/test/vagrant/action/box/verify_test.rb +30 -0
- data/test/vagrant/action/builder_test.rb +203 -0
- data/test/vagrant/action/env/set_test.rb +24 -0
- data/test/vagrant/action/environment_test.rb +27 -0
- data/test/vagrant/action/general/package_test.rb +268 -0
- data/test/vagrant/action/general/validate_test.rb +31 -0
- data/test/vagrant/action/vm/boot_test.rb +66 -0
- data/test/vagrant/action/vm/check_box_test.rb +56 -0
- data/test/vagrant/action/vm/check_guest_additions_test.rb +9 -0
- data/test/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
- data/test/vagrant/action/vm/clear_forwarded_ports_test.rb +72 -0
- data/test/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
- data/test/vagrant/action/vm/clear_shared_folders_test.rb +49 -0
- data/test/vagrant/action/vm/customize_test.rb +30 -0
- data/test/vagrant/action/vm/destroy_test.rb +25 -0
- data/test/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
- data/test/vagrant/action/vm/discard_state_test.rb +45 -0
- data/test/vagrant/action/vm/export_test.rb +107 -0
- data/test/vagrant/action/vm/forward_ports_helpers_test.rb +70 -0
- data/test/vagrant/action/vm/forward_ports_test.rb +194 -0
- data/test/vagrant/action/vm/halt_test.rb +79 -0
- data/test/vagrant/action/vm/host_name_test.rb +36 -0
- data/test/vagrant/action/vm/import_test.rb +66 -0
- data/test/vagrant/action/vm/match_mac_address_test.rb +36 -0
- data/test/vagrant/action/vm/network_test.rb +286 -0
- data/test/vagrant/action/vm/nfs_helpers_test.rb +26 -0
- data/test/vagrant/action/vm/nfs_test.rb +260 -0
- data/test/vagrant/action/vm/package_test.rb +25 -0
- data/test/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
- data/test/vagrant/action/vm/provision_test.rb +90 -0
- data/test/vagrant/action/vm/resume_test.rb +35 -0
- data/test/vagrant/action/vm/share_folders_test.rb +139 -0
- data/test/vagrant/action/vm/suspend_test.rb +35 -0
- data/test/vagrant/action/warden_test.rb +119 -0
- data/test/vagrant/action_test.rb +89 -0
- data/test/vagrant/box_collection_test.rb +45 -0
- data/test/vagrant/box_test.rb +74 -0
- data/test/vagrant/cli_test.rb +35 -0
- data/test/vagrant/command/base_test.rb +23 -0
- data/test/vagrant/command/group_base_test.rb +15 -0
- data/test/vagrant/command/helpers_test.rb +88 -0
- data/test/vagrant/command/package_test.rb +27 -0
- data/test/vagrant/config/base_test.rb +52 -0
- data/test/vagrant/config/error_recorder_test.rb +18 -0
- data/test/vagrant/config/ssh_test.rb +12 -0
- data/test/vagrant/config/vagrant_test.rb +35 -0
- data/test/vagrant/config/vm/provisioner_test.rb +92 -0
- data/test/vagrant/config/vm_test.rb +86 -0
- data/test/vagrant/config_test.rb +162 -0
- data/test/vagrant/data_store_test.rb +77 -0
- data/test/vagrant/downloaders/base_test.rb +28 -0
- data/test/vagrant/downloaders/file_test.rb +48 -0
- data/test/vagrant/downloaders/http_test.rb +80 -0
- data/test/vagrant/environment_test.rb +508 -0
- data/test/vagrant/errors_test.rb +42 -0
- data/test/vagrant/hosts/base_test.rb +46 -0
- data/test/vagrant/hosts/bsd_test.rb +53 -0
- data/test/vagrant/hosts/linux_test.rb +54 -0
- data/test/vagrant/plugin_test.rb +9 -0
- data/test/vagrant/provisioners/base_test.rb +63 -0
- data/test/vagrant/provisioners/chef_server_test.rb +188 -0
- data/test/vagrant/provisioners/chef_solo_test.rb +219 -0
- data/test/vagrant/provisioners/chef_test.rb +179 -0
- data/test/vagrant/provisioners/puppet_server_test.rb +68 -0
- data/test/vagrant/provisioners/puppet_test.rb +182 -0
- data/test/vagrant/provisioners/shell_test.rb +68 -0
- data/test/vagrant/ssh/session_test.rb +40 -0
- data/test/vagrant/ssh_test.rb +342 -0
- data/test/vagrant/systems/base_test.rb +18 -0
- data/test/vagrant/systems/linux_test.rb +114 -0
- data/test/vagrant/ui_test.rb +29 -0
- data/test/vagrant/util/busy_test.rb +106 -0
- data/test/vagrant/util/hash_with_indifferent_access_test.rb +39 -0
- data/test/vagrant/util/plain_logger_test.rb +17 -0
- data/test/vagrant/util/platform_test.rb +18 -0
- data/test/vagrant/util/resource_logger_test.rb +78 -0
- data/test/vagrant/util/retryable_test.rb +50 -0
- data/test/vagrant/util/stacked_proc_runner_test.rb +43 -0
- data/test/vagrant/util/template_renderer_test.rb +145 -0
- data/test/vagrant/vm_test.rb +291 -0
- data/vagrant.gemspec +36 -0
- metadata +514 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require 'thread'
|
|
2
|
+
|
|
3
|
+
module Vagrant
|
|
4
|
+
module Util
|
|
5
|
+
# Represents a logger for a specific resource within Vagrant. Each
|
|
6
|
+
# logger should be initialized and set to represent a single
|
|
7
|
+
# resource. Each logged message will then appear in the following
|
|
8
|
+
# format:
|
|
9
|
+
#
|
|
10
|
+
# [resource] message
|
|
11
|
+
#
|
|
12
|
+
# This class is thread safe. The backing class which actually does
|
|
13
|
+
# all the logging IO is protected.
|
|
14
|
+
class ResourceLogger
|
|
15
|
+
@@singleton_logger = nil
|
|
16
|
+
@@writer_lock = Mutex.new
|
|
17
|
+
|
|
18
|
+
# The resource which this logger represents.
|
|
19
|
+
attr_reader :resource
|
|
20
|
+
|
|
21
|
+
# The environment that this logger is part of
|
|
22
|
+
attr_reader :env
|
|
23
|
+
|
|
24
|
+
# The backing logger which actually handles the IO. This logger
|
|
25
|
+
# should be a subclass of the standard library Logger, in general.
|
|
26
|
+
# IMPORTANT: This logger must be thread-safe.
|
|
27
|
+
attr_reader :logger
|
|
28
|
+
|
|
29
|
+
class << self
|
|
30
|
+
# Returns a singleton logger. If one has not yet be
|
|
31
|
+
# instantiated, then the given environment will be used to
|
|
32
|
+
# create a new logger.
|
|
33
|
+
def singleton_logger(env=nil)
|
|
34
|
+
return PlainLogger.new(nil) if !env.loaded?
|
|
35
|
+
|
|
36
|
+
@@singleton_logger ||= begin
|
|
37
|
+
file = env.log_path.join("#{Time.now.to_i}.log")
|
|
38
|
+
PlainLogger.new(file)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Resets the singleton logger (only used for testing).
|
|
43
|
+
def reset_singleton_logger!
|
|
44
|
+
@@singleton_logger = nil
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def initialize(resource, env)
|
|
49
|
+
@resource = resource
|
|
50
|
+
@env = env
|
|
51
|
+
@logger = self.class.singleton_logger(env)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
[:debug, :info, :error, :fatal].each do |method|
|
|
55
|
+
define_method(method) do |message|
|
|
56
|
+
@@writer_lock.synchronize do
|
|
57
|
+
logger.send(method, "[#{resource}] #{message}")
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
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
|
+
# 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,177 @@
|
|
|
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
|
+
|
|
55
|
+
if system.is_a?(Class)
|
|
56
|
+
raise Errors::VMSystemError, :_key => :invalid_class, :system => system.to_s if !(system <= Systems::Base)
|
|
57
|
+
@system = system.new(self)
|
|
58
|
+
elsif system.is_a?(Symbol)
|
|
59
|
+
# Hard-coded internal systems
|
|
60
|
+
mapping = {
|
|
61
|
+
:debian => Systems::Debian,
|
|
62
|
+
:ubuntu => Systems::Ubuntu,
|
|
63
|
+
:freebsd => Systems::FreeBSD,
|
|
64
|
+
:gentoo => Systems::Gentoo,
|
|
65
|
+
:redhat => Systems::Redhat,
|
|
66
|
+
:linux => Systems::Linux,
|
|
67
|
+
:solaris => Systems::Solaris
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
raise Errors::VMSystemError, :_key => :unknown_type, :system => system.to_s if !mapping.has_key?(system)
|
|
71
|
+
@system = mapping[system].new(self)
|
|
72
|
+
else
|
|
73
|
+
raise Errors::VMSystemError, :unspecified
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Returns the system for this VM, loading the distro of the system if
|
|
78
|
+
# we can.
|
|
79
|
+
def system
|
|
80
|
+
if !@loaded_system_distro && created? && vm.running?
|
|
81
|
+
# Load the system distro for the first time
|
|
82
|
+
result = @system.distro_dispatch
|
|
83
|
+
load_system!(result)
|
|
84
|
+
@loaded_system_distro = true
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
@system
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Access the {Vagrant::SSH} object associated with this VM.
|
|
91
|
+
# On the initial call, this will initialize the object. On
|
|
92
|
+
# subsequent calls it will reuse the existing object.
|
|
93
|
+
def ssh
|
|
94
|
+
@ssh ||= SSH.new(env)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Returns a boolean true if the VM has been created, otherwise
|
|
98
|
+
# returns false.
|
|
99
|
+
#
|
|
100
|
+
# @return [Boolean]
|
|
101
|
+
def created?
|
|
102
|
+
!vm.nil?
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Sets the currently active VM for this VM. If the VM is a valid,
|
|
106
|
+
# created virtual machine, then it will also update the local data
|
|
107
|
+
# to persist the VM. Otherwise, it will remove itself from the
|
|
108
|
+
# local data (if it exists).
|
|
109
|
+
def vm=(value)
|
|
110
|
+
@vm = value
|
|
111
|
+
env.local_data[:active] ||= {}
|
|
112
|
+
|
|
113
|
+
if value && value.uuid
|
|
114
|
+
env.local_data[:active][name.to_s] = value.uuid
|
|
115
|
+
else
|
|
116
|
+
env.local_data[:active].delete(name.to_s)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Commit the local data so that the next time vagrant is initialized,
|
|
120
|
+
# it realizes the VM exists
|
|
121
|
+
env.local_data.commit
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def uuid
|
|
125
|
+
vm ? vm.uuid : nil
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def reload!
|
|
129
|
+
@vm = VirtualBox::VM.find(@vm.uuid)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def package(options=nil)
|
|
133
|
+
env.actions.run(:package, { "validate" => false }.merge(options || {}))
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def up(options=nil)
|
|
137
|
+
env.actions.run(:up, options)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def start(options=nil)
|
|
141
|
+
return if @vm.running?
|
|
142
|
+
return resume if @vm.saved?
|
|
143
|
+
|
|
144
|
+
env.actions.run(:start, options)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def halt(options=nil)
|
|
148
|
+
env.actions.run(:halt, options)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def reload
|
|
152
|
+
env.actions.run(:reload)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def provision
|
|
156
|
+
env.actions.run(:provision)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def destroy
|
|
160
|
+
env.actions.run(:destroy)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def suspend
|
|
164
|
+
env.actions.run(:suspend)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def resume
|
|
168
|
+
env.actions.run(:resume)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def saved?
|
|
172
|
+
@vm.saved?
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def powered_off?; @vm.powered_off? end
|
|
176
|
+
end
|
|
177
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
file_cache_path "<%= file_cache_path %>"
|
|
14
|
+
file_backup_path "<%= file_backup_path %>"
|
|
15
|
+
|
|
16
|
+
pid_file "/var/run/chef/chef-client.pid"
|
|
17
|
+
|
|
18
|
+
Mixlib::Log::Formatter.show_time = true
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<% if node_name %>
|
|
2
|
+
node_name "<%= node_name %>"
|
|
3
|
+
<% end %>
|
|
4
|
+
file_cache_path "<%= provisioning_path %>"
|
|
5
|
+
cookbook_path <%= cookbooks_path %>
|
|
6
|
+
role_path <%= roles_path %>
|
|
7
|
+
log_level <%= log_level.inspect %>
|
|
8
|
+
|
|
9
|
+
<% if recipe_url -%>
|
|
10
|
+
recipe_url "<%= recipe_url %>"
|
|
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 %>
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
Vagrant::Config.run do |config|
|
|
2
|
+
# All Vagrant configuration is done here. The most common configuration
|
|
3
|
+
# options are documented and commented below. For a complete reference,
|
|
4
|
+
# please see the online documentation at vagrantup.com.
|
|
5
|
+
|
|
6
|
+
# Every Vagrant virtual environment requires a box to build off of.
|
|
7
|
+
config.vm.box = "<%= box_name %>"
|
|
8
|
+
|
|
9
|
+
# The url from where the 'config.vm.box' box will be fetched if it
|
|
10
|
+
# doesn't already exist on the user's system.
|
|
11
|
+
<% if box_url.nil? %># <% end %>config.vm.box_url = "<%= box_url || "http://domain.com/path/to/above.box" %>"
|
|
12
|
+
|
|
13
|
+
# Boot with a GUI so you can see the screen. (Default is headless)
|
|
14
|
+
# config.vm.boot_mode = :gui
|
|
15
|
+
|
|
16
|
+
# Assign this VM to a host only network IP, allowing you to access it
|
|
17
|
+
# via the IP.
|
|
18
|
+
# config.vm.network "33.33.33.10"
|
|
19
|
+
|
|
20
|
+
# Forward a port from the guest to the host, which allows for outside
|
|
21
|
+
# computers to access the VM, whereas host only networking does not.
|
|
22
|
+
# config.vm.forward_port "http", 80, 8080
|
|
23
|
+
|
|
24
|
+
# Share an additional folder to the guest VM. The first argument is
|
|
25
|
+
# an identifier, the second is the path on the guest to mount the
|
|
26
|
+
# folder, and the third is the path on the host to the actual folder.
|
|
27
|
+
# config.vm.share_folder "v-data", "/vagrant_data", "../data"
|
|
28
|
+
|
|
29
|
+
# Enable provisioning with Puppet stand alone. Puppet manifests
|
|
30
|
+
# are contained in a directory path relative to this Vagrantfile.
|
|
31
|
+
# You will need to create the manifests directory and a manifest in
|
|
32
|
+
# the file <%= box_name %>.pp in the manifests_path directory.
|
|
33
|
+
#
|
|
34
|
+
# An example Puppet manifest to provision the message of the day:
|
|
35
|
+
#
|
|
36
|
+
# # File { owner => 0, group => 0, mode => 0644 }
|
|
37
|
+
# #
|
|
38
|
+
# # file { '/etc/motd':
|
|
39
|
+
# # content => "Welcome to your Vagrant-built virtual machine!
|
|
40
|
+
# # Managed by Puppet.\n"
|
|
41
|
+
# # }
|
|
42
|
+
#
|
|
43
|
+
# config.vm.provision :puppet do |puppet|
|
|
44
|
+
# puppet.manifests_path = "manifests"
|
|
45
|
+
# puppet.manifest_file = "<%= box_name %>.pp"
|
|
46
|
+
# end
|
|
47
|
+
|
|
48
|
+
# Enable provisioning with chef solo, specifying a cookbooks path (relative
|
|
49
|
+
# to this Vagrantfile), and adding some recipes and/or roles.
|
|
50
|
+
#
|
|
51
|
+
# config.vm.provision :chef_solo do |chef|
|
|
52
|
+
# chef.cookbooks_path = "cookbooks"
|
|
53
|
+
# chef.add_recipe "mysql"
|
|
54
|
+
# chef.add_role "web"
|
|
55
|
+
#
|
|
56
|
+
# # You may also specify custom JSON attributes:
|
|
57
|
+
# chef.json.merge!({ :mysql_password => "foo" })
|
|
58
|
+
# end
|
|
59
|
+
|
|
60
|
+
# Enable provisioning with chef server, specifying the chef server URL,
|
|
61
|
+
# and the path to the validation key (relative to this Vagrantfile).
|
|
62
|
+
#
|
|
63
|
+
# The Opscode Platform uses HTTPS. Substitute your organization for
|
|
64
|
+
# ORGNAME in the URL and validation key.
|
|
65
|
+
#
|
|
66
|
+
# If you have your own Chef Server, use the appropriate URL, which may be
|
|
67
|
+
# HTTP instead of HTTPS depending on your configuration. Also change the
|
|
68
|
+
# validation key to validation.pem.
|
|
69
|
+
#
|
|
70
|
+
# config.vm.provision :chef_server do |chef|
|
|
71
|
+
# chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
|
|
72
|
+
# chef.validation_key_path = "ORGNAME-validator.pem"
|
|
73
|
+
# end
|
|
74
|
+
#
|
|
75
|
+
# If you're using the Opscode platform, your validator client is
|
|
76
|
+
# ORGNAME-validator, replacing ORGNAME with your organization name.
|
|
77
|
+
#
|
|
78
|
+
# IF you have your own Chef Server, the default validation client name is
|
|
79
|
+
# chef-validator, unless you changed the configuration.
|
|
80
|
+
#
|
|
81
|
+
# chef.validation_client_name = "ORGNAME-validator"
|
|
82
|
+
end
|