mirror of
https://github.com/hashicorp/vagrant.git
synced 2026-03-02 21:30:49 -05:00
Remove customized require behaviors and modify the bin executable to check for missing tools that Vagrant expects to exist when running outside of an installer.
109 lines
4.1 KiB
Ruby
109 lines
4.1 KiB
Ruby
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: BUSL-1.1
|
|
|
|
require 'optparse'
|
|
|
|
module VagrantPlugins
|
|
module CloudCommand
|
|
module ProviderCommand
|
|
module Command
|
|
class Delete < Vagrant.plugin("2", :command)
|
|
include Util
|
|
|
|
def execute
|
|
options = {}
|
|
|
|
opts = OptionParser.new do |o|
|
|
o.banner = "Usage: vagrant cloud provider delete [options] organization/box-name provider-name version [architecture]"
|
|
o.separator ""
|
|
o.separator "Deletes a provider entry on Vagrant Cloud"
|
|
o.separator ""
|
|
o.separator "Options:"
|
|
o.separator ""
|
|
o.on("-f", "--[no-]force", "Force deletion of box version provider without confirmation") do |f|
|
|
options[:force] = f
|
|
end
|
|
end
|
|
|
|
# Parse the options
|
|
argv = parse_options(opts)
|
|
return if !argv
|
|
if argv.count < 3 || argv.count > 4
|
|
raise Vagrant::Errors::CLIInvalidUsage,
|
|
help: opts.help.chomp
|
|
end
|
|
|
|
org, box_name = argv.first.split('/', 2)
|
|
provider_name = argv[1]
|
|
version = argv[2]
|
|
architecture = argv[3]
|
|
|
|
@client = client_login(@env)
|
|
account = VagrantCloud::Account.new(
|
|
custom_server: api_server_url,
|
|
access_token: @client.token
|
|
)
|
|
|
|
if architecture.nil?
|
|
architecture = select_provider_architecture(account, org, box_name, version, provider_name)
|
|
end
|
|
|
|
@env.ui.warn(I18n.t("cloud_command.provider.delete_warn",
|
|
architecture: architecture, provider: provider_name, version: version, box: argv.first))
|
|
|
|
if !options[:force]
|
|
cont = @env.ui.ask(I18n.t("cloud_command.continue"))
|
|
return 1 if cont.strip.downcase != "y"
|
|
end
|
|
|
|
delete_provider(org, box_name, version, provider_name, architecture, account, options)
|
|
end
|
|
|
|
def select_provider_architecture(account, org, box, version, provider)
|
|
with_version(account: account, org: org, box: box, version: version) do |box_version|
|
|
list = box_version.providers.map(&:architecture)
|
|
return list.first if list.size == 1
|
|
|
|
@env.ui.info(I18n.t("cloud_command.provider.delete_multiple_architectures",
|
|
org: org, box_name: box, provider: provider))
|
|
list.each do |provider_name|
|
|
@env.ui.info(" * #{provider_name}")
|
|
end
|
|
selected = nil
|
|
while selected.nil?
|
|
user_input = @env.ui.ask(I18n.t("cloud_command.provider.delete_architectures_prompt") + " ")
|
|
selected = user_input if list.include?(user_input)
|
|
end
|
|
|
|
return selected
|
|
end
|
|
end
|
|
|
|
# Delete a provider for the box version
|
|
#
|
|
# @param [String] org Organization name
|
|
# @param [String] box Box name
|
|
# @param [String] version Box version
|
|
# @param [String] provider Provider name
|
|
# @param [String] architecture Architecture of guest
|
|
# @param [VagrantCloud::Account] account VagrantCloud account
|
|
# @param [Hash] options Currently unused
|
|
# @return [Integer]
|
|
def delete_provider(org, box, version, provider, architecture, account, options={})
|
|
with_provider(account: account, org: org, box: box, version: version, provider: provider, architecture: architecture) do |p|
|
|
p.delete
|
|
@env.ui.error(I18n.t("cloud_command.provider.delete_success",
|
|
architecture: architecture, provider: provider, org: org, box_name: box, version: version))
|
|
0
|
|
end
|
|
rescue VagrantCloud::Error => e
|
|
@env.ui.error(I18n.t("cloud_command.errors.provider.delete_fail",
|
|
architecture: architecture, provider: provider, org: org, box_name: box, version: version))
|
|
@env.ui.error(e)
|
|
1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|