503 Commits

Author SHA1 Message Date
sophia
921e7edb48
Reduce scope of plugins that can be returned from the core plugin manager 2022-04-25 12:26:50 -05:00
sophia
77a06e83d0
Close core plugins 2022-04-25 12:26:50 -05:00
sophia
68ffb3a8cf
Inject core plugin manager into context when running plugins 2022-04-25 12:26:50 -05:00
sophia
c2c784a295
Seed basis with core plugin manager 2022-04-25 12:26:49 -05:00
sophia
863c6a2704
Get BoxMetadata Plugin from the core plugin manager 2022-04-25 12:26:49 -05:00
Paul Hinze
4c21cb6ae5
Add release-grade logic for finding legacy Vagrant
After lots of experimentation I have landed on this as my proposal for
how we have our Go binary find its Ruby counterpart: just have it grab
it from the $PATH! @evanphx showed me this neat trick where by borrowing
a couple of helper methods from `exec` and tweaking them we can get
logic that will do a $PATH lookup that excludes "ourself". This allows
us to have both `vagrant` executables on the path... and means that
switching between Gogo-by-default or Legacy-by-default is just a matter
of tweaking $PATH order.

It _also_ means that we don't need any different lookup logic for
"release mode" vs "development mode" which is what I was looking at
before this solution.

In order to continue to facilitate development, I've generated a binstub
for vagrant using `bundle binstubs vagrant --standalone --path
./binstubs`, and I've updated the Nix development setup to prepend this
directory to the $PATH.

NOTE: Non-Nix users will need to modify their $PATH in the same way to
get the same behavior in development.
2022-04-25 12:26:49 -05:00
Paul Hinze
73a1be95fe
Fix nil dereference bug in new error handling logic
Found this while running `./vagrant box` with no args to get the help
output. It turns out you can have an empty RunResult but also a nil
error. I took the occasion to unwind the conditional tree a bit which
hopefully makes it a bit easier to read.
2022-04-25 12:26:49 -05:00
Paul Hinze
1341bfe0af
Tweak Ruby->Go error handling so exit codes match
In legacy Vagrant, any exception raised that's a subclass of
Vagrant::Errors::VagrantError is considered user-facing and so causes
the error message to be printed to the console and the process to use
exit code 1. Anything outside of that causes the process to use exit
code 255. (See `bin/vagrant` for the code.)

Here we mirror that behavior by treating errors that have a
LocalizedMessage as user-facing and those without as unexpected. This
allows the basic virtualbox component to pass in vagrant-spec!
2022-04-25 12:26:49 -05:00
sophia
211da5be23
Remove box count check when trying to recover boxes
The get box + stat operations are not that slow. No need to also
go through listing out all the boxes in the vagrant box dir.
2022-04-25 12:26:49 -05:00
sophia
c23e617fce
Check for metadata.json 2022-04-25 12:26:49 -05:00
sophia
0d38ccf20c
Create boxes dir if it does not exist 2022-04-25 12:26:49 -05:00
sophia
b3f8c5a99d
Add test for removing boxes that are no longer available 2022-04-25 12:26:48 -05:00
sophia
385bcbf81b
Remove box from db if it is no longer available on disk 2022-04-25 12:26:48 -05:00
sophia
82fa38f5e0
Check for consistency between db/boxes dir when creating box collection 2022-04-25 12:26:48 -05:00
sophia
aa9a03b9de
Ensure consistency between box db and dir 2022-04-25 12:26:48 -05:00
Paul Hinze
7f56168959
Work around a few global flag collisions for ssh command
* `vagrant ssh` has a --no-tty flag colliding with the one defined in
   `bin/vagrant` - in fact none of the flags in `bin/vagrant` are
   processed in `serve` mode, so remove the code that captures them from
   the CommandInfo OptionParser dance
 * `vagrant ssh` has a `--plain` flag colliding with the one defined in
   `internal/cli/base.go` - this flag was inherited from Waypoint, so we
   can just rename it to line up with the (inversely defined) `--color`
   flag used in legacy vagrant
2022-04-25 12:26:48 -05:00
sophia
d3f22f3a68
Don't count machines that have not been created when looking for boxes in use 2022-04-25 12:26:48 -05:00
sophia
6e420689cb
Update Target State for updated states 2022-04-25 12:26:48 -05:00
sophia
b62bdd8efb
Add missing Target states to proto 2022-04-25 12:26:47 -05:00
Paul Hinze
8f9952089a
Fix commands that run without a project
Some commands like `vagrant init` and `vagrant box` should be able to
run successfully without a full Project available in VAGRANT_CWD (in
other words, they don't require that a valid Vagrantfile be available.)

Thus far we've been assuming that a Project is available when
dispatching commands, which mean that commands of this nature weren't
working.

Here we make the Basis available to serve as an alternative client to
Vagrant::Environment::Remote such that it can be instantiated and passed
through to commands. This required some changes to Environment::Remote
to make its interactions with the client more defensive, but we manage
to avoid needing to make any changes to the normal legacy codepaths.
2022-04-25 12:26:47 -05:00
Paul Hinze
61fbd0f622
Move Basis, Project, and Target seeding earlier
Having these objects populate their seeds during `Run` was too late for
those values to show up in command plugins, which would be seeded with
empty args instead.

h/t @chrisroberts for the debugging help and fix suggestion!
2022-04-25 12:26:47 -05:00
sophia
e9e24986bd
Add ability to get metadata associated with a box 2022-04-25 12:26:47 -05:00
sophia
2b4c99aaa0
Don't add destroyed machines to list of active machines when searching for box usage 2022-04-25 12:26:46 -05:00
sophia
c13dcc938c
Only include machines that have been created 2022-04-25 12:26:46 -05:00
sophia
62e049e201
Implement box machines 2022-04-25 12:26:46 -05:00
sophia
ba0bb1d9c6
Add machine tests for boxes 2022-04-25 12:26:45 -05:00
sophia
ac18a1c001
Don't add a box to the db when querying the machine for it's box
If the box does not exist in the db, then a box will be returned
with the name and provider information. All other box information
at that point is unknown.
2022-04-25 12:26:45 -05:00
sophia
7eccedba12
Add test for box with 0 version number 2022-04-25 12:26:45 -05:00
sophia
fc649b0937
Set first match without version constraint 2022-04-25 12:26:45 -05:00
sophia
517c33aacf
Ensure json data is recieved from vagrant cloud 2022-04-25 12:26:45 -05:00
sophia
c60836fc12
Get box provider from target 2022-04-25 12:26:45 -05:00
sophia
e27fb8aa07
Ensure json metadata is retrieved for box 2022-04-25 12:26:45 -05:00
sophia
f97aff623f
Set default log level fwhen launching vagrant ruby 2022-04-25 12:26:45 -05:00
sophia
3516aa7131
Set defailt Vagrant log level 2022-04-25 12:26:44 -05:00
sophia
0904996af1
Set default log level for VAGRANT_LOG 2022-04-25 12:26:44 -05:00
sophia
4a9948c245
Add nested metadata data to box tests 2022-04-25 12:26:44 -05:00
sophia
2d477ed675
Use struct for box metadata 2022-04-25 12:26:44 -05:00
sophia
5d348e66a1
Update box proto to use struct for metadata 2022-04-25 12:26:44 -05:00
Paul Hinze
4b0acfb513
Fix unit tests
The type needs a string pointer now. We may end up wanting a string
pointer making convenience method in the SDK at some point, but for now
I punted on that question and just made one for the test.
2022-04-25 12:26:44 -05:00
Paul Hinze
7c1d2e5368
Use optional fields on Synced Folder instead of empty string checks
Addresses concerns raised in discussion here
https://github.com/hashicorp/vagrant-ruby/pull/219#discussion_r816966056
and makes it so we don't have to change any plugin code to make things
work.

Depends on https://github.com/hashicorp/vagrant-plugin-sdk/pull/133
2022-04-25 12:26:44 -05:00
Chris Roberts
6ba7807f7b
Add ClearLine() to UI implementations 2022-04-25 12:26:43 -05:00
sophia
e6c50e3d7e
Add target index tests 2022-04-25 12:26:42 -05:00
sophia
dffa7547e8
Simplify target index to keep track of basis opposed to loading one in from the factory 2022-04-25 12:26:42 -05:00
sophia
8547cb696d
Test project 2022-04-25 12:26:42 -05:00
sophia
9179dd1abc
Use ptypes to generate testing target 2022-04-25 12:26:42 -05:00
sophia
26621c7e0b
Add tests for state bag 2022-04-25 12:26:42 -05:00
sophia
0731b5486a
Add tests for basis 2022-04-25 12:26:42 -05:00
sophia
7f0adfce78
Add tests for synced folders 2022-04-25 12:26:42 -05:00
sophia
13283a0a71
Add tests for setting machine state 2022-04-25 12:26:41 -05:00
sophia
6abbb5e8eb
Check for plugin name correctness 2022-04-25 12:26:41 -05:00