mirror of
https://github.com/hashicorp/vagrant.git
synced 2026-05-28 04:36:05 -04:00
Co-authored-by: hashicorp-copywrite[bot] <110428419+hashicorp-copywrite[bot]@users.noreply.github.com>
109 lines
4.1 KiB
Ruby
109 lines
4.1 KiB
Ruby
# Copyright IBM Corp. 2010, 2025
|
|
# 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
|