vagrant-unbundled 2.2.7.0 → 2.2.16.0

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 (282) hide show
  1. checksums.yaml +4 -4
  2. data/.hashibot.hcl +2 -0
  3. data/CHANGELOG.md +228 -0
  4. data/Gemfile +1 -1
  5. data/README.md +9 -51
  6. data/RELEASE.md +1 -1
  7. data/bin/vagrant +50 -1
  8. data/contrib/README.md +1 -0
  9. data/contrib/sudoers/linux-suse +2 -2
  10. data/contrib/zsh/_vagrant +738 -0
  11. data/contrib/zsh/generate_zsh_completion.rb +165 -0
  12. data/lib/vagrant.rb +28 -5
  13. data/lib/vagrant/action.rb +7 -0
  14. data/lib/vagrant/action/builder.rb +184 -38
  15. data/lib/vagrant/action/builtin/box_add.rb +24 -8
  16. data/lib/vagrant/action/builtin/box_check_outdated.rb +2 -1
  17. data/lib/vagrant/action/builtin/cleanup_disks.rb +56 -0
  18. data/lib/vagrant/action/builtin/cloud_init_setup.rb +122 -0
  19. data/lib/vagrant/action/builtin/cloud_init_wait.rb +30 -0
  20. data/lib/vagrant/action/builtin/delayed.rb +26 -0
  21. data/lib/vagrant/action/builtin/disk.rb +14 -1
  22. data/lib/vagrant/action/builtin/handle_box.rb +3 -1
  23. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +28 -9
  24. data/lib/vagrant/action/builtin/has_provisioner.rb +36 -0
  25. data/lib/vagrant/action/builtin/mixin_provisioners.rb +1 -0
  26. data/lib/vagrant/action/builtin/mixin_synced_folders.rb +20 -21
  27. data/lib/vagrant/action/builtin/set_hostname.rb +5 -1
  28. data/lib/vagrant/action/builtin/synced_folders.rb +16 -0
  29. data/lib/vagrant/action/builtin/trigger.rb +37 -0
  30. data/lib/vagrant/action/hook.rb +76 -23
  31. data/lib/vagrant/action/runner.rb +12 -27
  32. data/lib/vagrant/action/warden.rb +28 -31
  33. data/lib/vagrant/box.rb +11 -4
  34. data/lib/vagrant/box_collection.rb +1 -1
  35. data/lib/vagrant/bundler.rb +310 -61
  36. data/lib/vagrant/cli.rb +4 -2
  37. data/lib/vagrant/environment.rb +1 -0
  38. data/lib/vagrant/errors.rb +69 -1
  39. data/lib/vagrant/machine.rb +64 -11
  40. data/lib/vagrant/machine_index.rb +28 -1
  41. data/lib/vagrant/patches/net-ssh.rb +186 -0
  42. data/lib/vagrant/plugin/manager.rb +45 -16
  43. data/lib/vagrant/plugin/v2/command.rb +7 -2
  44. data/lib/vagrant/plugin/v2/components.rb +6 -0
  45. data/lib/vagrant/plugin/v2/manager.rb +67 -0
  46. data/lib/vagrant/plugin/v2/plugin.rb +13 -0
  47. data/lib/vagrant/plugin/v2/synced_folder.rb +50 -0
  48. data/lib/vagrant/plugin/v2/trigger.rb +64 -25
  49. data/lib/vagrant/shared_helpers.rb +36 -0
  50. data/lib/vagrant/ui.rb +43 -2
  51. data/lib/vagrant/util.rb +2 -0
  52. data/lib/vagrant/util/ansi_escape_code_remover.rb +1 -1
  53. data/lib/vagrant/util/caps.rb +48 -0
  54. data/lib/vagrant/util/credential_scrubber.rb +1 -1
  55. data/lib/vagrant/util/curl_helper.rb +12 -8
  56. data/lib/vagrant/util/directory.rb +19 -0
  57. data/lib/vagrant/util/downloader.rb +10 -5
  58. data/lib/vagrant/util/guest_hosts.rb +68 -0
  59. data/lib/vagrant/util/guest_inspection.rb +9 -1
  60. data/lib/vagrant/util/install_cli_autocomplete.rb +118 -0
  61. data/lib/vagrant/util/io.rb +7 -27
  62. data/lib/vagrant/util/ipv4_interfaces.rb +15 -0
  63. data/lib/vagrant/util/is_port_open.rb +8 -19
  64. data/lib/vagrant/util/map_command_options.rb +33 -0
  65. data/lib/vagrant/util/mime.rb +92 -0
  66. data/lib/vagrant/util/network_ip.rb +11 -1
  67. data/lib/vagrant/util/numeric.rb +28 -0
  68. data/lib/vagrant/util/platform.rb +10 -2
  69. data/lib/vagrant/util/powershell.rb +31 -15
  70. data/lib/vagrant/util/subprocess.rb +9 -1
  71. data/lib/vagrant/util/template_renderer.rb +2 -2
  72. data/lib/vagrant/util/uploader.rb +7 -4
  73. data/lib/vagrant/vagrantfile.rb +2 -2
  74. data/plugins/commands/autocomplete/command/install.rb +49 -0
  75. data/plugins/commands/autocomplete/command/root.rb +64 -0
  76. data/plugins/commands/autocomplete/plugin.rb +18 -0
  77. data/plugins/commands/cap/command.rb +5 -1
  78. data/plugins/commands/cloud/auth/login.rb +20 -23
  79. data/plugins/commands/cloud/auth/logout.rb +2 -10
  80. data/plugins/commands/cloud/auth/middleware/add_authentication.rb +60 -31
  81. data/plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb +64 -0
  82. data/plugins/commands/cloud/auth/whoami.rb +18 -20
  83. data/plugins/commands/cloud/box/create.rb +33 -29
  84. data/plugins/commands/cloud/box/delete.rb +30 -24
  85. data/plugins/commands/cloud/box/show.rb +41 -31
  86. data/plugins/commands/cloud/box/update.rb +34 -26
  87. data/plugins/commands/cloud/client/client.rb +55 -79
  88. data/plugins/commands/cloud/list.rb +3 -4
  89. data/plugins/commands/cloud/locales/en.yml +15 -11
  90. data/plugins/commands/cloud/plugin.rb +10 -0
  91. data/plugins/commands/cloud/provider/create.rb +38 -28
  92. data/plugins/commands/cloud/provider/delete.rb +39 -29
  93. data/plugins/commands/cloud/provider/update.rb +37 -28
  94. data/plugins/commands/cloud/provider/upload.rb +53 -33
  95. data/plugins/commands/cloud/publish.rb +193 -106
  96. data/plugins/commands/cloud/search.rb +34 -21
  97. data/plugins/commands/cloud/util.rb +273 -161
  98. data/plugins/commands/cloud/version/create.rb +33 -28
  99. data/plugins/commands/cloud/version/delete.rb +35 -28
  100. data/plugins/commands/cloud/version/release.rb +35 -29
  101. data/plugins/commands/cloud/version/revoke.rb +36 -29
  102. data/plugins/commands/cloud/version/update.rb +29 -25
  103. data/plugins/commands/destroy/command.rb +7 -7
  104. data/plugins/commands/login/plugin.rb +0 -13
  105. data/plugins/commands/ssh_config/command.rb +1 -1
  106. data/plugins/communicators/ssh/communicator.rb +25 -24
  107. data/plugins/communicators/winrm/config.rb +1 -1
  108. data/plugins/communicators/winrm/helper.rb +1 -1
  109. data/plugins/communicators/winrm/shell.rb +1 -1
  110. data/plugins/communicators/winssh/communicator.rb +126 -38
  111. data/plugins/communicators/winssh/config.rb +3 -7
  112. data/plugins/guests/alpine/cap/change_host_name.rb +10 -11
  113. data/plugins/guests/alpine/cap/configure_networks.rb +1 -1
  114. data/plugins/guests/alt/cap/change_host_name.rb +40 -53
  115. data/plugins/guests/arch/cap/change_host_name.rb +5 -14
  116. data/plugins/guests/arch/cap/configure_networks.rb +27 -10
  117. data/plugins/guests/arch/cap/smb.rb +1 -1
  118. data/plugins/guests/atomic/cap/change_host_name.rb +5 -14
  119. data/plugins/guests/centos/cap/flavor.rb +24 -0
  120. data/plugins/guests/centos/guest.rb +9 -0
  121. data/plugins/guests/centos/plugin.rb +20 -0
  122. data/plugins/guests/darwin/cap/change_host_name.rb +10 -6
  123. data/plugins/guests/darwin/cap/darwin_version.rb +40 -0
  124. data/plugins/guests/darwin/cap/mount_smb_shared_folder.rb +1 -1
  125. data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +33 -10
  126. data/plugins/guests/darwin/plugin.rb +15 -0
  127. data/plugins/guests/debian/cap/change_host_name.rb +12 -11
  128. data/plugins/guests/debian/cap/configure_networks.rb +14 -6
  129. data/plugins/guests/esxi/cap/public_key.rb +3 -1
  130. data/plugins/guests/fedora/guest.rb +4 -4
  131. data/plugins/guests/freebsd/cap/change_host_name.rb +10 -6
  132. data/plugins/guests/gentoo/cap/change_host_name.rb +14 -22
  133. data/plugins/guests/haiku/cap/rsync.rb +19 -0
  134. data/plugins/guests/haiku/plugin.rb +15 -0
  135. data/plugins/guests/linux/cap/change_host_name.rb +46 -0
  136. data/plugins/guests/linux/cap/halt.rb +9 -1
  137. data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +25 -34
  138. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +10 -11
  139. data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +74 -0
  140. data/plugins/guests/linux/cap/reboot.rb +36 -7
  141. data/plugins/guests/linux/plugin.rb +10 -0
  142. data/plugins/guests/omnios/cap/change_host_name.rb +10 -16
  143. data/plugins/guests/openbsd/cap/change_host_name.rb +10 -6
  144. data/plugins/guests/openwrt/cap/change_host_name.rb +19 -0
  145. data/plugins/guests/openwrt/cap/halt.rb +16 -0
  146. data/plugins/guests/openwrt/cap/insert_public_key.rb +20 -0
  147. data/plugins/guests/openwrt/cap/remove_public_key.rb +22 -0
  148. data/plugins/guests/openwrt/cap/rsync.rb +35 -0
  149. data/plugins/guests/openwrt/guest.rb +23 -0
  150. data/plugins/guests/openwrt/plugin.rb +61 -0
  151. data/plugins/guests/photon/cap/change_host_name.rb +9 -15
  152. data/plugins/guests/pld/cap/change_host_name.rb +11 -17
  153. data/plugins/guests/redhat/cap/change_host_name.rb +14 -5
  154. data/plugins/guests/redhat/cap/flavor.rb +3 -1
  155. data/plugins/guests/redhat/cap/smb.rb +20 -0
  156. data/plugins/guests/redhat/plugin.rb +5 -0
  157. data/plugins/guests/slackware/cap/change_host_name.rb +11 -17
  158. data/plugins/guests/solaris11/plugin.rb +5 -0
  159. data/plugins/guests/suse/cap/change_host_name.rb +31 -9
  160. data/plugins/guests/windows/cap/public_key.rb +3 -3
  161. data/plugins/guests/windows/cap/reboot.rb +10 -5
  162. data/plugins/hosts/darwin/cap/fs_iso.rb +49 -0
  163. data/plugins/hosts/darwin/plugin.rb +10 -0
  164. data/plugins/hosts/linux/cap/fs_iso.rb +49 -0
  165. data/plugins/hosts/linux/cap/nfs.rb +1 -0
  166. data/plugins/hosts/linux/cap/rdp.rb +1 -1
  167. data/plugins/hosts/linux/plugin.rb +10 -0
  168. data/plugins/hosts/windows/cap/fs_iso.rb +48 -0
  169. data/plugins/hosts/windows/cap/rdp.rb +1 -1
  170. data/plugins/hosts/windows/plugin.rb +15 -0
  171. data/plugins/kernel_v2/config/cloud_init.rb +133 -0
  172. data/plugins/kernel_v2/config/disk.rb +67 -14
  173. data/plugins/kernel_v2/config/ssh_connect.rb +24 -0
  174. data/plugins/kernel_v2/config/vm.rb +155 -21
  175. data/plugins/kernel_v2/config/vm_provisioner.rb +13 -2
  176. data/plugins/kernel_v2/config/vm_trigger.rb +6 -5
  177. data/plugins/providers/docker/action.rb +8 -17
  178. data/plugins/providers/docker/action/forwarded_ports.rb +2 -0
  179. data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +61 -0
  180. data/plugins/providers/docker/cap/has_communicator.rb +11 -0
  181. data/plugins/providers/docker/communicator.rb +1 -1
  182. data/plugins/providers/docker/driver.rb +58 -7
  183. data/plugins/providers/docker/plugin.rb +5 -0
  184. data/plugins/providers/hyperv/action.rb +3 -1
  185. data/plugins/providers/hyperv/action/configure.rb +8 -0
  186. data/plugins/providers/hyperv/action/export.rb +4 -2
  187. data/plugins/providers/hyperv/cap/cleanup_disks.rb +54 -0
  188. data/plugins/providers/hyperv/cap/configure_disks.rb +200 -0
  189. data/plugins/providers/hyperv/cap/validate_disk_ext.rb +34 -0
  190. data/plugins/providers/hyperv/config.rb +5 -0
  191. data/plugins/providers/hyperv/driver.rb +90 -9
  192. data/plugins/providers/hyperv/plugin.rb +25 -0
  193. data/plugins/providers/hyperv/scripts/attach_disk_drive.ps1 +28 -0
  194. data/plugins/providers/hyperv/scripts/dismount_vhd.ps1 +13 -0
  195. data/plugins/providers/hyperv/scripts/get_vhd.ps1 +16 -0
  196. data/plugins/providers/hyperv/scripts/get_vm_status.ps1 +1 -1
  197. data/plugins/providers/hyperv/scripts/list_hdds.ps1 +17 -0
  198. data/plugins/providers/hyperv/scripts/new_vhd.ps1 +31 -0
  199. data/plugins/providers/hyperv/scripts/remove_disk_drive.ps1 +25 -0
  200. data/plugins/providers/hyperv/scripts/resize_disk_drive.ps1 +18 -0
  201. data/plugins/providers/hyperv/scripts/set_enhanced_session_transport_type.ps1 +24 -0
  202. data/plugins/providers/hyperv/scripts/set_vm_integration_services.ps1 +3 -3
  203. data/plugins/providers/hyperv/scripts/utils/VagrantVM/VagrantVM.psm1 +14 -6
  204. data/plugins/providers/virtualbox/action.rb +13 -1
  205. data/plugins/providers/virtualbox/action/export.rb +4 -2
  206. data/plugins/providers/virtualbox/action/forward_ports.rb +2 -2
  207. data/plugins/providers/virtualbox/action/import.rb +8 -4
  208. data/plugins/providers/virtualbox/action/network.rb +12 -5
  209. data/plugins/providers/virtualbox/action/prepare_clone_snapshot.rb +4 -2
  210. data/plugins/providers/virtualbox/action/snapshot_delete.rb +4 -2
  211. data/plugins/providers/virtualbox/action/snapshot_restore.rb +4 -2
  212. data/plugins/providers/virtualbox/cap/cleanup_disks.rb +85 -0
  213. data/plugins/providers/virtualbox/cap/configure_disks.rb +440 -0
  214. data/plugins/providers/virtualbox/cap/mount_options.rb +40 -0
  215. data/plugins/providers/virtualbox/cap/validate_disk_ext.rb +34 -0
  216. data/plugins/providers/virtualbox/driver/base.rb +15 -0
  217. data/plugins/providers/virtualbox/driver/meta.rb +16 -2
  218. data/plugins/providers/virtualbox/driver/version_5_0.rb +217 -2
  219. data/plugins/providers/virtualbox/driver/version_6_1.rb +23 -0
  220. data/plugins/providers/virtualbox/model/storage_controller.rb +135 -0
  221. data/plugins/providers/virtualbox/model/storage_controller_array.rb +98 -0
  222. data/plugins/providers/virtualbox/plugin.rb +42 -0
  223. data/plugins/providers/virtualbox/provider.rb +2 -1
  224. data/plugins/providers/virtualbox/synced_folder.rb +1 -0
  225. data/plugins/provisioners/ansible/cap/guest/alpine/ansible_install.rb +44 -0
  226. data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +1 -1
  227. data/plugins/provisioners/ansible/plugin.rb +5 -0
  228. data/plugins/provisioners/ansible/provisioner/base.rb +1 -1
  229. data/plugins/provisioners/container/client.rb +203 -0
  230. data/plugins/provisioners/container/config.rb +83 -0
  231. data/plugins/provisioners/container/installer.rb +13 -0
  232. data/plugins/provisioners/container/plugin.rb +23 -0
  233. data/plugins/provisioners/container/provisioner.rb +28 -0
  234. data/plugins/provisioners/docker/cap/{redhat → centos}/docker_install.rb +10 -7
  235. data/plugins/provisioners/docker/cap/centos/docker_start_service.rb +24 -0
  236. data/plugins/provisioners/docker/client.rb +4 -175
  237. data/plugins/provisioners/docker/config.rb +2 -72
  238. data/plugins/provisioners/docker/installer.rb +3 -5
  239. data/plugins/provisioners/docker/plugin.rb +6 -6
  240. data/plugins/provisioners/docker/provisioner.rb +4 -10
  241. data/plugins/provisioners/podman/cap/centos/podman_install.rb +35 -0
  242. data/plugins/provisioners/podman/cap/linux/podman_installed.rb +13 -0
  243. data/plugins/provisioners/podman/cap/redhat/podman_install.rb +26 -0
  244. data/plugins/provisioners/podman/client.rb +12 -0
  245. data/plugins/provisioners/podman/config.rb +28 -0
  246. data/plugins/provisioners/podman/installer.rb +33 -0
  247. data/plugins/provisioners/podman/plugin.rb +38 -0
  248. data/plugins/provisioners/podman/provisioner.rb +52 -0
  249. data/plugins/provisioners/salt/bootstrap-salt.sh +7 -4
  250. data/plugins/provisioners/salt/provisioner.rb +4 -0
  251. data/plugins/provisioners/shell/config.rb +1 -6
  252. data/plugins/provisioners/shell/provisioner.rb +61 -26
  253. data/plugins/synced_folders/nfs/synced_folder.rb +3 -1
  254. data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +11 -0
  255. data/plugins/synced_folders/smb/cap/mount_options.rb +56 -0
  256. data/plugins/synced_folders/smb/plugin.rb +20 -0
  257. data/plugins/synced_folders/smb/synced_folder.rb +2 -2
  258. data/plugins/synced_folders/unix_mount_helpers.rb +14 -0
  259. data/scripts/website_push_www.sh +1 -1
  260. data/templates/commands/init/Vagrantfile.min.erb +3 -0
  261. data/templates/guests/arch/{network_dhcp.erb → default_network/network_dhcp.erb} +0 -0
  262. data/templates/guests/arch/{network_static.erb → default_network/network_static.erb} +0 -0
  263. data/templates/guests/arch/{network_static6.erb → default_network/network_static6.erb} +0 -0
  264. data/templates/guests/arch/systemd_networkd/network_dhcp.erb +6 -0
  265. data/templates/guests/arch/systemd_networkd/network_static.erb +9 -0
  266. data/templates/guests/arch/systemd_networkd/network_static6.erb +9 -0
  267. data/templates/guests/linux/etc_fstab.erb +6 -0
  268. data/templates/guests/nixos/network.erb +5 -6
  269. data/templates/locales/en.yml +221 -5
  270. data/templates/locales/providers_docker.yml +4 -0
  271. data/templates/nfs/exports_darwin.erb +1 -1
  272. data/vagrant.gemspec +14 -20
  273. data/version.txt +1 -1
  274. metadata +5092 -8978
  275. data/lib/vagrant/action/builtin/after_trigger.rb +0 -31
  276. data/lib/vagrant/action/builtin/before_trigger.rb +0 -28
  277. data/plugins/commands/login/client.rb +0 -253
  278. data/plugins/commands/login/command.rb +0 -137
  279. data/plugins/commands/login/errors.rb +0 -24
  280. data/plugins/commands/login/locales/en.yml +0 -49
  281. data/plugins/provisioners/docker/cap/redhat/docker_start_service.rb +0 -16
  282. data/scripts/website_push_docs.sh +0 -40
@@ -4,6 +4,8 @@ module VagrantPlugins
4
4
  module CloudCommand
5
5
  module Command
6
6
  class List < Vagrant.plugin("2", :command)
7
+ include Util
8
+
7
9
  def execute
8
10
  options = {}
9
11
 
@@ -27,9 +29,6 @@ module VagrantPlugins
27
29
  o.on("-s", "--sort-by", "Column to sort list (created, downloads, updated)") do |s|
28
30
  options[:check] = s
29
31
  end
30
- o.on("-u", "--username USERNAME_OR_EMAIL", String, "Vagrant Cloud username or email address") do |t|
31
- options[:username] = u
32
- end
33
32
  end
34
33
 
35
34
  # Parse the options
@@ -40,7 +39,7 @@ module VagrantPlugins
40
39
  help: opts.help.chomp
41
40
  end
42
41
 
43
- @client = VagrantPlugins::CloudCommand::Util.client_login(@env, options[:username])
42
+ @client = client_login(@env)
44
43
 
45
44
  # TODO: This endpoint is not implemented yet
46
45
 
@@ -13,14 +13,8 @@ en:
13
13
 
14
14
  Press ctrl-c to cancel...
15
15
  publish:
16
- update_continue: |-
17
- %{obj} already exists, updating instead...
18
- box_create:
19
- Creating a box entry...
20
- version_create:
21
- Creating a version entry...
22
- provider_create:
23
- Creating a provider entry...
16
+ box_save:
17
+ Saving box information...
24
18
  upload_provider:
25
19
  Uploading provider with file %{file}
26
20
  release:
@@ -45,7 +39,7 @@ en:
45
39
  version_desc: |-
46
40
  Version Description: %{version_description}
47
41
  continue: |-
48
- Do you wish to continue? [y/N]
42
+ Do you wish to continue? [y/N]
49
43
  box:
50
44
  show_filter_empty: |-
51
45
  No version matched %{version} for %{org}/%{box_name}
@@ -57,6 +51,8 @@ en:
57
51
  This will completely remove %{box} from Vagrant Cloud. This cannot be undone.
58
52
  update_success: |-
59
53
  Updated box %{org}/%{box_name}
54
+ not_found: |-
55
+ Failed to locate requested box: %{org}/%{box_name}
60
56
  search:
61
57
  no_results: |-
62
58
  No results found for `%{query}`
@@ -77,6 +73,12 @@ en:
77
73
  Deleted provider %{provider} on %{org}/%{box_name} for version %{version}
78
74
  update_success: |-
79
75
  Updated provider %{provider} on %{org}/%{box_name} for version %{version}
76
+ not_found: |-
77
+ Failed to locate %{provider_name} provider for %{org}/%{box_name} on version %{version}
78
+ direct_disable: |-
79
+ Vagrant is automatically disabling direct upload to backend storage.
80
+ Uploads directly to backend storage are currently only supported for
81
+ files 5G in size or smaller. Box file to upload is: %{size}
80
82
  version:
81
83
  create_success: |-
82
84
  Created version %{version} on %{org}/%{box_name} for version %{version}
@@ -94,6 +96,8 @@ en:
94
96
  This will release version %{version} from %{box} to Vagrant Cloud and be available to download.
95
97
  delete_warn: |-
96
98
  This will completely remove version %{version} from %{box} from Vagrant Cloud. This cannot be undone.
99
+ not_found: |-
100
+ Failed to locate version %{version} for %{org}/%{box_name}
97
101
  errors:
98
102
  search:
99
103
  fail: |-
@@ -112,7 +116,7 @@ en:
112
116
  Failed to update box %{org}/%{box_name}
113
117
  whoami:
114
118
  read_error: |-
115
- Failed to read organization %{org}
119
+ Failed to locate account information
116
120
  provider:
117
121
  create_fail: |-
118
122
  Failed to create provider %{provider} on box %{org}/%{box_name} for version %{version}
@@ -144,7 +148,7 @@ en:
144
148
  unauthorized: |-
145
149
  Invalid username or password. Please try again.
146
150
  unexpected_error: |-
147
- An unexpected error occured: %{error}
151
+ An unexpected error occurred: %{error}
148
152
 
149
153
  check_logged_in: |-
150
154
  You are already logged in.
@@ -12,6 +12,11 @@ module VagrantPlugins
12
12
  DESC
13
13
 
14
14
  command(:cloud) do
15
+ # Set this to match Vagant logging level so we get
16
+ # desired request/response information within the
17
+ # logger output
18
+ ENV["VAGRANT_CLOUD_LOG"] = Vagrant.log_level
19
+
15
20
  require_relative "root"
16
21
  init!
17
22
  Command::Root
@@ -22,6 +27,11 @@ module VagrantPlugins
22
27
  hook.prepend(AddAuthentication)
23
28
  end
24
29
 
30
+ action_hook(:cloud_authenticated_boxes, :authenticate_box_downloader) do |hook|
31
+ require_relative "auth/middleware/add_downloader_authentication"
32
+ hook.prepend(AddDownloaderAuthentication)
33
+ end
34
+
25
35
  protected
26
36
 
27
37
  def self.init!
@@ -5,6 +5,8 @@ module VagrantPlugins
5
5
  module ProviderCommand
6
6
  module Command
7
7
  class Create < Vagrant.plugin("2", :command)
8
+ include Util
9
+
8
10
  def execute
9
11
  options = {}
10
12
 
@@ -16,9 +18,6 @@ module VagrantPlugins
16
18
  o.separator "Options:"
17
19
  o.separator ""
18
20
 
19
- o.on("-u", "--username USERNAME_OR_EMAIL", String, "Vagrant Cloud username or email address") do |u|
20
- options[:username] = u
21
- end
22
21
  o.on("-c", "--checksum CHECKSUM_VALUE", String, "Checksum of the box for this provider. --checksum-type option is required.") do |c|
23
22
  options[:checksum] = c
24
23
  end
@@ -30,48 +29,59 @@ module VagrantPlugins
30
29
  # Parse the options
31
30
  argv = parse_options(opts)
32
31
  return if !argv
33
- if argv.empty? || argv.length > 4
32
+ if argv.count < 3 || argv.count > 4
34
33
  raise Vagrant::Errors::CLIInvalidUsage,
35
34
  help: opts.help.chomp
36
35
  end
37
36
 
38
- @client = VagrantPlugins::CloudCommand::Util.client_login(@env, options[:username])
37
+ @client = client_login(@env)
39
38
 
40
- box = argv.first.split('/', 2)
41
- org = box[0]
42
- box_name = box[1]
39
+ org, box_name = argv.first.split('/', 2)
43
40
  provider_name = argv[1]
44
41
  version = argv[2]
45
42
  url = argv[3]
46
43
 
47
- upload_provider(org, box_name, provider_name, version, url, @client.token, options)
44
+ create_provider(org, box_name, version, provider_name, url, @client.token, options)
48
45
  end
49
46
 
50
- def upload_provider(org, box_name, provider_name, version, url, access_token, options)
47
+ # Create a provider for the box version
48
+ #
49
+ # @param [String] org Organization name
50
+ # @param [String] box Box name
51
+ # @param [String] version Box version
52
+ # @param [String] provider Provider name
53
+ # @param [String] url Provider asset URL
54
+ # @param [String] access_token User Vagrant Cloud access token
55
+ # @param [Hash] options
56
+ # @option options [String] :checksum Checksum of the box asset
57
+ # @option options [String] :checksum_type Type of the checksum
58
+ # @return [Integer]
59
+ def create_provider(org, box, version, provider, url, access_token, options={})
51
60
  if !url
52
61
  @env.ui.warn(I18n.t("cloud_command.upload.no_url"))
53
62
  end
63
+ account = VagrantCloud::Account.new(
64
+ custom_server: api_server_url,
65
+ access_token: access_token
66
+ )
67
+ with_version(account: account, org: org, box: box, version: version) do |version|
68
+ provider = version.add_provider(provider)
69
+ provider.checksum = options[:checksum] if options.key?(:checksum)
70
+ provider.checksum_type = options[:checksum_type] if options.key?(:checksum_type)
71
+ provider.url = url if url
54
72
 
55
- org = options[:username] if options[:username]
56
-
57
- server_url = VagrantPlugins::CloudCommand::Util.api_server_url
58
- account = VagrantPlugins::CloudCommand::Util.account(org, access_token, server_url)
59
- box = VagrantCloud::Box.new(account, box_name, nil, nil, nil, access_token)
60
- cloud_version = VagrantCloud::Version.new(box, version, nil, nil, access_token)
61
- provider = VagrantCloud::Provider.new(cloud_version, provider_name, nil, url, org, box_name,
62
- access_token, nil, options[:checksum], options[:checksum_type])
73
+ provider.save
63
74
 
64
- begin
65
- success = provider.create_provider
66
- @env.ui.success(I18n.t("cloud_command.provider.create_success", provider: provider_name, org: org, box_name: box_name, version: version))
67
- success = success.compact
68
- VagrantPlugins::CloudCommand::Util.format_box_results(success, @env)
69
- return 0
70
- rescue VagrantCloud::ClientError => e
71
- @env.ui.error(I18n.t("cloud_command.errors.provider.create_fail", provider: provider_name, org: org, box_name: box_name, version: version))
72
- @env.ui.error(e)
73
- return 1
75
+ @env.ui.success(I18n.t("cloud_command.provider.create_success",
76
+ provider: provider.name, org: org, box_name: box, version: version.version))
77
+ format_box_results(provider, @env)
78
+ 0
74
79
  end
80
+ rescue VagrantCloud::Error => e
81
+ @env.ui.error(I18n.t("cloud_command.errors.provider.create_fail",
82
+ provider: provider, org: org, box_name: box, version: version))
83
+ @env.ui.error(e.message)
84
+ 1
75
85
  end
76
86
  end
77
87
  end
@@ -5,6 +5,8 @@ module VagrantPlugins
5
5
  module ProviderCommand
6
6
  module Command
7
7
  class Delete < Vagrant.plugin("2", :command)
8
+ include Util
9
+
8
10
  def execute
9
11
  options = {}
10
12
 
@@ -15,53 +17,61 @@ module VagrantPlugins
15
17
  o.separator ""
16
18
  o.separator "Options:"
17
19
  o.separator ""
18
-
19
- o.on("-u", "--username USERNAME_OR_EMAIL", String, "Vagrant Cloud username or email address") do |u|
20
- options[:username] = u
20
+ o.on("-f", "--[no-]force", "Force deletion of box version provider without confirmation") do |f|
21
+ options[:force] = f
21
22
  end
22
23
  end
23
24
 
24
25
  # Parse the options
25
26
  argv = parse_options(opts)
26
27
  return if !argv
27
- if argv.empty? || argv.length > 3
28
+ if argv.count != 3
28
29
  raise Vagrant::Errors::CLIInvalidUsage,
29
30
  help: opts.help.chomp
30
31
  end
31
32
 
32
- box = argv.first.split('/', 2)
33
- org = box[0]
34
- box_name = box[1]
33
+ org, box_name = argv.first.split('/', 2)
35
34
  provider_name = argv[1]
36
35
  version = argv[2]
37
36
 
38
- @env.ui.warn(I18n.t("cloud_command.provider.delete_warn", provider: provider_name, version:version, box: argv.first))
39
- cont = @env.ui.ask(I18n.t("cloud_command.continue"))
40
- return 1 if cont.strip.downcase != "y"
41
-
42
- @client = VagrantPlugins::CloudCommand::Util.client_login(@env, options[:username])
37
+ @env.ui.warn(I18n.t("cloud_command.provider.delete_warn",
38
+ provider: provider_name, version:version, box: argv.first))
43
39
 
44
- delete_provider(org, box_name, provider_name, version, @client.token, options)
45
- end
40
+ if !options[:force]
41
+ cont = @env.ui.ask(I18n.t("cloud_command.continue"))
42
+ return 1 if cont.strip.downcase != "y"
43
+ end
46
44
 
47
- def delete_provider(org, box_name, provider_name, version, access_token, options)
48
- org = options[:username] if options[:username]
45
+ @client = client_login(@env)
49
46
 
50
- server_url = VagrantPlugins::CloudCommand::Util.api_server_url
51
- account = VagrantPlugins::CloudCommand::Util.account(org, access_token, server_url)
52
- box = VagrantCloud::Box.new(account, box_name, nil, nil, nil, access_token)
53
- cloud_version = VagrantCloud::Version.new(box, version, nil, nil, access_token)
54
- provider = VagrantCloud::Provider.new(cloud_version, provider_name, nil, nil, nil, nil, access_token)
47
+ delete_provider(org, box_name, version, provider_name, @client.token, options)
48
+ end
55
49
 
56
- begin
57
- success = provider.delete
58
- @env.ui.error(I18n.t("cloud_command.provider.delete_success", provider: provider_name, org: org, box_name: box_name, version: version))
59
- return 0
60
- rescue VagrantCloud::ClientError => e
61
- @env.ui.error(I18n.t("cloud_command.errors.provider.delete_fail", provider: provider_name, org: org, box_name: box_name, version: version))
62
- @env.ui.error(e)
63
- return 1
50
+ # Delete a provider for the box version
51
+ #
52
+ # @param [String] org Organization name
53
+ # @param [String] box Box name
54
+ # @param [String] version Box version
55
+ # @param [String] provider Provider name
56
+ # @param [String] access_token User Vagrant Cloud access token
57
+ # @param [Hash] options Currently unused
58
+ # @return [Integer]
59
+ def delete_provider(org, box, version, provider, access_token, options={})
60
+ account = VagrantCloud::Account.new(
61
+ custom_server: api_server_url,
62
+ access_token: access_token
63
+ )
64
+ with_provider(account: account, org: org, box: box, version: version, provider: provider) do |p|
65
+ p.delete
66
+ @env.ui.error(I18n.t("cloud_command.provider.delete_success",
67
+ provider: provider, org: org, box_name: box, version: version))
68
+ 0
64
69
  end
70
+ rescue VagrantCloud::Error => e
71
+ @env.ui.error(I18n.t("cloud_command.errors.provider.delete_fail",
72
+ provider: provider, org: org, box_name: box, version: version))
73
+ @env.ui.error(e)
74
+ 1
65
75
  end
66
76
  end
67
77
  end
@@ -5,20 +5,19 @@ module VagrantPlugins
5
5
  module ProviderCommand
6
6
  module Command
7
7
  class Update < Vagrant.plugin("2", :command)
8
+ include Util
9
+
8
10
  def execute
9
11
  options = {}
10
12
 
11
13
  opts = OptionParser.new do |o|
12
- o.banner = "Usage: vagrant cloud provider update [options] organization/box-name provider-name version url"
14
+ o.banner = "Usage: vagrant cloud provider update [options] organization/box-name provider-name version [url]"
13
15
  o.separator ""
14
16
  o.separator "Updates a provider entry on Vagrant Cloud"
15
17
  o.separator ""
16
18
  o.separator "Options:"
17
19
  o.separator ""
18
20
 
19
- o.on("-u", "--username USERNAME_OR_EMAIL", String, "Vagrant Cloud username or email address") do |u|
20
- options[:username] = u
21
- end
22
21
  o.on("-c", "--checksum CHECKSUM_VALUE", String, "Checksum of the box for this provider. --checksum-type option is required.") do |c|
23
22
  options[:checksum] = c
24
23
  end
@@ -30,48 +29,58 @@ module VagrantPlugins
30
29
  # Parse the options
31
30
  argv = parse_options(opts)
32
31
  return if !argv
33
- if argv.empty? || argv.length > 4
32
+ if argv.count < 3 || argv.count > 4
34
33
  raise Vagrant::Errors::CLIInvalidUsage,
35
34
  help: opts.help.chomp
36
35
  end
37
36
 
38
- @client = VagrantPlugins::CloudCommand::Util.client_login(@env, options[:username])
37
+ @client = client_login(@env)
39
38
 
40
- box = argv.first.split('/', 2)
41
- org = box[0]
42
- box_name = box[1]
39
+ org, box_name = argv.first.split('/', 2)
43
40
  provider_name = argv[1]
44
41
  version = argv[2]
45
42
  url = argv[3]
46
43
 
47
- update_provider(org, box_name, provider_name, version, url, @client.token, options)
44
+ update_provider(org, box_name, version, provider_name, url, @client.token, options)
48
45
  end
49
46
 
50
- def update_provider(org, box_name, provider_name, version, url, access_token, options)
47
+ # Update a provider for the box version
48
+ #
49
+ # @param [String] org Organization name
50
+ # @param [String] box Box name
51
+ # @param [String] version Box version
52
+ # @param [String] provider Provider name
53
+ # @param [String] access_token User Vagrant Cloud access token
54
+ # @param [Hash] options
55
+ # @option options [String] :checksum Checksum of the box asset
56
+ # @option options [String] :checksum_type Type of the checksum
57
+ # @return [Integer]
58
+ def update_provider(org, box, version, provider, url, access_token, options)
51
59
  if !url
52
60
  @env.ui.warn(I18n.t("cloud_command.upload.no_url"))
53
61
  end
62
+ account = VagrantCloud::Account.new(
63
+ custom_server: api_server_url,
64
+ access_token: access_token
65
+ )
54
66
 
55
- org = options[:username] if options[:username]
67
+ with_provider(account: account, org: org, box: box, version: version, provider: provider) do |p|
68
+ p.checksum = options[:checksum] if options.key?(:checksum)
69
+ p.checksum_type = options[:checksum_type] if options.key?(:checksum_type)
70
+ p.url = url if !url.nil?
71
+ p.save
56
72
 
57
- server_url = VagrantPlugins::CloudCommand::Util.api_server_url
58
- account = VagrantPlugins::CloudCommand::Util.account(org, access_token, server_url)
59
- box = VagrantCloud::Box.new(account, box_name, nil, nil, nil, access_token)
60
- cloud_version = VagrantCloud::Version.new(box, version, nil, nil, access_token)
61
- provider = VagrantCloud::Provider.new(cloud_version, provider_name, nil, url, org, box_name,
62
- access_token, nil, options[:checksum], options[:checksum_type])
73
+ @env.ui.success(I18n.t("cloud_command.provider.update_success",
74
+ provider: provider, org: org, box_name: box, version: version))
63
75
 
64
- begin
65
- success = provider.update
66
- @env.ui.success(I18n.t("cloud_command.provider.update_success", provider:provider_name, org: org, box_name: box_name, version: version))
67
- success = success.delete_if{|_, v|v.nil?}
68
- VagrantPlugins::CloudCommand::Util.format_box_results(success, @env)
69
- return 0
70
- rescue VagrantCloud::ClientError => e
71
- @env.ui.error(I18n.t("cloud_command.errors.provider.update_fail", provider:provider_name, org: org, box_name: box_name, version: version))
72
- @env.ui.error(e)
73
- return 1
76
+ format_box_results(p, @env)
77
+ 0
74
78
  end
79
+ rescue VagrantCloud::Error => e
80
+ @env.ui.error(I18n.t("cloud_command.errors.provider.update_fail",
81
+ provider: provider, org: org, box_name: box, version: version))
82
+ @env.ui.error(e.message)
83
+ 1
75
84
  end
76
85
  end
77
86
  end
@@ -6,8 +6,10 @@ module VagrantPlugins
6
6
  module ProviderCommand
7
7
  module Command
8
8
  class Upload < Vagrant.plugin("2", :command)
9
+ include Util
10
+
9
11
  def execute
10
- options = {}
12
+ options = {direct: true}
11
13
 
12
14
  opts = OptionParser.new do |o|
13
15
  o.banner = "Usage: vagrant cloud provider upload [options] organization/box-name provider-name version box-file"
@@ -16,57 +18,75 @@ module VagrantPlugins
16
18
  o.separator ""
17
19
  o.separator "Options:"
18
20
  o.separator ""
19
-
20
- o.on("-u", "--username USERNAME_OR_EMAIL", String, "Vagrant Cloud username or email address") do |u|
21
- options[:username] = u
21
+ o.on("-D", "--[no-]direct", "Upload asset directly to backend storage") do |d|
22
+ options[:direct] = d
22
23
  end
23
24
  end
24
25
 
25
26
  # Parse the options
26
27
  argv = parse_options(opts)
27
28
  return if !argv
28
- if argv.empty? || argv.length > 4
29
+ if argv.count != 4
29
30
  raise Vagrant::Errors::CLIInvalidUsage,
30
31
  help: opts.help.chomp
31
32
  end
32
33
 
33
- @client = VagrantPlugins::CloudCommand::Util.client_login(@env, options[:username])
34
+ @client = client_login(@env)
34
35
 
35
- box = argv.first.split('/', 2)
36
- org = box[0]
37
- box_name = box[1]
36
+ org, box_name = argv.first.split('/', 2)
38
37
  provider_name = argv[1]
39
38
  version = argv[2]
40
- file = argv[3] # path expand
39
+ file = File.expand_path(argv[3])
41
40
 
42
- upload_provider(org, box_name, provider_name, version, file, @client.token, options)
41
+ upload_provider(org, box_name, version, provider_name, file, @client.token, options)
43
42
  end
44
43
 
45
- def upload_provider(org, box_name, provider_name, version, file, access_token, options)
46
- org = options[:username] if options[:username]
47
-
48
- server_url = VagrantPlugins::CloudCommand::Util.api_server_url
49
- account = VagrantPlugins::CloudCommand::Util.account(org, access_token, server_url)
50
- box = VagrantCloud::Box.new(account, box_name, nil, nil, nil, access_token)
51
- cloud_version = VagrantCloud::Version.new(box, version, nil, nil, access_token)
52
- provider = VagrantCloud::Provider.new(cloud_version, provider_name, nil, nil, org, box_name, access_token)
53
-
54
- ul = Vagrant::Util::Uploader.new(provider.upload_url, file, ui: @env.ui)
55
- ui = Vagrant::UI::Prefixed.new(@env.ui, "cloud")
44
+ # Upload an asset for a box version provider
45
+ #
46
+ # @param [String] org Organization name
47
+ # @param [String] box Box name
48
+ # @param [String] version Box version
49
+ # @param [String] provider Provider name
50
+ # @param [String] file Path to asset
51
+ # @param [String] access_token User Vagrant Cloud access token
52
+ # @param [Hash] options
53
+ # @option options [Boolean] :direct Upload directly to backend storage
54
+ # @return [Integer]
55
+ def upload_provider(org, box, version, provider, file, access_token, options)
56
+ account = VagrantCloud::Account.new(
57
+ custom_server: api_server_url,
58
+ access_token: access_token
59
+ )
56
60
 
57
- begin
58
- ui.output(I18n.t("cloud_command.provider.upload", org: org, box_name: box_name, version: version, provider: provider_name))
59
- ui.info("Upload File: #{file}")
60
-
61
- ul.upload!
61
+ # Include size check on file and disable direct if over 5G
62
+ if options[:direct]
63
+ fsize = File.stat(file).size
64
+ if fsize > (5 * Vagrant::Util::Numeric::GIGABYTE)
65
+ box_size = Vagrant::Util::Numeric.bytes_to_string(fsize)
66
+ @env.ui.warn(I18n.t("cloud_command.provider.direct_disable", size: box_size))
67
+ options[:direct] = false
68
+ end
69
+ end
62
70
 
63
- ui.success("Successfully uploaded box '#{org}/#{box_name}' (v#{version}) for '#{provider_name}'")
64
- return 0
65
- rescue Vagrant::Errors::UploaderError, VagrantCloud::ClientError => e
66
- @env.ui.error(I18n.t("cloud_command.errors.provider.upload_fail", provider: provider_name, org: org, box_name: box_name, version: version))
67
- @env.ui.error(e)
68
- return 1
71
+ with_provider(account: account, org: org, box: box, version: version, provider: provider) do |p|
72
+ p.upload(direct: options[:direct]) do |upload_url|
73
+ m = options[:direct] ? :put : :put
74
+ uploader = Vagrant::Util::Uploader.new(upload_url, file, ui: @env.ui, method: m)
75
+ ui = Vagrant::UI::Prefixed.new(@env.ui, "cloud")
76
+ ui.output(I18n.t("cloud_command.provider.upload",
77
+ org: org, box_name: box, version: version, provider: provider))
78
+ ui.info("Upload File: #{file}")
79
+ uploader.upload!
80
+ ui.success(I18n.t("cloud_command.provider.upload_success",
81
+ org: org, box_name: box, version: version, provider: provider))
82
+ end
83
+ 0
69
84
  end
85
+ rescue Vagrant::Errors::UploaderError, VagrantCloud::Error => e
86
+ @env.ui.error(I18n.t("cloud_command.errors.provider.upload_fail",
87
+ provider: provider, org: org, box_name: box, version: version))
88
+ @env.ui.error(e.message)
89
+ 1
70
90
  end
71
91
  end
72
92
  end