Remove also removes accessories but requires confirmation

This commit is contained in:
David Heinemeier Hansson
2023-02-19 16:30:18 +01:00
parent 67cb89b9b9
commit 5356f31e2e
2 changed files with 35 additions and 3 deletions

View File

@@ -135,9 +135,12 @@ class Mrsk::Cli::Main < Mrsk::Cli::Base
desc "remove", "Remove Traefik, app, accessories, and registry session from servers" desc "remove", "Remove Traefik, app, accessories, and registry session from servers"
option :confirmed, aliases: "-y", type: :boolean, default: false, desc: "Proceed without confirmation question" option :confirmed, aliases: "-y", type: :boolean, default: false, desc: "Proceed without confirmation question"
def remove def remove
invoke "mrsk:cli:traefik:remove" if options[:confirmed] || ask(remove_confirmation_question, limited_to: %w( y N ), default: "N") == "y"
invoke "mrsk:cli:app:remove" invoke "mrsk:cli:traefik:remove", [], options.without(:confirmed)
invoke "mrsk:cli:registry:logout" invoke "mrsk:cli:app:remove", [], options.without(:confirmed)
invoke "mrsk:cli:accessory:remove", [ "all" ]
invoke "mrsk:cli:registry:logout", [], options.without(:confirmed)
end
end end
desc "version", "Show MRSK version" desc "version", "Show MRSK version"
@@ -175,4 +178,10 @@ class Mrsk::Cli::Main < Mrsk::Cli::Base
on(host) { container_names = capture_with_info(*MRSK.app.list_container_names).split("\n") } on(host) { container_names = capture_with_info(*MRSK.app.list_container_names).split("\n") }
Array(container_names).include?(container_name) Array(container_names).include?(container_name)
end end
def remove_confirmation_question
"This will remove all containers and images. " +
(MRSK.config.accessories.any? ? "Including #{MRSK.config.accessories.collect(&:name).to_sentence}. " : "") +
"Are you sure?"
end
end end

View File

@@ -25,6 +25,29 @@ class CliMainTest < CliTestCase
end end
end end
test "remove with confirmation" do
run_command("remove", "-y").tap do |output|
assert_match /docker container stop traefik/, output
assert_match /docker container prune -f --filter label=org.opencontainers.image.title=Traefik/, output
assert_match /docker image prune -a -f --filter label=org.opencontainers.image.title=Traefik/, output
assert_match /docker ps -q --filter label=service=app | xargs docker stop/, output
assert_match /docker container prune -f --filter label=service=app/, output
assert_match /docker image prune -a -f --filter label=service=app/, output
assert_match /docker container stop app-mysql/, output
assert_match /docker container prune -f --filter label=service=app-mysql/, output
assert_match /docker image prune -a -f --filter label=service=app-mysql/, output
assert_match /rm -rf app-mysql/, output
assert_match /docker container stop app-redis/, output
assert_match /docker container prune -f --filter label=service=app-redis/, output
assert_match /docker image prune -a -f --filter label=service=app-redis/, output
assert_match /rm -rf app-redis/, output
assert_match /docker logout/, output
end
end
private private
def run_command(*command) def run_command(*command)