Commit Graph

1533 Commits

Author SHA1 Message Date
Mitchell Hashimoto 7258daf535 Support specifying a component for Vagrant.plugin
The future of subclassing things like configuration bases and so on will
be to use `Vagrant.plugin(version, component)`. For example:
`Vagrant.plugin("1", :provisioner)`.
2012-06-26 15:47:26 -07:00
Mitchell Hashimoto 194cd2145d Fix some nondeterminism in tests with GCing tempfiles.
Before, the tempfile "f" could be GC'd before the path was used,
resulting in failed tests because when it is GC'd the tempfile is
removed. We now store the tempfile in an instance variable so that it
isn't even available for GC until after the test is finished running.
2012-06-26 15:06:04 -07:00
Mitchell Hashimoto 798704c6d2 Move the loader into the Config::V1 namespace. 2012-06-26 15:06:03 -07:00
Mitchell Hashimoto 41bc8e7454 Move Config::V1::Base to Vagrant::Plugin::V1::Config 2012-06-24 17:06:11 -07:00
Mitchell Hashimoto ffab8cab68 Renamespace V1 plugin root to Vagrant::Plugin::V1::Plugin
This is mostly a transparent change to end users, but I'm going to put
all base classes for V1 into Vagrant::Plugin::V1.
2012-06-24 14:24:52 -07:00
Mitchell Hashimoto 37c54c7b20 Use a temporary directory for the VAGRANT_CWD when running tests
Tests before were picking up a Vagrantfile in the Vagrant source
directory, which can cause some funny failures. This ensures that each
test run will actually establish a new temporary CWD so that a
Vagrantfile is hopefully never found.
2012-06-23 23:56:39 -07:00
Mitchell Hashimoto 7a299ae2de Configuration loader can handle upgrading.
The basic process for this is to:

1. Load the configuration using the proper loader for that version. i.e.
   if you're loading V1 config, then use the V1 loader.
2. If we just loaded a version that isn't current (imagine we're
   currently at V3), then we need to upgrade that config. So we first
   ask the V2 loader to upgrade the V1 config to V2, then we ask the V3
   loader to upgrade the V2 config to V3. We keep track of warnings and
   errors throughout this process.
3. Finally, we have a current config, so we merge it into the in-process
   configuration that is being loaded.
2012-06-23 19:56:31 -07:00
Mitchell Hashimoto 9bc1ea5f04 Use config finalize to move some version-specific logic to the version
This moves out the concept of a "default VM" from the Environment class
and makes it the responsibility of the V1 configuration that at least
one VM is defined on it. This lets the configuration ultimately decide
what a "default" implementation is.
2012-06-23 12:48:53 -07:00
Mitchell Hashimoto 70fb804128 Configuration versions can finalize config after loading
This is useful so that it can take a look at the final loaded
configuration object and possibly make some tweaks to the configuration
object. The use case this was built for was so that config V1 can verify
that there is always at least a single VM defined as a sub-VM, the
"default" VM.
2012-06-23 12:27:32 -07:00
Mitchell Hashimoto 7e19d6849b Config loader no longer assumes latest version for procs.
Previously, all procs were assumed to just be the current version. This
is certainly not going to be true always so now the version number of
the configuration must be explicit if you're assigning a proc to the
configuration loader.
2012-06-23 12:06:54 -07:00
Mitchell Hashimoto b3db82e516 Separate out the versions the config loader knows as init params.
This means that the Config::Loader now only knows how to load
configuration for versions used to initialize the class. This lets
things like the tests be completely isolated from what the actual
configuration is for Vagrant. This will be immensely useful to verify
that the loader functionality works for non-trivial bits (like
upgrading) without depending on Vagrant's upgrading functionality.
2012-06-23 11:33:53 -07:00
Mitchell Hashimoto de78a3637a Plugin activation
Vagrant is only guaranteeing that the plugin definition superclass (the
Vagrant.plugin("1") part) is backwards compatible. Anything else, such
as Vagrant::Command::Base and so on, will likely change in future
versions. Beacuse of this, plugins should only immediately expose their
definition.

In order to support loading the other classes, plugins should defer
loading to the "activation" phase of a plugin. This can be done using
the `activated` block:

    class MyPlugin < Vagrant.plugin("1")
      name "my plugin"

      activated do
        require "myplugin/my_command"
      end

      command("foo") { MyCommand }
    end

Plugin activation is done at two specific times:

  * Right when a Vagrant::Environment is created and the global plugins
    (such as from ~.vagrantrc) are loaded.
  * Right before loading configuration, but after the Vagrantfiles have
    been evaluated. This allows plugins to be defined within these files
    as well.
2012-05-21 22:23:50 -07:00
Mitchell Hashimoto 3204b3a580 Vagrant.configure and versioned configuration
Vagrant.configure is now how configuration is done in Vagrantfiles
(previously it was Vagrant::Config.run). This function takes a single
argument which is the version of configuration to use.

Various internals were updated for this new versioned configuration.

Note that multiple versions of configuration aren't yet used so aren't
fully supported by Vagrant, but the foundation is being set here.
2012-05-21 21:47:01 -07:00
Mitchell Hashimoto 8c6f3edf2d Single-VM mode still allows target name in vagrant commands 2012-05-06 14:33:47 -07:00
Mitchell Hashimoto bc0643613a Vagrant.require_plugin [GH-916] 2012-05-06 14:01:10 -07:00
Mitchell Hashimoto 0d6248394c Tests for the Easy command base 2012-05-06 10:01:50 -07:00
Ryan LeCompte 2355a4b9a6 fix support for multiple unique easy commands 2012-05-06 01:47:43 -07:00
Mitchell Hashimoto 4cc3fb05df Passing unit tests 2012-05-05 22:32:19 -07:00
Mitchell Hashimoto 3d147f1d96 Raise exception if the insert_before middleware is not found 2012-05-05 22:10:26 -07:00
Mitchell Hashimoto 879f98b5d5 Action builder supports indexing middlewares by name 2012-05-05 22:01:53 -07:00
Mitchell Hashimoto c2649074c3 Test command name validation and fix up some bugs 2012-05-05 20:11:26 -07:00
Mitchell Hashimoto 00aba5ac03 Plugin easy commands.
Easy commands are well... easy! They don't offer the full power of
creating a completely custom command class, but they let you do the
basics (what almost everyone needs) with minimal fuss. Example:

class MyPlugin < Vagrant.plugin("1")
  name "my-plugin"

  easy_command "foo" do |action|
    puts "HELLO!"
  end
end

NOTE: The "action" stuff isn't done yet, but will be soon!
2012-05-05 18:57:29 -07:00
Mitchell Hashimoto 8850c086b1 Plugins can now have action_hooks 2012-05-05 18:28:07 -07:00
Mitchell Hashimoto 13a27eb723 More test cleanups 2012-05-01 22:10:10 -07:00
Mitchell Hashimoto 9b20173dfb Clean up some of the SSH key tests 2012-05-01 22:08:30 -07:00
Sean Wolfe 024f492cb3 Added spec to test the ssh key file permission changing. 2012-05-01 14:05:22 -07:00
Mitchell Hashimoto 1489854d70 Move commands into plugins 2012-04-19 13:59:48 -07:00
Mitchell Hashimoto 661f20bb91 Move hosts to a plugin system 2012-04-18 22:20:45 -07:00
Mitchell Hashimoto 1cbac3167f Move provisioners into plugins 2012-04-18 21:53:19 -07:00
Mitchell Hashimoto 1b2fa748f9 Move all guests to plugins, even the distros 2012-04-18 21:23:25 -07:00
Mitchell Hashimoto 7766eb6098 Major guests have been moved to plugins 2012-04-18 21:03:03 -07:00
Mitchell Hashimoto dd459170dd Start moving guest configuration out into plugins 2012-04-18 17:38:20 -07:00
Mitchell Hashimoto a23fee4848 Remove old configuration classes 2012-04-18 17:16:03 -07:00
Mitchell Hashimoto b38fb5e974 Loader uses the new configuration classes 2012-04-18 17:03:34 -07:00
Mitchell Hashimoto c0ee3b06ff Config merging 2012-04-17 10:22:24 -07:00
Mitchell Hashimoto 92ee042fc2 V1 config loading using plugins as a source for config keys 2012-04-16 22:26:38 -07:00
Mitchell Hashimoto b46daa82bc Ability to define configuration classes on plugins 2012-04-15 16:04:54 -05:00
Mitchell Hashimoto 2eebc2cb68 Basic Plugin class 2012-04-15 15:34:44 -05:00
Mitchell Hashimoto d08a65e7f7 IsPortOpen utility 2012-03-23 10:26:29 -04:00
Mitchell Hashimoto 1b0a6a0895 Make unit tests pass from the safe_puts changes 2012-03-22 13:42:41 -07:00
Mitchell Hashimoto f8fa859b5f Raise an error if the CWD is incorrect 2012-03-08 16:57:17 -08:00
Mitchell Hashimoto 6969f791ad VAGRANT_CWD can be set to set the CWD of `vagrant`. 2012-03-08 16:45:19 -08:00
Mitchell Hashimoto ce00a56ecb Even with a custom vagrantfile name, use defaults [GH-778] 2012-03-08 13:24:04 -08:00
Mitchell Hashimoto 7b9f64f577 Allow data store to work even if file path is nil 2012-02-25 10:41:06 -08:00
Mitchell Hashimoto 2c823e98bd Fix crashing bug with `primary_vm` on Environment 2012-02-24 10:27:34 -08:00
Mitchell Hashimoto ba42fffed0 Convert line endings to Unix-style [GH-727] 2012-02-10 18:07:59 -08:00
Bob Van Zant ae62c9bd68 Convert example host only IPs to RFC1918 2012-02-08 14:50:33 -08:00
Mitchell Hashimoto 3eff28ac0d Don't strip color codes with ANSI escape code remover 2012-02-05 13:30:21 +01:00
Mitchell Hashimoto 912e4974db Registry will now cache result values.
This is actually required so that we can do things like this
in plugins:

Vagrant.actions[:up].insert(Foo, Bar)
2012-01-28 17:31:50 -08:00
Mitchell Hashimoto d1e78f791d Remove test warnings, add ANSI escape code remover 2012-01-23 19:24:32 -08:00
Mitchell Hashimoto d487e286f4 Don't merge config keys that start with __.
This allows config classes to store internal state somehow.
2012-01-19 20:54:09 -08:00
Mitchell Hashimoto bdb591bc0f Tests that boolean configs are merged up properly [GH-651] 2012-01-18 18:51:15 -08:00
Mitchell Hashimoto 4cfabc690b Fix a failing unit test 2012-01-11 23:57:19 -08:00
Mitchell Hashimoto f0b77d2f30 Additional fixes + tests for shell expansion [GH-633] 2012-01-11 22:56:15 -08:00
Mitchell Hashimoto 863ebe2d2f Custom merging for VM config 2012-01-11 22:12:49 -08:00
Mitchell Hashimoto 51353d51fc Test base merge 2012-01-11 21:31:19 -08:00
Mitchell Hashimoto bfb52ba7dc Top merges things in each key one by one by calling `merge` 2012-01-11 21:22:55 -08:00
Mitchell Hashimoto d13dd482b5 Some Config::Top class tests 2012-01-11 21:09:52 -08:00
Mitchell Hashimoto 008132b3cb Run each config proc only once 2012-01-11 20:59:21 -08:00
Mitchell Hashimoto 7c9c6e34ce Change caching behavior of config procs for the config loader 2012-01-11 16:58:40 -08:00
Mitchell Hashimoto ef37f692bd Revert the check for duplicate Vagrantfiles.
This is just tricky with case sensitive/insensitive file systems.
Reverting since it doesn't seem worth it.
2012-01-08 23:15:18 -08:00
Mitchell Hashimoto 4f30a834d0 Tests for multivagrantfile being found 2012-01-08 23:04:23 -08:00
Mitchell Hashimoto 97f7fa633d Re-implement how networking is done internally 2012-01-02 19:51:38 -08:00
Mitchell Hashimoto 43fcca3dcb Retryable test 2011-12-26 17:38:47 -08:00
Mitchell Hashimoto 15a625275e HashWithIndifferentAccess test 2011-12-26 17:27:56 -08:00
Mitchell Hashimoto 91562e2111 FileChecksum test 2011-12-26 17:24:44 -08:00
Mitchell Hashimoto d80ff0a27f Pull out port collision detection/correction into the CheckPortCollision middleware 2011-12-25 10:13:08 -08:00
Mitchell Hashimoto 40fdab3de8 DataStore tests and slight modifications 2011-12-22 21:18:59 -08:00
Mitchell Hashimoto e3426211bc Vagrant::Action::Warden unit tests 2011-12-22 20:41:01 -08:00
Mitchell Hashimoto 3cd262ed75 Unit tests for Vagrant::Action::Builder 2011-12-22 20:17:45 -08:00
Mitchell Hashimoto a8f5ed1863 Require vagrant environments for some commands. 2011-12-18 13:26:15 -08:00
Mitchell Hashimoto c2e3a3050a Ruby 1.8.7 compatibility 2011-12-17 20:22:46 -08:00
Mitchell Hashimoto e71007d47e `vagrant destroy` 2011-12-17 11:05:49 -08:00
Mitchell Hashimoto b292008f3b Change parse_options a bit to automatically add help and detect invalid options 2011-12-17 09:25:46 -08:00
Mitchell Hashimoto 43cadfe830 `vagrant up` 2011-12-17 09:14:05 -08:00
Mitchell Hashimoto 27491b554c Remove thor from requirements. Start revamping Vagrant::CLI 2011-12-16 23:34:30 -08:00
Mitchell Hashimoto eda286b476 Config classes are registered via a registry now 2011-12-15 20:32:33 -08:00
Mitchell Hashimoto b428072bb5 Provisioners use the registry. Cleaned up the way config classes are searched for. 2011-12-14 22:43:45 -08:00
Mitchell Hashimoto 668bab0ba9 Better host loading scheme 2011-12-11 23:22:44 -08:00
Mitchell Hashimoto b8d40ea463 Registry is enumerable 2011-12-11 18:29:42 -08:00
Mitchell Hashimoto e201d9cacf Rename action registry to just Vagrant::Registry 2011-12-11 18:22:06 -08:00
Mitchell Hashimoto 05ae297fd2 Copy insecure private key to user owned directory [GH-580] 2011-12-11 16:32:25 -08:00
Mitchell Hashimoto 42a5e02db4 Clean up test load paths 2011-12-11 15:53:11 -08:00
Mitchell Hashimoto d9e2c8b788 Raise a nice error if home directory is not accessible 2011-12-10 17:14:07 -08:00
Mitchell Hashimoto 5c6ca57409 Throw an error if a box already exists when calling box.add 2011-12-10 13:09:03 -08:00
Mitchell Hashimoto 739d5ffb5f Lazy load attributes for runners. Get box repackage working. 2011-12-09 20:24:34 -08:00
Mitchell Hashimoto d9321ed4d4 Box destroy works again 2011-12-09 18:06:34 -08:00
Mitchell Hashimoto d92f3d8c6d Box add works again with new env stuff 2011-12-09 17:33:30 -08:00
Mitchell Hashimoto aeb6533607 Fix issue with Tempfile in test being deleted 2011-12-09 17:26:06 -08:00
Mitchell Hashimoto 56663b5952 Remove dependence on Vagrant::Environment on downloaders 2011-12-09 15:18:43 -08:00
Mitchell Hashimoto 3c8261f4ac Add :ui to the globals for the action runner 2011-12-09 14:50:42 -08:00
Mitchell Hashimoto b31c3d458c Action runner supports global parameters 2011-12-09 14:44:43 -08:00
Mitchell Hashimoto bbb8f0ac2c Integrate new action runner/registry into Vagrant::Environment 2011-12-09 14:39:39 -08:00
Mitchell Hashimoto daf711fd80 Separate Vagrant::Action into Runner and Registry 2011-12-09 14:22:03 -08:00
Mitchell Hashimoto 5bfcbcba66 Remove step stuff. Failed experiment for now. Too radical for point release. 2011-12-09 13:40:49 -08:00
Mitchell Hashimoto 2c73de0043 The proper enter/exit sequence is called for multisteps 2011-12-06 18:45:37 -08:00
Mitchell Hashimoto 822226cae4 MultiStep does not allow composing steps that do not work together 2011-12-06 18:31:07 -08:00
Mitchell Hashimoto 73761dc92a MultiStep should do input/output validation 2011-12-06 18:19:18 -08:00
Mitchell Hashimoto 7d3746b292 Multistep can now take parameters from any arbitrary step prior. 2011-12-06 09:46:57 -08:00
Mitchell Hashimoto 5b87165e97 Multistep tests pass again. 2011-12-05 21:08:31 -08:00
Mitchell Hashimoto c5eae41fd8 Revamp Step to be more like a Python with-context 2011-12-05 21:05:41 -08:00
Mitchell Hashimoto 683bbdaa3c Implement multistep 2011-12-04 18:09:18 -08:00
Mitchell Hashimoto 49d299956f Add the "Step" abstraction 2011-12-04 17:14:21 -08:00
Mitchell Hashimoto 8801bc7b1b Starting to revamp BoxCollection to not depend on env 2011-12-04 11:39:44 -08:00
Mitchell Hashimoto e2977e8948 Make VM names symbols again, since they're accessed often. 2011-12-03 19:33:44 -08:00
Mitchell Hashimoto 1921ce17e8 Propery load box configuration 2011-12-03 19:17:08 -08:00
Mitchell Hashimoto 99982fb26e VM-specific configuration now works. 2011-12-03 19:05:50 -08:00
Mitchell Hashimoto 73a672cff1 load_config! is kind of working again.
Specifically: Global configuration load appears to be working. More
unit tests should reveal if proper VM configuration is loading.
2011-12-03 18:31:17 -08:00
Mitchell Hashimoto 02cc1447dc Configuration files are only loaded once 2011-12-03 17:42:16 -08:00
Mitchell Hashimoto 15c56a1f4c Configuration loads. Lots of refactor to do still. 2011-12-03 17:29:28 -08:00
Mitchell Hashimoto 1a8c4199b2 Introduce Config::Loader
Config::Loader will be the new class responsible for loading configuration
and replaces the previous dual-role "Vagrant::Config" played. While this
commit is very early-stage, once this new architecture is flushed out, it
will make loading, using, and extending configuration much easier and cleaner.

Additionally, I believe this will help post Vagrant 1.0 if multi-language
configuration is implemented.
2011-12-03 17:12:48 -08:00
Mitchell Hashimoto 1355487a04 Environment UI class can now be set through the environment init 2011-12-03 16:07:34 -08:00
Mitchell Hashimoto fe442faefa Move unit tests into the unit_legacy folder 2011-12-03 15:44:08 -08:00
Mitchell Hashimoto c37f16b754 Remove final logger reference 2011-12-01 21:56:56 -08:00
Mitchell Hashimoto 282bf37350 Get the tests passing 2011-12-01 21:56:55 -08:00
Mitchell Hashimoto 0279cc1edf Do not buffer output for tests 2011-11-27 11:16:24 -07:00
Mitchell Hashimoto 1155983307 Get unit tests passing again 2011-11-25 23:55:17 -07:00
Darrin Wortlehock 4c01a87ab3 Adding support for 'no_proxy' environment variable to suppress proxy in http downloader 2011-11-24 21:54:35 -07:00
Mitchell Hashimoto c2ef1329aa Get tests passing for GH-508 2011-11-24 21:52:31 -07:00
Mitchell Hashimoto db491e1f9b Modify unit tests a bit 2011-11-24 21:31:30 -07:00
Justin Brown dcef64fa0d Remove the chef dependency on the default 'v-root' shared folder. 2011-11-22 19:03:52 -08:00
Mitchell Hashimoto 5d684b9001 Reload the configuration for all VMs after downloading a box. Fixes GH-564 2011-11-21 22:39:12 -08:00
Mitchell Hashimoto f83c1b3c27 Fix regression introduced with cab1e4e 2011-11-05 15:19:03 -07:00
Justin Brown 0c2fc0cae2 Make init respect the env's cwd. 2011-10-30 22:48:35 -07:00
Mitchell Hashimoto 245bcf436f Have tests pass on Ruby 1.8.x 2011-10-30 22:23:36 -07:00
Ticean Bennett dab80649b8 Added Basic Auth support to HTTP downloader. 2011-10-14 18:37:24 +02:00
Mitchell Hashimoto 7219f3d05b Show warning if forwarding port less than 1024 [closes GH-487] 2011-09-11 23:56:02 -07:00
Samer Abukhait 99646735d0 Don't do the port threshold check if running under root 2011-09-11 23:26:55 -07:00
Mitchell Hashimoto 1cfef2734a Fix crashing bug if .vagrant is invalid. [closes GH-496] 2011-09-11 23:23:17 -07:00
Mitchell Hashimoto ce5d989384 Moving unit tests to test/unit 2011-08-28 23:10:32 -07:00
John Bender 07be6f1ac0 config hash to dot methods 2010-01-21 23:38:41 -08:00
Mitchell Hashimoto 531aa5474d ruby-debug in tests 2010-01-21 21:36:34 -08:00
John Bender 032d0175de test_helper and passing test 2010-01-21 20:35:31 -08:00