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.
Files changed (242) hide show
  1. data/.gitignore +15 -0
  2. data/.yardopts +1 -0
  3. data/CHANGELOG.md +272 -0
  4. data/Gemfile +21 -0
  5. data/LICENSE +21 -0
  6. data/README.md +75 -0
  7. data/Rakefile +22 -0
  8. data/bin/vagrant +22 -0
  9. data/config/default.rb +39 -0
  10. data/contrib/README.md +12 -0
  11. data/contrib/emacs/vagrant.el +8 -0
  12. data/contrib/vim/vagrantfile.vim +9 -0
  13. data/keys/README.md +17 -0
  14. data/keys/vagrant +27 -0
  15. data/keys/vagrant.ppk +26 -0
  16. data/keys/vagrant.pub +1 -0
  17. data/lib/vagrant.rb +42 -0
  18. data/lib/vagrant/action.rb +134 -0
  19. data/lib/vagrant/action/box.rb +11 -0
  20. data/lib/vagrant/action/box/destroy.rb +21 -0
  21. data/lib/vagrant/action/box/download.rb +72 -0
  22. data/lib/vagrant/action/box/package.rb +19 -0
  23. data/lib/vagrant/action/box/unpackage.rb +55 -0
  24. data/lib/vagrant/action/box/verify.rb +23 -0
  25. data/lib/vagrant/action/builder.rb +124 -0
  26. data/lib/vagrant/action/builtin.rb +104 -0
  27. data/lib/vagrant/action/env.rb +7 -0
  28. data/lib/vagrant/action/env/set.rb +18 -0
  29. data/lib/vagrant/action/environment.rb +50 -0
  30. data/lib/vagrant/action/general.rb +8 -0
  31. data/lib/vagrant/action/general/package.rb +109 -0
  32. data/lib/vagrant/action/general/validate.rb +19 -0
  33. data/lib/vagrant/action/vm.rb +31 -0
  34. data/lib/vagrant/action/vm/boot.rb +48 -0
  35. data/lib/vagrant/action/vm/check_box.rb +28 -0
  36. data/lib/vagrant/action/vm/check_guest_additions.rb +30 -0
  37. data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
  38. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +39 -0
  39. data/lib/vagrant/action/vm/clear_nfs_exports.rb +20 -0
  40. data/lib/vagrant/action/vm/clear_shared_folders.rb +32 -0
  41. data/lib/vagrant/action/vm/customize.rb +21 -0
  42. data/lib/vagrant/action/vm/destroy.rb +19 -0
  43. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +30 -0
  44. data/lib/vagrant/action/vm/discard_state.rb +22 -0
  45. data/lib/vagrant/action/vm/export.rb +52 -0
  46. data/lib/vagrant/action/vm/forward_ports.rb +134 -0
  47. data/lib/vagrant/action/vm/forward_ports_helpers.rb +28 -0
  48. data/lib/vagrant/action/vm/halt.rb +29 -0
  49. data/lib/vagrant/action/vm/host_name.rb +21 -0
  50. data/lib/vagrant/action/vm/import.rb +35 -0
  51. data/lib/vagrant/action/vm/match_mac_address.rb +21 -0
  52. data/lib/vagrant/action/vm/network.rb +139 -0
  53. data/lib/vagrant/action/vm/nfs.rb +159 -0
  54. data/lib/vagrant/action/vm/nfs_helpers.rb +11 -0
  55. data/lib/vagrant/action/vm/package.rb +23 -0
  56. data/lib/vagrant/action/vm/package_vagrantfile.rb +33 -0
  57. data/lib/vagrant/action/vm/provision.rb +41 -0
  58. data/lib/vagrant/action/vm/resume.rb +20 -0
  59. data/lib/vagrant/action/vm/share_folders.rb +70 -0
  60. data/lib/vagrant/action/vm/suspend.rb +20 -0
  61. data/lib/vagrant/action/warden.rb +79 -0
  62. data/lib/vagrant/box.rb +90 -0
  63. data/lib/vagrant/box_collection.rb +53 -0
  64. data/lib/vagrant/cli.rb +55 -0
  65. data/lib/vagrant/command.rb +25 -0
  66. data/lib/vagrant/command/base.rb +106 -0
  67. data/lib/vagrant/command/box.rb +33 -0
  68. data/lib/vagrant/command/destroy.rb +17 -0
  69. data/lib/vagrant/command/group_base.rb +107 -0
  70. data/lib/vagrant/command/halt.rb +18 -0
  71. data/lib/vagrant/command/helpers.rb +33 -0
  72. data/lib/vagrant/command/init.rb +14 -0
  73. data/lib/vagrant/command/named_base.rb +14 -0
  74. data/lib/vagrant/command/package.rb +41 -0
  75. data/lib/vagrant/command/provision.rb +17 -0
  76. data/lib/vagrant/command/reload.rb +17 -0
  77. data/lib/vagrant/command/resume.rb +17 -0
  78. data/lib/vagrant/command/ssh.rb +42 -0
  79. data/lib/vagrant/command/ssh_config.rb +26 -0
  80. data/lib/vagrant/command/status.rb +22 -0
  81. data/lib/vagrant/command/suspend.rb +17 -0
  82. data/lib/vagrant/command/up.rb +19 -0
  83. data/lib/vagrant/command/upgrade_to_060.rb +45 -0
  84. data/lib/vagrant/command/version.rb +13 -0
  85. data/lib/vagrant/config.rb +123 -0
  86. data/lib/vagrant/config/base.rb +85 -0
  87. data/lib/vagrant/config/error_recorder.rb +19 -0
  88. data/lib/vagrant/config/nfs.rb +10 -0
  89. data/lib/vagrant/config/package.rb +9 -0
  90. data/lib/vagrant/config/ssh.rb +33 -0
  91. data/lib/vagrant/config/top.rb +61 -0
  92. data/lib/vagrant/config/vagrant.rb +16 -0
  93. data/lib/vagrant/config/vm.rb +137 -0
  94. data/lib/vagrant/config/vm/provisioner.rb +56 -0
  95. data/lib/vagrant/config/vm/sub_vm.rb +17 -0
  96. data/lib/vagrant/data_store.rb +70 -0
  97. data/lib/vagrant/downloaders.rb +7 -0
  98. data/lib/vagrant/downloaders/base.rb +23 -0
  99. data/lib/vagrant/downloaders/file.rb +22 -0
  100. data/lib/vagrant/downloaders/http.rb +64 -0
  101. data/lib/vagrant/environment.rb +392 -0
  102. data/lib/vagrant/errors.rb +332 -0
  103. data/lib/vagrant/hosts.rb +8 -0
  104. data/lib/vagrant/hosts/arch.rb +27 -0
  105. data/lib/vagrant/hosts/base.rb +78 -0
  106. data/lib/vagrant/hosts/bsd.rb +52 -0
  107. data/lib/vagrant/hosts/linux.rb +47 -0
  108. data/lib/vagrant/plugin.rb +57 -0
  109. data/lib/vagrant/provisioners.rb +9 -0
  110. data/lib/vagrant/provisioners/base.rb +63 -0
  111. data/lib/vagrant/provisioners/chef.rb +130 -0
  112. data/lib/vagrant/provisioners/chef_server.rb +103 -0
  113. data/lib/vagrant/provisioners/chef_solo.rb +142 -0
  114. data/lib/vagrant/provisioners/puppet.rb +137 -0
  115. data/lib/vagrant/provisioners/puppet_server.rb +55 -0
  116. data/lib/vagrant/provisioners/shell.rb +52 -0
  117. data/lib/vagrant/ssh.rb +173 -0
  118. data/lib/vagrant/ssh/session.rb +125 -0
  119. data/lib/vagrant/systems.rb +11 -0
  120. data/lib/vagrant/systems/base.rb +87 -0
  121. data/lib/vagrant/systems/debian.rb +36 -0
  122. data/lib/vagrant/systems/freebsd.rb +84 -0
  123. data/lib/vagrant/systems/gentoo.rb +27 -0
  124. data/lib/vagrant/systems/linux.rb +83 -0
  125. data/lib/vagrant/systems/linux/config.rb +21 -0
  126. data/lib/vagrant/systems/linux/error.rb +9 -0
  127. data/lib/vagrant/systems/redhat.rb +39 -0
  128. data/lib/vagrant/systems/solaris.rb +62 -0
  129. data/lib/vagrant/systems/ubuntu.rb +17 -0
  130. data/lib/vagrant/test_helpers.rb +128 -0
  131. data/lib/vagrant/ui.rb +69 -0
  132. data/lib/vagrant/util.rb +13 -0
  133. data/lib/vagrant/util/busy.rb +59 -0
  134. data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
  135. data/lib/vagrant/util/plain_logger.rb +25 -0
  136. data/lib/vagrant/util/platform.rb +65 -0
  137. data/lib/vagrant/util/resource_logger.rb +63 -0
  138. data/lib/vagrant/util/retryable.rb +25 -0
  139. data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
  140. data/lib/vagrant/util/template_renderer.rb +83 -0
  141. data/lib/vagrant/version.rb +6 -0
  142. data/lib/vagrant/vm.rb +177 -0
  143. data/templates/chef_server_client.erb +18 -0
  144. data/templates/chef_solo_solo.erb +19 -0
  145. data/templates/commands/init/Vagrantfile.erb +82 -0
  146. data/templates/config/validation_failed.erb +7 -0
  147. data/templates/locales/en.yml +535 -0
  148. data/templates/network_entry_debian.erb +8 -0
  149. data/templates/network_entry_gentoo.erb +5 -0
  150. data/templates/network_entry_redhat.erb +8 -0
  151. data/templates/nfs/exports.erb +5 -0
  152. data/templates/nfs/exports_linux.erb +5 -0
  153. data/templates/package_Vagrantfile.erb +11 -0
  154. data/templates/ssh_config.erb +9 -0
  155. data/test/locales/en.yml +8 -0
  156. data/test/test_helper.rb +26 -0
  157. data/test/vagrant/action/box/destroy_test.rb +18 -0
  158. data/test/vagrant/action/box/download_test.rb +125 -0
  159. data/test/vagrant/action/box/package_test.rb +25 -0
  160. data/test/vagrant/action/box/unpackage_test.rb +84 -0
  161. data/test/vagrant/action/box/verify_test.rb +30 -0
  162. data/test/vagrant/action/builder_test.rb +203 -0
  163. data/test/vagrant/action/env/set_test.rb +24 -0
  164. data/test/vagrant/action/environment_test.rb +27 -0
  165. data/test/vagrant/action/general/package_test.rb +268 -0
  166. data/test/vagrant/action/general/validate_test.rb +31 -0
  167. data/test/vagrant/action/vm/boot_test.rb +66 -0
  168. data/test/vagrant/action/vm/check_box_test.rb +56 -0
  169. data/test/vagrant/action/vm/check_guest_additions_test.rb +9 -0
  170. data/test/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
  171. data/test/vagrant/action/vm/clear_forwarded_ports_test.rb +72 -0
  172. data/test/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
  173. data/test/vagrant/action/vm/clear_shared_folders_test.rb +49 -0
  174. data/test/vagrant/action/vm/customize_test.rb +30 -0
  175. data/test/vagrant/action/vm/destroy_test.rb +25 -0
  176. data/test/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
  177. data/test/vagrant/action/vm/discard_state_test.rb +45 -0
  178. data/test/vagrant/action/vm/export_test.rb +107 -0
  179. data/test/vagrant/action/vm/forward_ports_helpers_test.rb +70 -0
  180. data/test/vagrant/action/vm/forward_ports_test.rb +194 -0
  181. data/test/vagrant/action/vm/halt_test.rb +79 -0
  182. data/test/vagrant/action/vm/host_name_test.rb +36 -0
  183. data/test/vagrant/action/vm/import_test.rb +66 -0
  184. data/test/vagrant/action/vm/match_mac_address_test.rb +36 -0
  185. data/test/vagrant/action/vm/network_test.rb +286 -0
  186. data/test/vagrant/action/vm/nfs_helpers_test.rb +26 -0
  187. data/test/vagrant/action/vm/nfs_test.rb +260 -0
  188. data/test/vagrant/action/vm/package_test.rb +25 -0
  189. data/test/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
  190. data/test/vagrant/action/vm/provision_test.rb +90 -0
  191. data/test/vagrant/action/vm/resume_test.rb +35 -0
  192. data/test/vagrant/action/vm/share_folders_test.rb +139 -0
  193. data/test/vagrant/action/vm/suspend_test.rb +35 -0
  194. data/test/vagrant/action/warden_test.rb +119 -0
  195. data/test/vagrant/action_test.rb +89 -0
  196. data/test/vagrant/box_collection_test.rb +45 -0
  197. data/test/vagrant/box_test.rb +74 -0
  198. data/test/vagrant/cli_test.rb +35 -0
  199. data/test/vagrant/command/base_test.rb +23 -0
  200. data/test/vagrant/command/group_base_test.rb +15 -0
  201. data/test/vagrant/command/helpers_test.rb +88 -0
  202. data/test/vagrant/command/package_test.rb +27 -0
  203. data/test/vagrant/config/base_test.rb +52 -0
  204. data/test/vagrant/config/error_recorder_test.rb +18 -0
  205. data/test/vagrant/config/ssh_test.rb +12 -0
  206. data/test/vagrant/config/vagrant_test.rb +35 -0
  207. data/test/vagrant/config/vm/provisioner_test.rb +92 -0
  208. data/test/vagrant/config/vm_test.rb +86 -0
  209. data/test/vagrant/config_test.rb +162 -0
  210. data/test/vagrant/data_store_test.rb +77 -0
  211. data/test/vagrant/downloaders/base_test.rb +28 -0
  212. data/test/vagrant/downloaders/file_test.rb +48 -0
  213. data/test/vagrant/downloaders/http_test.rb +80 -0
  214. data/test/vagrant/environment_test.rb +508 -0
  215. data/test/vagrant/errors_test.rb +42 -0
  216. data/test/vagrant/hosts/base_test.rb +46 -0
  217. data/test/vagrant/hosts/bsd_test.rb +53 -0
  218. data/test/vagrant/hosts/linux_test.rb +54 -0
  219. data/test/vagrant/plugin_test.rb +9 -0
  220. data/test/vagrant/provisioners/base_test.rb +63 -0
  221. data/test/vagrant/provisioners/chef_server_test.rb +188 -0
  222. data/test/vagrant/provisioners/chef_solo_test.rb +219 -0
  223. data/test/vagrant/provisioners/chef_test.rb +179 -0
  224. data/test/vagrant/provisioners/puppet_server_test.rb +68 -0
  225. data/test/vagrant/provisioners/puppet_test.rb +182 -0
  226. data/test/vagrant/provisioners/shell_test.rb +68 -0
  227. data/test/vagrant/ssh/session_test.rb +40 -0
  228. data/test/vagrant/ssh_test.rb +342 -0
  229. data/test/vagrant/systems/base_test.rb +18 -0
  230. data/test/vagrant/systems/linux_test.rb +114 -0
  231. data/test/vagrant/ui_test.rb +29 -0
  232. data/test/vagrant/util/busy_test.rb +106 -0
  233. data/test/vagrant/util/hash_with_indifferent_access_test.rb +39 -0
  234. data/test/vagrant/util/plain_logger_test.rb +17 -0
  235. data/test/vagrant/util/platform_test.rb +18 -0
  236. data/test/vagrant/util/resource_logger_test.rb +78 -0
  237. data/test/vagrant/util/retryable_test.rb +50 -0
  238. data/test/vagrant/util/stacked_proc_runner_test.rb +43 -0
  239. data/test/vagrant/util/template_renderer_test.rb +145 -0
  240. data/test/vagrant/vm_test.rb +291 -0
  241. data/vagrant.gemspec +36 -0
  242. 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
@@ -0,0 +1,6 @@
1
+ module Vagrant
2
+ # This will always be up to date with the current version of Vagrant,
3
+ # since it is used to generate the gemspec and is also the source of
4
+ # the version for `vagrant -v`
5
+ VERSION = "0.7.4.dev"
6
+ end
@@ -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