plugins/commands/cloud/box/update.rb in vagrant-unbundled-2.2.10.0 vs plugins/commands/cloud/box/update.rb in vagrant-unbundled-2.2.14.0
- old
+ new
@@ -3,10 +3,12 @@
module VagrantPlugins
module CloudCommand
module BoxCommand
module Command
class Update < Vagrant.plugin("2", :command)
+ include Util
+
def execute
options = {}
opts = OptionParser.new do |o|
o.banner = "Usage: vagrant cloud box update [options] organization/box-name"
@@ -17,53 +19,59 @@
o.separator ""
o.on("-d", "--description DESCRIPTION", "Full description of the box") do |d|
options[:description] = d
end
- o.on("-u", "--username", "The username of the organization that will own the box") do |u|
- options[:username] = u
- end
o.on("-s", "--short-description DESCRIPTION", "Short description of the box") do |s|
- options[:short_description] = s
+ options[:short] = s
end
- o.on("-p", "--private", "Makes box private") do |p|
+ o.on("-p", "--[no-]private", "Makes box private") do |p|
options[:private] = p
end
end
# Parse the options
argv = parse_options(opts)
return if !argv
- if argv.empty? || argv.length > 1 || options.length == 0
+ if argv.empty? || argv.length > 1 || options.slice(:description, :short, :private).length == 0
raise Vagrant::Errors::CLIInvalidUsage,
help: opts.help.chomp
end
- @client = VagrantPlugins::CloudCommand::Util.client_login(@env, options[:username])
- box = argv.first.split('/', 2)
+ @client = client_login(@env)
+ org, box_name = argv.first.split('/', 2)
- update_box(box[0], box[1], options, @client.token)
+ update_box(org, box_name, @client.token, options.slice(:short, :description, :private))
end
- def update_box(org, box_name, options, access_token)
- server_url = VagrantPlugins::CloudCommand::Util.api_server_url
- account = VagrantPlugins::CloudCommand::Util.account(options[:username], access_token, server_url)
- box = VagrantCloud::Box.new(account, box_name, nil, nil, nil, access_token)
-
- options[:organization] = org
- options[:name] = box_name
- begin
- success = box.update(options)
+ # Update an existing box
+ #
+ # @param [String] org Organization name of box
+ # @param [String] box_name Name of box
+ # @param [String] access_token User access token
+ # @param [Hash] options Options for box filtering
+ # @option options [String] :short Short description of box
+ # @option options [String] :description Full description of box
+ # @option options [Boolean] :private Set box visibility as private
+ # @return [Integer]
+ def update_box(org, box_name, access_token, options={})
+ account = VagrantCloud::Account.new(
+ custom_server: api_server_url,
+ access_token: access_token
+ )
+ with_box(account: account, org: org, box: box_name) do |box|
+ box.short_description = options[:short] if options.key?(:short)
+ box.description = options[:description] if options.key?(:description)
+ box.private = options[:private] if options.key?(:private)
+ box.save
@env.ui.success(I18n.t("cloud_command.box.update_success", org: org, box_name: box_name))
- success = success.delete_if{|_, v|v.nil?}
- VagrantPlugins::CloudCommand::Util.format_box_results(success, @env)
- return 0
- rescue VagrantCloud::ClientError => e
- @env.ui.error(I18n.t("cloud_command.errors.box.update_fail", org: org, box_name: box_name))
- @env.ui.error(e)
- return 1
+ format_box_results(box, @env)
+ 0
end
- return 1
+ rescue VagrantCloud::Error => e
+ @env.ui.error(I18n.t("cloud_command.errors.box.update_fail", org: org, box_name: box_name))
+ @env.ui.error(e.message)
+ 1
end
end
end
end
end