vagrant-unbundled 2.2.6.2 → 2.2.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (287) hide show
  1. checksums.yaml +4 -4
  2. data/.hashibot.hcl +14 -0
  3. data/CHANGELOG.md +213 -2
  4. data/Gemfile +1 -1
  5. data/README.md +9 -51
  6. data/RELEASE.md +1 -1
  7. data/bin/vagrant +23 -0
  8. data/contrib/README.md +1 -0
  9. data/contrib/bash/completion.sh +13 -1
  10. data/contrib/sudoers/linux-suse +2 -2
  11. data/contrib/zsh/_vagrant +738 -0
  12. data/contrib/zsh/generate_zsh_completion.rb +165 -0
  13. data/lib/vagrant.rb +25 -4
  14. data/lib/vagrant/action.rb +8 -0
  15. data/lib/vagrant/action/builder.rb +184 -38
  16. data/lib/vagrant/action/builtin/box_add.rb +20 -8
  17. data/lib/vagrant/action/builtin/box_check_outdated.rb +12 -15
  18. data/lib/vagrant/action/builtin/cleanup_disks.rb +56 -0
  19. data/lib/vagrant/action/builtin/cloud_init_setup.rb +122 -0
  20. data/lib/vagrant/action/builtin/cloud_init_wait.rb +30 -0
  21. data/lib/vagrant/action/builtin/delayed.rb +26 -0
  22. data/lib/vagrant/action/builtin/disk.rb +52 -0
  23. data/lib/vagrant/action/builtin/handle_box.rb +3 -1
  24. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +28 -9
  25. data/lib/vagrant/action/builtin/has_provisioner.rb +36 -0
  26. data/lib/vagrant/action/builtin/mixin_provisioners.rb +20 -1
  27. data/lib/vagrant/action/builtin/mixin_synced_folders.rb +20 -21
  28. data/lib/vagrant/action/builtin/set_hostname.rb +5 -1
  29. data/lib/vagrant/action/builtin/ssh_run.rb +21 -3
  30. data/lib/vagrant/action/builtin/synced_folders.rb +16 -0
  31. data/lib/vagrant/action/builtin/trigger.rb +37 -0
  32. data/lib/vagrant/action/hook.rb +76 -23
  33. data/lib/vagrant/action/runner.rb +12 -27
  34. data/lib/vagrant/action/warden.rb +28 -22
  35. data/lib/vagrant/box.rb +11 -4
  36. data/lib/vagrant/box_collection.rb +1 -1
  37. data/lib/vagrant/box_metadata.rb +17 -3
  38. data/lib/vagrant/bundler.rb +298 -59
  39. data/lib/vagrant/cli.rb +4 -2
  40. data/lib/vagrant/errors.rb +61 -1
  41. data/lib/vagrant/machine.rb +64 -11
  42. data/lib/vagrant/machine_index.rb +28 -1
  43. data/lib/vagrant/plugin/manager.rb +25 -14
  44. data/lib/vagrant/plugin/v2/command.rb +7 -2
  45. data/lib/vagrant/plugin/v2/components.rb +6 -0
  46. data/lib/vagrant/plugin/v2/manager.rb +67 -0
  47. data/lib/vagrant/plugin/v2/plugin.rb +13 -0
  48. data/lib/vagrant/plugin/v2/synced_folder.rb +50 -0
  49. data/lib/vagrant/plugin/v2/trigger.rb +64 -25
  50. data/lib/vagrant/shared_helpers.rb +36 -0
  51. data/lib/vagrant/ui.rb +51 -5
  52. data/lib/vagrant/util.rb +1 -0
  53. data/lib/vagrant/util/ansi_escape_code_remover.rb +1 -1
  54. data/lib/vagrant/util/caps.rb +48 -0
  55. data/lib/vagrant/util/credential_scrubber.rb +1 -1
  56. data/lib/vagrant/util/curl_helper.rb +8 -5
  57. data/lib/vagrant/util/directory.rb +19 -0
  58. data/lib/vagrant/util/downloader.rb +10 -5
  59. data/lib/vagrant/util/file_checksum.rb +6 -2
  60. data/lib/vagrant/util/guest_hosts.rb +68 -0
  61. data/lib/vagrant/util/guest_inspection.rb +9 -1
  62. data/lib/vagrant/util/install_cli_autocomplete.rb +118 -0
  63. data/lib/vagrant/util/io.rb +7 -27
  64. data/lib/vagrant/util/ipv4_interfaces.rb +15 -0
  65. data/lib/vagrant/util/is_port_open.rb +8 -20
  66. data/lib/vagrant/util/map_command_options.rb +33 -0
  67. data/lib/vagrant/util/mime.rb +92 -0
  68. data/lib/vagrant/util/network_ip.rb +11 -1
  69. data/lib/vagrant/util/numeric.rb +69 -0
  70. data/lib/vagrant/util/platform.rb +10 -2
  71. data/lib/vagrant/util/powershell.rb +1 -1
  72. data/lib/vagrant/util/subprocess.rb +9 -1
  73. data/lib/vagrant/util/template_renderer.rb +2 -2
  74. data/lib/vagrant/util/uploader.rb +7 -4
  75. data/lib/vagrant/vagrantfile.rb +1 -1
  76. data/plugins/commands/autocomplete/command/install.rb +49 -0
  77. data/plugins/commands/autocomplete/command/root.rb +64 -0
  78. data/plugins/commands/autocomplete/plugin.rb +18 -0
  79. data/plugins/commands/box/command/outdated.rb +14 -2
  80. data/plugins/commands/cap/command.rb +5 -1
  81. data/plugins/commands/cloud/auth/login.rb +20 -23
  82. data/plugins/commands/cloud/auth/logout.rb +2 -10
  83. data/plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb +57 -0
  84. data/plugins/commands/cloud/auth/whoami.rb +18 -20
  85. data/plugins/commands/cloud/box/create.rb +33 -29
  86. data/plugins/commands/cloud/box/delete.rb +30 -24
  87. data/plugins/commands/cloud/box/show.rb +41 -31
  88. data/plugins/commands/cloud/box/update.rb +34 -26
  89. data/plugins/commands/cloud/client/client.rb +50 -81
  90. data/plugins/commands/cloud/list.rb +3 -4
  91. data/plugins/commands/cloud/locales/en.yml +10 -10
  92. data/plugins/commands/cloud/plugin.rb +10 -0
  93. data/plugins/commands/cloud/provider/create.rb +38 -28
  94. data/plugins/commands/cloud/provider/delete.rb +39 -29
  95. data/plugins/commands/cloud/provider/update.rb +37 -28
  96. data/plugins/commands/cloud/provider/upload.rb +44 -34
  97. data/plugins/commands/cloud/publish.rb +185 -108
  98. data/plugins/commands/cloud/search.rb +34 -21
  99. data/plugins/commands/cloud/util.rb +266 -162
  100. data/plugins/commands/cloud/version/create.rb +33 -28
  101. data/plugins/commands/cloud/version/delete.rb +35 -28
  102. data/plugins/commands/cloud/version/release.rb +35 -29
  103. data/plugins/commands/cloud/version/revoke.rb +36 -29
  104. data/plugins/commands/cloud/version/update.rb +29 -25
  105. data/plugins/commands/destroy/command.rb +6 -2
  106. data/plugins/commands/login/plugin.rb +0 -13
  107. data/plugins/commands/snapshot/command/save.rb +13 -8
  108. data/plugins/commands/ssh_config/command.rb +1 -1
  109. data/plugins/communicators/ssh/communicator.rb +25 -24
  110. data/plugins/communicators/winrm/config.rb +1 -1
  111. data/plugins/communicators/winrm/helper.rb +1 -1
  112. data/plugins/communicators/winrm/shell.rb +1 -1
  113. data/plugins/communicators/winssh/communicator.rb +126 -38
  114. data/plugins/communicators/winssh/config.rb +3 -7
  115. data/plugins/guests/alpine/cap/change_host_name.rb +10 -11
  116. data/plugins/guests/alpine/cap/rsync.rb +1 -1
  117. data/plugins/guests/alpine/plugin.rb +16 -0
  118. data/plugins/guests/alt/cap/change_host_name.rb +40 -53
  119. data/plugins/guests/arch/cap/change_host_name.rb +5 -14
  120. data/plugins/guests/arch/cap/configure_networks.rb +27 -10
  121. data/plugins/guests/arch/cap/smb.rb +1 -1
  122. data/plugins/guests/atomic/cap/change_host_name.rb +5 -14
  123. data/plugins/guests/centos/cap/flavor.rb +24 -0
  124. data/plugins/guests/centos/guest.rb +9 -0
  125. data/plugins/guests/centos/plugin.rb +20 -0
  126. data/plugins/guests/darwin/cap/change_host_name.rb +10 -6
  127. data/plugins/guests/darwin/cap/darwin_version.rb +40 -0
  128. data/plugins/guests/darwin/cap/mount_smb_shared_folder.rb +1 -1
  129. data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +109 -13
  130. data/plugins/guests/darwin/plugin.rb +15 -0
  131. data/plugins/guests/debian/cap/change_host_name.rb +12 -11
  132. data/plugins/guests/debian/cap/configure_networks.rb +14 -6
  133. data/plugins/guests/esxi/cap/public_key.rb +3 -1
  134. data/plugins/guests/freebsd/cap/change_host_name.rb +10 -6
  135. data/plugins/guests/gentoo/cap/change_host_name.rb +14 -22
  136. data/plugins/guests/haiku/cap/rsync.rb +19 -0
  137. data/plugins/guests/haiku/plugin.rb +15 -0
  138. data/plugins/guests/linux/cap/change_host_name.rb +46 -0
  139. data/plugins/guests/linux/cap/halt.rb +9 -1
  140. data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +25 -34
  141. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +10 -11
  142. data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +75 -0
  143. data/plugins/guests/linux/cap/reboot.rb +53 -0
  144. data/plugins/guests/linux/plugin.rb +20 -0
  145. data/plugins/guests/omnios/cap/change_host_name.rb +10 -16
  146. data/plugins/guests/openbsd/cap/change_host_name.rb +10 -6
  147. data/plugins/guests/photon/cap/change_host_name.rb +9 -15
  148. data/plugins/guests/pld/cap/change_host_name.rb +11 -17
  149. data/plugins/guests/redhat/cap/change_host_name.rb +14 -5
  150. data/plugins/guests/redhat/cap/flavor.rb +3 -1
  151. data/plugins/guests/redhat/cap/nfs_client.rb +2 -2
  152. data/plugins/guests/redhat/cap/smb.rb +20 -0
  153. data/plugins/guests/redhat/plugin.rb +5 -0
  154. data/plugins/guests/slackware/cap/change_host_name.rb +11 -17
  155. data/plugins/guests/solaris11/plugin.rb +5 -0
  156. data/plugins/guests/suse/cap/change_host_name.rb +31 -9
  157. data/plugins/guests/windows/cap/public_key.rb +3 -3
  158. data/plugins/guests/windows/cap/reboot.rb +10 -5
  159. data/plugins/hosts/darwin/cap/fs_iso.rb +49 -0
  160. data/plugins/hosts/darwin/cap/nfs.rb +11 -0
  161. data/plugins/hosts/darwin/plugin.rb +15 -0
  162. data/plugins/hosts/linux/cap/fs_iso.rb +49 -0
  163. data/plugins/hosts/linux/cap/nfs.rb +21 -2
  164. data/plugins/hosts/linux/cap/rdp.rb +1 -1
  165. data/plugins/hosts/linux/plugin.rb +10 -0
  166. data/plugins/hosts/windows/cap/fs_iso.rb +48 -0
  167. data/plugins/hosts/windows/cap/rdp.rb +1 -1
  168. data/plugins/hosts/windows/plugin.rb +15 -0
  169. data/plugins/kernel_v2/config/cloud_init.rb +133 -0
  170. data/plugins/kernel_v2/config/disk.rb +221 -0
  171. data/plugins/kernel_v2/config/ssh_connect.rb +24 -0
  172. data/plugins/kernel_v2/config/vm.rb +230 -15
  173. data/plugins/kernel_v2/config/vm_provisioner.rb +17 -3
  174. data/plugins/kernel_v2/config/vm_trigger.rb +6 -5
  175. data/plugins/providers/docker/action.rb +8 -17
  176. data/plugins/providers/docker/action/forwarded_ports.rb +2 -0
  177. data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +61 -0
  178. data/plugins/providers/docker/cap/has_communicator.rb +11 -0
  179. data/plugins/providers/docker/communicator.rb +1 -1
  180. data/plugins/providers/docker/driver.rb +73 -10
  181. data/plugins/providers/docker/errors.rb +4 -0
  182. data/plugins/providers/docker/executor/local.rb +7 -1
  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 +14 -1
  205. data/plugins/providers/virtualbox/action/clean_machine_folder.rb +10 -1
  206. data/plugins/providers/virtualbox/action/export.rb +4 -2
  207. data/plugins/providers/virtualbox/action/forward_ports.rb +2 -2
  208. data/plugins/providers/virtualbox/action/import.rb +8 -4
  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 +35 -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 +17 -2
  218. data/plugins/providers/virtualbox/driver/version_5_0.rb +217 -2
  219. data/plugins/providers/virtualbox/driver/version_6_1.rb +39 -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 +38 -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/arch/ansible_install.rb +20 -3
  227. data/plugins/provisioners/ansible/cap/guest/debian/ansible_install.rb +4 -5
  228. data/plugins/provisioners/ansible/cap/guest/fedora/ansible_install.rb +2 -2
  229. data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +2 -2
  230. data/plugins/provisioners/ansible/cap/guest/pip/pip.rb +8 -4
  231. data/plugins/provisioners/ansible/cap/guest/redhat/ansible_install.rb +2 -2
  232. data/plugins/provisioners/ansible/cap/guest/suse/ansible_install.rb +2 -1
  233. data/plugins/provisioners/ansible/cap/guest/ubuntu/ansible_install.rb +3 -3
  234. data/plugins/provisioners/ansible/plugin.rb +5 -0
  235. data/plugins/provisioners/ansible/provisioner/base.rb +1 -1
  236. data/plugins/provisioners/container/client.rb +203 -0
  237. data/plugins/provisioners/container/config.rb +83 -0
  238. data/plugins/provisioners/container/installer.rb +13 -0
  239. data/plugins/provisioners/container/plugin.rb +23 -0
  240. data/plugins/provisioners/container/provisioner.rb +28 -0
  241. data/plugins/provisioners/docker/cap/{redhat → centos}/docker_install.rb +10 -7
  242. data/plugins/provisioners/docker/cap/centos/docker_start_service.rb +24 -0
  243. data/plugins/provisioners/docker/client.rb +4 -175
  244. data/plugins/provisioners/docker/config.rb +2 -72
  245. data/plugins/provisioners/docker/installer.rb +3 -5
  246. data/plugins/provisioners/docker/plugin.rb +6 -6
  247. data/plugins/provisioners/docker/provisioner.rb +4 -10
  248. data/plugins/provisioners/podman/cap/centos/podman_install.rb +35 -0
  249. data/plugins/provisioners/podman/cap/linux/podman_installed.rb +13 -0
  250. data/plugins/provisioners/podman/cap/redhat/podman_install.rb +26 -0
  251. data/plugins/provisioners/podman/client.rb +12 -0
  252. data/plugins/provisioners/podman/config.rb +28 -0
  253. data/plugins/provisioners/podman/installer.rb +33 -0
  254. data/plugins/provisioners/podman/plugin.rb +38 -0
  255. data/plugins/provisioners/podman/provisioner.rb +52 -0
  256. data/plugins/provisioners/salt/provisioner.rb +4 -0
  257. data/plugins/provisioners/shell/config.rb +1 -6
  258. data/plugins/provisioners/shell/provisioner.rb +61 -26
  259. data/plugins/synced_folders/nfs/synced_folder.rb +3 -1
  260. data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +11 -0
  261. data/plugins/synced_folders/smb/cap/mount_options.rb +56 -0
  262. data/plugins/synced_folders/smb/plugin.rb +20 -0
  263. data/plugins/synced_folders/smb/synced_folder.rb +2 -2
  264. data/plugins/synced_folders/unix_mount_helpers.rb +14 -0
  265. data/scripts/website_push_www.sh +1 -1
  266. data/templates/commands/init/Vagrantfile.erb +1 -1
  267. data/templates/guests/arch/{network_dhcp.erb → default_network/network_dhcp.erb} +0 -0
  268. data/templates/guests/arch/{network_static.erb → default_network/network_static.erb} +0 -0
  269. data/templates/guests/arch/{network_static6.erb → default_network/network_static6.erb} +0 -0
  270. data/templates/guests/arch/systemd_networkd/network_dhcp.erb +6 -0
  271. data/templates/guests/arch/systemd_networkd/network_static.erb +9 -0
  272. data/templates/guests/arch/systemd_networkd/network_static6.erb +9 -0
  273. data/templates/guests/linux/etc_fstab.erb +6 -0
  274. data/templates/locales/en.yml +235 -6
  275. data/templates/locales/providers_docker.yml +6 -0
  276. data/templates/nfs/exports_darwin.erb +7 -0
  277. data/vagrant.gemspec +14 -15
  278. data/version.txt +1 -1
  279. metadata +3577 -3855
  280. data/lib/vagrant/action/builtin/after_trigger.rb +0 -31
  281. data/lib/vagrant/action/builtin/before_trigger.rb +0 -28
  282. data/plugins/commands/login/client.rb +0 -253
  283. data/plugins/commands/login/command.rb +0 -137
  284. data/plugins/commands/login/errors.rb +0 -24
  285. data/plugins/commands/login/locales/en.yml +0 -49
  286. data/plugins/provisioners/docker/cap/redhat/docker_start_service.rb +0 -16
  287. data/scripts/website_push_docs.sh +0 -40
@@ -5,6 +5,8 @@ module VagrantPlugins
5
5
  module VersionCommand
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
 
@@ -19,48 +21,51 @@ module VagrantPlugins
19
21
  o.on("-d", "--description DESCRIPTION", String, "A description for this version") do |d|
20
22
  options[:description] = d
21
23
  end
22
- o.on("-u", "--username USERNAME_OR_EMAIL", String, "Vagrant Cloud username or email address") do |u|
23
- options[:username] = u
24
- end
25
24
  end
26
25
 
27
26
  # Parse the options
28
27
  argv = parse_options(opts)
29
28
  return if !argv
30
- if argv.empty? || argv.length > 2
29
+ if argv.empty? || argv.length != 2
31
30
  raise Vagrant::Errors::CLIInvalidUsage,
32
31
  help: opts.help.chomp
33
32
  end
34
33
 
35
- @client = VagrantPlugins::CloudCommand::Util.client_login(@env, options[:username])
36
- box = argv.first.split('/', 2)
37
- org = box[0]
38
- box_name = box[1]
34
+ @client = client_login(@env)
35
+ org, box_name = argv.first.split('/', 2)
39
36
  version = argv[1]
40
37
 
41
- create_version(org, box_name, version, @client.token, options)
38
+ create_version(org, box_name, version, @client.token, options.slice(:description))
42
39
  end
43
40
 
44
- def create_version(org, box_name, box_version, access_token, options)
45
- org = options[:username] if options[:username]
46
-
47
- server_url = VagrantPlugins::CloudCommand::Util.api_server_url
48
- account = VagrantPlugins::CloudCommand::Util.account(org, access_token, server_url)
49
- box = VagrantCloud::Box.new(account, box_name, nil, nil, nil, access_token)
50
- version = VagrantCloud::Version.new(box, box_version, nil, options[:description], access_token)
51
-
52
- begin
53
- success = version.create_version
54
- @env.ui.success(I18n.t("cloud_command.version.create_success", version: box_version, org: org, box_name: box_name))
55
- success = success.delete_if{|_, v|v.nil?}
56
- VagrantPlugins::CloudCommand::Util.format_box_results(success, @env)
57
- return 0
58
- rescue VagrantCloud::ClientError => e
59
- @env.ui.error(I18n.t("cloud_command.errors.version.create_fail", version: box_version, org: org, box_name: box_name))
60
- @env.ui.error(e)
61
- return 1
41
+ # Create a new version of the box
42
+ #
43
+ # @param [String] org Organization box is within
44
+ # @param [String] box_name Name of box
45
+ # @param [String] box_version Version of box to create
46
+ # @param [String] access_token User Vagrant Cloud access token
47
+ # @param [Hash] options
48
+ # @option options [String] :description Description of box version
49
+ # @return [Integer]
50
+ def create_version(org, box_name, box_version, access_token, options={})
51
+ account = VagrantCloud::Account.new(
52
+ custom_server: api_server_url,
53
+ access_token: access_token
54
+ )
55
+ with_box(account: account, org: org, box: box_name) do |box|
56
+ version = box.add_version(box_version)
57
+ version.description = options[:description] if options.key?(:description)
58
+ version.save
59
+ @env.ui.success(I18n.t("cloud_command.version.create_success",
60
+ version: box_version, org: org, box_name: box_name))
61
+ format_box_results(version, @env)
62
+ 0
62
63
  end
63
- return 1
64
+ rescue VagrantCloud::Error => e
65
+ @env.ui.error(I18n.t("cloud_command.errors.version.create_fail",
66
+ version: box_version, org: org, box_name: box_name))
67
+ @env.ui.error(e.message)
68
+ 1
64
69
  end
65
70
  end
66
71
  end
@@ -5,6 +5,8 @@ module VagrantPlugins
5
5
  module VersionCommand
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,51 +17,56 @@ module VagrantPlugins
15
17
  o.separator ""
16
18
  o.separator "Options:"
17
19
  o.separator ""
18
- o.on("-u", "--username USERNAME_OR_EMAIL", String, "Vagrant Cloud username or email address") do |u|
19
- options[:username] = u
20
+ o.on("-f", "--[no-]force", "Force deletion without confirmation") do |f|
21
+ options[:force] = f
20
22
  end
21
23
  end
22
24
 
23
25
  # Parse the options
24
26
  argv = parse_options(opts)
25
27
  return if !argv
26
- if argv.empty? || argv.length > 2
28
+ if argv.size != 2
27
29
  raise Vagrant::Errors::CLIInvalidUsage,
28
30
  help: opts.help.chomp
29
31
  end
30
32
 
31
- box = argv.first.split('/', 2)
32
- org = box[0]
33
- box_name = box[1]
33
+ org, box_name = argv.first.split('/', 2)
34
34
  version = argv[1]
35
35
 
36
- @env.ui.warn(I18n.t("cloud_command.version.delete_warn", version: version, box: argv.first))
37
- cont = @env.ui.ask(I18n.t("cloud_command.continue"))
38
- return 1 if cont.strip.downcase != "y"
36
+ if !options[:force]
37
+ @env.ui.warn(I18n.t("cloud_command.version.delete_warn", version: version, box: argv.first))
38
+ cont = @env.ui.ask(I18n.t("cloud_command.continue"))
39
+ return 1 if cont.strip.downcase != "y"
40
+ end
39
41
 
40
- @client = VagrantPlugins::CloudCommand::Util.client_login(@env, options[:username])
42
+ @client = client_login(@env)
41
43
 
42
- delete_version(org, box_name, version, options, @client.token)
44
+ delete_version(org, box_name, version, @client.token, options.slice)
43
45
  end
44
46
 
45
- def delete_version(org, box_name, box_version, options, access_token)
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
- version = VagrantCloud::Version.new(box, box_version, nil, nil, access_token)
52
-
53
- begin
54
- success = version.delete
55
- @env.ui.success(I18n.t("cloud_command.version.delete_success", version: box_version, org: org, box_name: box_name))
56
- return 0
57
- rescue VagrantCloud::ClientError => e
58
- @env.ui.error(I18n.t("cloud_command.errors.version.delete_fail", version: box_version, org: org, box_name: box_name))
59
- @env.ui.error(e)
60
- return 1
47
+ # Delete the requested box version
48
+ #
49
+ # @param [String] org Box organization name
50
+ # @param [String] box_name Name of the box
51
+ # @param [String] box_version Version of the box
52
+ # @param [String] access_token User Vagrant Cloud access token
53
+ # @param [Hash] options Current unsued
54
+ def delete_version(org, box_name, box_version, access_token, options={})
55
+ account = VagrantCloud::Account.new(
56
+ custom_server: api_server_url,
57
+ access_token: access_token
58
+ )
59
+ with_version(account: account, org: org, box: box_name, version: box_version) do |version|
60
+ version.delete
61
+ @env.ui.success(I18n.t("cloud_command.version.delete_success",
62
+ version: box_version, org: org, box_name: box_name))
63
+ 0
61
64
  end
62
- return 1
65
+ rescue VagrantCloud::Error => e
66
+ @env.ui.error(I18n.t("cloud_command.errors.version.delete_fail",
67
+ version: box_version, org: org, box_name: box_name))
68
+ @env.ui.error(e.message)
69
+ 1
63
70
  end
64
71
  end
65
72
  end
@@ -5,6 +5,8 @@ module VagrantPlugins
5
5
  module VersionCommand
6
6
  module Command
7
7
  class Release < Vagrant.plugin("2", :command)
8
+ include Util
9
+
8
10
  def execute
9
11
  options = {}
10
12
 
@@ -15,52 +17,56 @@ module VagrantPlugins
15
17
  o.separator ""
16
18
  o.separator "Options:"
17
19
  o.separator ""
18
- o.on("-u", "--username USERNAME_OR_EMAIL", String, "Vagrant Cloud username or email address") do |u|
19
- options[:username] = u
20
+ o.on("-f", "--[no-]force", "Release without confirmation") do |f|
21
+ options[:force] = f
20
22
  end
21
23
  end
22
24
 
23
25
  # Parse the options
24
26
  argv = parse_options(opts)
25
27
  return if !argv
26
- if argv.empty? || argv.length > 2
28
+ if argv.size != 2
27
29
  raise Vagrant::Errors::CLIInvalidUsage,
28
30
  help: opts.help.chomp
29
31
  end
30
32
 
31
- @env.ui.warn(I18n.t("cloud_command.version.release_warn", version: argv[1], box: argv.first))
32
- cont = @env.ui.ask(I18n.t("cloud_command.continue"))
33
- return 1 if cont.strip.downcase != "y"
33
+ if !options[:force]
34
+ @env.ui.warn(I18n.t("cloud_command.version.release_warn", version: argv[1], box: argv.first))
35
+ cont = @env.ui.ask(I18n.t("cloud_command.continue"))
36
+ return 1 if cont.strip.downcase != "y"
37
+ end
34
38
 
35
- @client = VagrantPlugins::CloudCommand::Util.client_login(@env, options[:username])
36
- box = argv.first.split('/', 2)
37
- org = box[0]
38
- box_name = box[1]
39
+ @client = client_login(@env)
40
+ org, box_name = argv.first.split('/', 2)
39
41
  version = argv[1]
40
42
 
41
43
  release_version(org, box_name, version, @client.token, options)
42
44
  end
43
45
 
44
- def release_version(org, box_name, version, access_token, options)
45
- org = options[:username] if options[:username]
46
-
47
- server_url = VagrantPlugins::CloudCommand::Util.api_server_url
48
- account = VagrantPlugins::CloudCommand::Util.account(org, access_token, server_url)
49
- box = VagrantCloud::Box.new(account, box_name, nil, nil, nil, access_token)
50
- version = VagrantCloud::Version.new(box, version, nil, nil, access_token)
51
-
52
- begin
53
- success = version.release
54
- @env.ui.success(I18n.t("cloud_command.version.release_success", version: version, org: org, box_name: box_name))
55
- success = success.delete_if{|_, v|v.nil?}
56
- VagrantPlugins::CloudCommand::Util.format_box_results(success, @env)
57
- return 0
58
- rescue VagrantCloud::ClientError => e
59
- @env.ui.error(I18n.t("cloud_command.errors.version.release_fail", version: version, org: org, box_name: box_name))
60
- @env.ui.error(e)
61
- return 1
46
+ # Release the box version
47
+ #
48
+ # @param [String] org Organization name
49
+ # @param [String] box_name Box name
50
+ # @param [String] version Version of the box
51
+ # @param [String] access_token User Vagrant Cloud access token
52
+ # @param [Hash] options Currently unused
53
+ # @return [Integer]
54
+ def release_version(org, box_name, version, access_token, options={})
55
+ account = VagrantCloud::Account.new(
56
+ custom_server: api_server_url,
57
+ access_token: access_token
58
+ )
59
+ with_version(account: account, org: org, box: box_name, version: version) do |v|
60
+ v.release
61
+ @env.ui.success(I18n.t("cloud_command.version.release_success",
62
+ version: version, org: org, box_name: box_name))
63
+ 0
62
64
  end
63
- return 1
65
+ rescue VagrantCloud::Error => e
66
+ @env.ui.error(I18n.t("cloud_command.errors.version.release_fail",
67
+ version: version, org: org, box_name: box_name))
68
+ @env.ui.error(e.message)
69
+ 1
64
70
  end
65
71
  end
66
72
  end
@@ -5,6 +5,8 @@ module VagrantPlugins
5
5
  module VersionCommand
6
6
  module Command
7
7
  class Revoke < Vagrant.plugin("2", :command)
8
+ include Util
9
+
8
10
  def execute
9
11
  options = {}
10
12
 
@@ -15,52 +17,57 @@ module VagrantPlugins
15
17
  o.separator ""
16
18
  o.separator "Options:"
17
19
  o.separator ""
18
- o.on("-u", "--username USERNAME_OR_EMAIL", String, "Vagrant Cloud username or email address") do |u|
19
- options[:username] = u
20
+ o.on("-f", "--[no-]force", "Force revocation without confirmation") do |f|
21
+ options[:force] = f
20
22
  end
21
23
  end
22
24
 
23
25
  # Parse the options
24
26
  argv = parse_options(opts)
25
27
  return if !argv
26
- if argv.empty? || argv.length > 2
28
+ if argv.size != 2
27
29
  raise Vagrant::Errors::CLIInvalidUsage,
28
30
  help: opts.help.chomp
29
31
  end
30
32
 
31
- @env.ui.warn(I18n.t("cloud_command.version.revoke_warn", version: argv[1], box: argv.first))
32
- cont = @env.ui.ask(I18n.t("cloud_command.continue"))
33
- return 1 if cont.strip.downcase != "y"
33
+ if !options[:force]
34
+ @env.ui.warn(I18n.t("cloud_command.version.revoke_warn", version: argv[1], box: argv.first))
35
+ cont = @env.ui.ask(I18n.t("cloud_command.continue"))
36
+ return 1 if cont.strip.downcase != "y"
37
+ end
34
38
 
35
- @client = VagrantPlugins::CloudCommand::Util.client_login(@env, options[:username])
36
- box = argv.first.split('/', 2)
37
- org = box[0]
38
- box_name = box[1]
39
+ @client = client_login(@env)
40
+ org, box_name = argv.first.split('/', 2)
39
41
  version = argv[1]
40
42
 
41
43
  revoke_version(org, box_name, version, @client.token, options)
42
44
  end
43
45
 
44
- def revoke_version(org, box_name, box_version, access_token, options)
45
- org = options[:username] if options[:username]
46
-
47
- server_url = VagrantPlugins::CloudCommand::Util.api_server_url
48
- account = VagrantPlugins::CloudCommand::Util.account(org, access_token, server_url)
49
- box = VagrantCloud::Box.new(account, box_name, nil, nil, nil, access_token)
50
- version = VagrantCloud::Version.new(box, box_version, nil, nil, access_token)
51
-
52
- begin
53
- success = version.revoke
54
- @env.ui.success(I18n.t("cloud_command.version.revoke_success", version: box_version, org: org, box_name: box_name))
55
- success = success.delete_if{|_, v|v.nil?}
56
- VagrantPlugins::CloudCommand::Util.format_box_results(success, @env)
57
- return 0
58
- rescue VagrantCloud::ClientError => e
59
- @env.ui.error(I18n.t("cloud_command.errors.version.revoke_fail", version: box_version, org: org, box_name: box_name))
60
- @env.ui.error(e)
61
- return 1
46
+ # Revoke release of box version
47
+ #
48
+ # @param [String] org Organization name
49
+ # @param [String] box_name Box name
50
+ # @param [String] version Version of the box
51
+ # @param [String] access_token User Vagrant Cloud access token
52
+ # @param [Hash] options Currently unused
53
+ # @return [Integer]
54
+ def revoke_version(org, box_name, box_version, access_token, options={})
55
+ account = VagrantCloud::Account.new(
56
+ custom_server: api_server_url,
57
+ access_token: access_token
58
+ )
59
+ with_version(account: account, org: org, box: box_name, version: box_version) do |version|
60
+ version.revoke
61
+ @env.ui.success(I18n.t("cloud_command.version.revoke_success",
62
+ version: box_version, org: org, box_name: box_name))
63
+ format_box_results(version, @env)
64
+ 0
62
65
  end
63
- return 1
66
+ rescue VagrantCloud::Error => e
67
+ @env.ui.error(I18n.t("cloud_command.errors.version.revoke_fail",
68
+ version: box_version, org: org, box_name: box_name))
69
+ @env.ui.error(e.message)
70
+ 1
64
71
  end
65
72
  end
66
73
  end
@@ -5,6 +5,8 @@ module VagrantPlugins
5
5
  module VersionCommand
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
 
@@ -19,48 +21,50 @@ module VagrantPlugins
19
21
  o.on("-d", "--description DESCRIPTION", "A description for this version") do |d|
20
22
  options[:description] = d
21
23
  end
22
- o.on("-u", "--username USERNAME_OR_EMAIL", String, "Vagrant Cloud username or email address") do |u|
23
- options[:username] = u
24
- end
25
24
  end
26
25
 
27
26
  # Parse the options
28
27
  argv = parse_options(opts)
29
28
  return if !argv
30
- if argv.empty? || argv.length > 2
29
+ if argv.size != 2
31
30
  raise Vagrant::Errors::CLIInvalidUsage,
32
31
  help: opts.help.chomp
33
32
  end
34
33
 
35
- @client = VagrantPlugins::CloudCommand::Util.client_login(@env, options[:username])
36
- box = argv.first.split('/', 2)
37
- org = box[0]
38
- box_name = box[1]
34
+ @client = client_login(@env)
35
+ org, box_name = argv.first.split('/', 2)
39
36
  version = argv[1]
40
37
 
41
38
  update_version(org, box_name, version, @client.token, options)
42
39
  end
43
40
 
41
+ # Update the version of the box
42
+ # @param [String] org Organization name
43
+ # @param [String] box_name Box name
44
+ # @param [String] version Version of the box
45
+ # @param [String] access_token User Vagrant Cloud access token
46
+ # @param [Hash] options
47
+ # @options options [String] :description Description of box version
48
+ # @return [Integer]
44
49
  def update_version(org, box_name, box_version, access_token, options)
45
- org = options[:username] if options[:username]
46
-
47
- server_url = VagrantPlugins::CloudCommand::Util.api_server_url
48
- account = VagrantPlugins::CloudCommand::Util.account(org, access_token, server_url)
49
- box = VagrantCloud::Box.new(account, box_name, nil, nil, nil, access_token)
50
- version = VagrantCloud::Version.new(box, box_version, nil, options[:description], access_token)
50
+ account = VagrantCloud::Account.new(
51
+ custom_server: api_server_url,
52
+ access_token: access_token
53
+ )
54
+ with_version(account: account, org: org, box: box_name, version: box_version) do |version|
55
+ version.description = options[:description] if options.key?(:description)
56
+ version.save
51
57
 
52
- begin
53
- success = version.update
54
- @env.ui.success(I18n.t("cloud_command.version.update_success", version: box_version, org: org, box_name: box_name))
55
- success = success.delete_if{|_, v|v.nil?}
56
- VagrantPlugins::CloudCommand::Util.format_box_results(success, @env)
57
- return 0
58
- rescue VagrantCloud::ClientError => e
59
- @env.ui.error(I18n.t("cloud_command.errors.version.update_fail", version: box_version, org: org, box_name: box_name))
60
- @env.ui.error(e)
61
- return 1
58
+ @env.ui.success(I18n.t("cloud_command.version.update_success",
59
+ version: box_version, org: org, box_name: box_name))
60
+ format_box_results(version, @env)
61
+ 0
62
62
  end
63
- return 1
63
+ rescue VagrantCloud::Error => e
64
+ @env.ui.error(I18n.t("cloud_command.errors.version.update_fail",
65
+ version: box_version, org: org, box_name: box_name))
66
+ @env.ui.error(e.message)
67
+ 1
64
68
  end
65
69
  end
66
70
  end