Commit Graph

2909 Commits

Author SHA1 Message Date
Mitchell Hashimoto 391dc39267 Merge branch 'machine-abstraction'
This branch brings in the "machine abstraction" code. This is a major
milestone in the development of Vagrant as it abstracts all of the
VirtualBox-specific code out into a plugin. There is zero VirtualBox
specific code in the core ("lib/") directory at this point. Read on for
important points.

== Gotchas

White it is technically possible now to write plugins for other
providers, there is still major work to be done to make this feasible.
The plugin interface itself is pretty much done, but there are some
issues:

* ":virtualbox" is the hardcoded provider to be used at the moment.

* There is no way to configure a provider. For example,
  `config.vm.customize` would never work for anything other than
  VirtualBox, so there needs to be a way to have provider-specific
  configuration. This will come soon.

* Shared folders and networking need to be rearchitected to be friendly
  for multiple providers, since it is unrealistic that a provider such as
  EC2 could provide the same level of networking, for example.

* There is no way easy way (like `vagrant package --base`) to create
  boxes for providers other than VirtualBox. This will be addressed in a
  whole new feature of Vagrant probably in a future release after
  provider stuff has shipped.

== Writing a Provider

To write a provider, you create a Vagrant plugin that defines a
"provider". See the "plugins/providers/virtualbox/plugin.rb" for more
details. Providers themselves have an exremely simple API. The burden
for writing providers mostly rests on the fact that you must define
complex middleware sequences.

Lots more work to come in the future, but this is a BIG MILESTONE!
2012-08-19 19:27:09 -07:00
Mitchell Hashimoto 1cdd69bc91 All tests passing 2012-08-19 19:17:19 -07:00
Mitchell Hashimoto ba0e426507 Get vagrant package --base working in some hacky way.
`vagrant package --base` is deprecated for a future feature so I didn't
want to waste any brain cycles on how to do this the "right" way since a
new system will be introduced to do this sort of thing in teh future.
2012-08-19 18:51:36 -07:00
Mitchell Hashimoto cc7768c535 Trivial whitespace changes 2012-08-18 20:06:50 -07:00
Mitchell Hashimoto a7b298b647 Remove Vagrant::VM 2012-08-18 19:36:50 -07:00
Mitchell Hashimoto 78d79de5c4 Comment the action_box_add method 2012-08-18 16:19:13 -07:00
Mitchell Hashimoto 47fe278667 `vagrant box add` works again. Box verification remove temporarily.
The built-in middleware sequences will now be hardcoded onto
Vagrant::Action. Other plugins can hook into these sequences to provide
verification and so on. So the VirtualBox plugin will hook into that
action sequence and add verification.
2012-08-18 16:13:14 -07:00
Mitchell Hashimoto fa4cf63462 Remove the actions that are unavailable now from autoload 2012-08-15 21:55:47 -07:00
Mitchell Hashimoto fcffcb2ee0 Delete more unused actions 2012-08-15 21:55:25 -07:00
Mitchell Hashimoto 85a4fb82a8 `vagrant package` a single VM works! 2012-08-15 21:04:37 -07:00
Brian Waldon dcc36322f2 Convey default destroy confirmation choice as 'N'
The convention is to capitalize the default choice when presenting
the user with a confirmation dialog. This alters the choices for
'vagrant destroy' confirmation from [Y/N] to [y/N].
2012-08-15 14:01:09 -04:00
Mitchell Hashimoto ef5eabb63d Remove the builtin VM middleware that are now part of the VB provider 2012-08-14 22:39:25 -07:00
Mitchell Hashimoto b659191a02 `vagrant up`! 2012-08-14 22:38:41 -07:00
Mitchell Hashimoto aaeb060f33 `vagrant provision` 2012-08-14 21:21:31 -07:00
Mitchell Hashimoto 7aa083d259 `vagrant reload` now works with the new machine abstraction 2012-08-14 21:12:41 -07:00
Mitchell Hashimoto 85a499ffb8 Properly handle the case that VM doesn't exist for the VB driver. 2012-08-14 20:27:28 -07:00
Mitchell Hashimoto 0cc63c05e2 `vagrant destroy` fully works 2012-08-13 23:31:12 -07:00
Mitchell Hashimoto 2fc18f7207 `destroy` gets a little farther, and properly halts the VM 2012-08-13 23:18:50 -07:00
Mitchell Hashimoto bca8663742 `vagrant resume` works with the new machine abstraction 2012-08-13 20:03:35 -07:00
Mitchell Hashimoto db11c16b79 ssh_config works with new machine abstraction 2012-08-13 19:48:26 -07:00
Mitchell Hashimoto 83b908f3d8 `vagrant suspend` works with new machine abstraction 2012-08-13 19:30:41 -07:00
Mitchell Hashimoto aad022a626 Switch all `channel` to `communicate` in the linux guest 2012-08-12 19:03:31 -07:00
Mitchell Hashimoto 296878cff5 Add basic loop detection for distro_dispatch 2012-08-12 19:03:22 -07:00
Mitchell Hashimoto 0eddda3552 Halt works with new machine.
This required some modifications to the linux guest implementation. And
the other guests will have to be modified as well. This is because
`channel` is now `communicate`.
2012-08-12 18:54:52 -07:00
Mitchell Hashimoto f9752d78d8 Properly resolve and load the guest class impl for Machines 2012-08-12 18:35:19 -07:00
Mitchell Hashimoto 28f341ec75 Begin working on the #guest method for Machine instances 2012-08-12 16:46:00 -07:00
Mitchell Hashimoto 7efee573b8 `vagrant ssh -c` now exits with the proper exit code 2012-08-11 20:35:34 -07:00
Mitchell Hashimoto de0865b9e2 Test to ensure that the environment hash is returned from Machine#action
This will allow methods that call into the action to use any results
that might be set onto the environment hash by any of the middleware.
2012-08-11 20:33:09 -07:00
jtimberman 50e9f83970 Add config.arguments for Chef
* Adds chef.arguments to Chef::Provisioner::Config
* Usable in both chef-client and chef-solo
* Specify as a string, "-L /tmp/foo.log", e.g.
2012-08-10 12:58:43 -06:00
Mitchell Hashimoto 5e70ad0ec2 `vagrant ssh -c` now uses a middleware sequence 2012-08-10 00:57:23 -07:00
Mitchell Hashimoto 2e25285297 Add nice inspect results for Environment and Machine 2012-08-10 00:38:11 -07:00
Mitchell Hashimoto de73b65635 Very early SIGINTs no longer cause ugly stack traces.
We catch INT very very early in the Vagrant process in order to exit
cleanly rather than raising any exceptions. This is eventually overriden
by Vagrant at some point.
2012-08-10 00:30:58 -07:00
Mitchell Hashimoto 64afd578b3 Just always return the SSH communicator for machines for now.
In the future we'll actually find a matching communicator but for now
since we're just focusing on machine abstraction, we just return SSH.
2012-08-08 21:57:08 -07:00
Mitchell Hashimoto 5ae3e0e80c Allow the definition of communicators in plugins 2012-08-08 21:52:25 -07:00
Mitchell Hashimoto 595e7cee0e Move SSH communication to a plugin 2012-08-08 21:48:51 -07:00
Mitchell Hashimoto a1cef830e3 Add the Communicator plugin API.
This allows communication protocols to be defined for the machine. This
is how things like SSH will be implemented.
2012-08-08 21:28:28 -07:00
Mitchell Hashimoto 42744f71e8 Use 127.0.0.1 instead of localhost for port use checking. [GH-1057]
Many systems actually don't have "localhost" setup as loopback in their
/etc/hosts file, so this would fail. This makes it pass.
2012-08-08 20:02:18 -07:00
Mitchell Hashimoto f1c1dfad2f Some SSH command cleanup 2012-08-07 11:31:55 -07:00
Mitchell Hashimoto b1ced46d7c SSHExec raises proper exception if SSH is not yet ready 2012-08-06 10:29:25 -07:00
Justin Mazzi 8dcdc93856 Fix 2 broken document links 2012-08-06 14:01:41 -03:00
Mitchell Hashimoto 8d50c4774e Tests for SSHExec, and forward in the ssh options 2012-08-05 18:37:41 -07:00
Mitchell Hashimoto e0ec679838 `vagrant ssh` with full console works with new provider.
This works by now calling the `:ssh` action on the provider. This action
is allowed to do whatever it pleases, but should at some point probably
call the `SSHExec` built-in middleware.

The `SSHExec` built-in middleware was added. This uses the information
returned by `Machine#ssh_info` and uses the `Vagrant::Util::SSH` helper
to exec into the remote machine. The provider should do any work upfront
in verifying that the machine is ready to be SSHed into.
2012-08-05 13:45:24 -07:00
Mitchell Hashimoto a1145615d0 Machine#action supports passing in extra env vars for action runner 2012-08-05 13:16:08 -07:00
Mitchell Hashimoto 984c4f4025 Add Util::SSH which has methods for checking key permissions and exec 2012-08-05 13:12:53 -07:00
Mitchell Hashimoto 1a2a8b49c0 Provider API to return SSH info, must implement `ssh_info`.
Since SSH is such a critical part of Vagrant, each provider must
implement a method that returns the proper way to SSH into the machine.
2012-08-05 12:41:05 -07:00
Mitchell Hashimoto 9db982f7a4 Expose the provider via the machine object. 2012-08-04 11:16:31 -07:00
Mitchell Hashimoto d8cb02d55d Load the machine ID prior to initializing the provider 2012-08-03 14:22:17 -07:00
Mitchell Hashimoto 002a83d7f7 Update SSH config help to properly reflect "--host" usage. 2012-07-30 11:42:29 -07:00
Mitchell Hashimoto 1e997f87d7 Clean up the actions a bit, move logic into actual middleware.
This is a good idea because in the future it will allow plugins to
properly override these behaviors.
2012-07-28 19:58:10 -07:00
Mitchell Hashimoto 31a3a3f2e2 Start moving the halt commands over to the new provider interface 2012-07-28 10:43:16 -07:00