vagrant-unbundled 2.2.10.0 → 2.2.14.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 (83) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +60 -0
  3. data/Gemfile +1 -1
  4. data/README.md +4 -44
  5. data/RELEASE.md +1 -1
  6. data/contrib/zsh/_vagrant +3 -1
  7. data/contrib/zsh/generate_zsh_completion.rb +2 -3
  8. data/lib/vagrant.rb +0 -4
  9. data/lib/vagrant/action/builder.rb +6 -15
  10. data/lib/vagrant/action/builtin/box_add.rb +5 -1
  11. data/lib/vagrant/action/builtin/cloud_init_setup.rb +10 -15
  12. data/lib/vagrant/action/builtin/synced_folders.rb +8 -2
  13. data/lib/vagrant/action/runner.rb +1 -1
  14. data/lib/vagrant/box.rb +8 -2
  15. data/lib/vagrant/box_collection.rb +1 -1
  16. data/lib/vagrant/bundler.rb +43 -16
  17. data/lib/vagrant/machine.rb +8 -5
  18. data/lib/vagrant/machine_index.rb +1 -0
  19. data/lib/vagrant/plugin/v2/command.rb +2 -1
  20. data/lib/vagrant/shared_helpers.rb +8 -0
  21. data/lib/vagrant/util/downloader.rb +3 -2
  22. data/lib/vagrant/util/is_port_open.rb +1 -1
  23. data/lib/vagrant/util/mime.rb +92 -0
  24. data/lib/vagrant/util/platform.rb +2 -1
  25. data/lib/vagrant/util/template_renderer.rb +2 -2
  26. data/lib/vagrant/util/uploader.rb +7 -4
  27. data/plugins/commands/cap/command.rb +5 -1
  28. data/plugins/commands/cloud/auth/login.rb +20 -23
  29. data/plugins/commands/cloud/auth/logout.rb +2 -10
  30. data/plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb +57 -0
  31. data/plugins/commands/cloud/auth/whoami.rb +18 -20
  32. data/plugins/commands/cloud/box/create.rb +33 -29
  33. data/plugins/commands/cloud/box/delete.rb +30 -24
  34. data/plugins/commands/cloud/box/show.rb +41 -31
  35. data/plugins/commands/cloud/box/update.rb +34 -26
  36. data/plugins/commands/cloud/client/client.rb +50 -81
  37. data/plugins/commands/cloud/list.rb +3 -4
  38. data/plugins/commands/cloud/locales/en.yml +9 -9
  39. data/plugins/commands/cloud/plugin.rb +10 -0
  40. data/plugins/commands/cloud/provider/create.rb +38 -28
  41. data/plugins/commands/cloud/provider/delete.rb +39 -29
  42. data/plugins/commands/cloud/provider/update.rb +37 -28
  43. data/plugins/commands/cloud/provider/upload.rb +44 -34
  44. data/plugins/commands/cloud/publish.rb +185 -108
  45. data/plugins/commands/cloud/search.rb +34 -21
  46. data/plugins/commands/cloud/util.rb +266 -162
  47. data/plugins/commands/cloud/version/create.rb +33 -28
  48. data/plugins/commands/cloud/version/delete.rb +35 -28
  49. data/plugins/commands/cloud/version/release.rb +35 -29
  50. data/plugins/commands/cloud/version/revoke.rb +36 -29
  51. data/plugins/commands/cloud/version/update.rb +29 -25
  52. data/plugins/commands/login/plugin.rb +0 -13
  53. data/plugins/guests/arch/cap/smb.rb +1 -1
  54. data/plugins/guests/darwin/cap/darwin_version.rb +40 -0
  55. data/plugins/guests/darwin/cap/mount_smb_shared_folder.rb +1 -1
  56. data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +12 -2
  57. data/plugins/guests/darwin/plugin.rb +10 -0
  58. data/plugins/guests/debian/cap/change_host_name.rb +8 -7
  59. data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +16 -41
  60. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +6 -0
  61. data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +18 -5
  62. data/plugins/guests/linux/cap/reboot.rb +10 -5
  63. data/plugins/guests/redhat/cap/change_host_name.rb +6 -2
  64. data/plugins/guests/suse/cap/change_host_name.rb +32 -11
  65. data/plugins/guests/windows/cap/reboot.rb +8 -4
  66. data/plugins/kernel_v2/config/cloud_init.rb +7 -0
  67. data/plugins/kernel_v2/config/disk.rb +1 -1
  68. data/plugins/kernel_v2/config/vm.rb +5 -4
  69. data/plugins/providers/hyperv/action.rb +1 -1
  70. data/plugins/providers/virtualbox/cap/mount_options.rb +1 -1
  71. data/plugins/providers/virtualbox/model/storage_controller_array.rb +4 -6
  72. data/plugins/providers/virtualbox/provider.rb +2 -1
  73. data/plugins/synced_folders/smb/cap/mount_options.rb +21 -1
  74. data/plugins/synced_folders/smb/plugin.rb +10 -0
  75. data/scripts/website_push_www.sh +1 -1
  76. data/vagrant.gemspec +5 -6
  77. data/version.txt +1 -1
  78. metadata +1202 -1595
  79. data/plugins/commands/login/client.rb +0 -253
  80. data/plugins/commands/login/command.rb +0 -137
  81. data/plugins/commands/login/errors.rb +0 -24
  82. data/plugins/commands/login/locales/en.yml +0 -49
  83. 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,8 @@ 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}
80
78
  version:
81
79
  create_success: |-
82
80
  Created version %{version} on %{org}/%{box_name} for version %{version}
@@ -94,6 +92,8 @@ en:
94
92
  This will release version %{version} from %{box} to Vagrant Cloud and be available to download.
95
93
  delete_warn: |-
96
94
  This will completely remove version %{version} from %{box} from Vagrant Cloud. This cannot be undone.
95
+ not_found: |-
96
+ Failed to locate version %{version} for %{org}/%{box_name}
97
97
  errors:
98
98
  search:
99
99
  fail: |-
@@ -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,65 @@ 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!
62
-
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
61
+ with_provider(account: account, org: org, box: box, version: version, provider: provider) do |p|
62
+ p.upload(direct: options[:direct]) do |upload_url|
63
+ m = options[:direct] ? :put : :put
64
+ uploader = Vagrant::Util::Uploader.new(upload_url, file, ui: @env.ui, method: m)
65
+ ui = Vagrant::UI::Prefixed.new(@env.ui, "cloud")
66
+ ui.output(I18n.t("cloud_command.provider.upload",
67
+ org: org, box_name: box, version: version, provider: provider))
68
+ ui.info("Upload File: #{file}")
69
+ uploader.upload!
70
+ ui.success(I18n.t("cloud_command.provider.upload_success",
71
+ org: org, box_name: box, version: version, provider: provider))
72
+ end
73
+ 0
69
74
  end
75
+ rescue Vagrant::Errors::UploaderError, VagrantCloud::Error => e
76
+ @env.ui.error(I18n.t("cloud_command.errors.provider.upload_fail",
77
+ provider: provider, org: org, box_name: box, version: version))
78
+ @env.ui.error(e.message)
79
+ 1
70
80
  end
71
81
  end
72
82
  end