From 77b9ffbfe6d134138d18dfd95d0fcbca56d9a831 Mon Sep 17 00:00:00 2001 From: Leon Date: Thu, 20 Jun 2024 22:23:38 +0200 Subject: [PATCH] Remove accessory env file from host when accessory is removed --- lib/kamal/cli/accessory.rb | 14 +++++++++++++- test/cli/accessory_test.rb | 7 +++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/kamal/cli/accessory.rb b/lib/kamal/cli/accessory.rb index b3ff10f57..fe6b812f9 100644 --- a/lib/kamal/cli/accessory.rb +++ b/lib/kamal/cli/accessory.rb @@ -173,7 +173,7 @@ def logs(name) end end - desc "remove [NAME]", "Remove accessory container, image and data directory from host (use NAME=all to remove all accessories)" + desc "remove [NAME]", "Remove accessory container, image, data directory and env file from host (use NAME=all to remove all accessories)" option :confirmed, aliases: "-y", type: :boolean, default: false, desc: "Proceed without confirmation question" def remove(name) confirming "This will remove all containers, images and data directories for #{name}. Are you sure?" do @@ -222,6 +222,17 @@ def remove_service_directory(name) end end + desc "remove_env_file [NAME]", "Remove accessory env file from host", hide: true + def remove_env_file(name) + with_lock do + with_accessory(name) do |accessory, hosts| + on(hosts) do + execute *accessory.remove_env_file + end + end + end + end + private def with_accessory(name) if KAMAL.config.accessory(name) @@ -254,6 +265,7 @@ def remove_accessory(name) remove_container(name) remove_image(name) remove_service_directory(name) + remove_env_file(name) end end end diff --git a/test/cli/accessory_test.rb b/test/cli/accessory_test.rb index e56eef2d9..83777c183 100644 --- a/test/cli/accessory_test.rb +++ b/test/cli/accessory_test.rb @@ -156,6 +156,7 @@ class CliAccessoryTest < CliTestCase Kamal::Cli::Accessory.any_instance.expects(:remove_container).with("mysql") Kamal::Cli::Accessory.any_instance.expects(:remove_image).with("mysql") Kamal::Cli::Accessory.any_instance.expects(:remove_service_directory).with("mysql") + Kamal::Cli::Accessory.any_instance.expects(:remove_env_file).with("mysql") run_command("remove", "mysql", "-y") end @@ -165,10 +166,12 @@ class CliAccessoryTest < CliTestCase Kamal::Cli::Accessory.any_instance.expects(:remove_container).with("mysql") Kamal::Cli::Accessory.any_instance.expects(:remove_image).with("mysql") Kamal::Cli::Accessory.any_instance.expects(:remove_service_directory).with("mysql") + Kamal::Cli::Accessory.any_instance.expects(:remove_env_file).with("mysql") Kamal::Cli::Accessory.any_instance.expects(:stop).with("redis") Kamal::Cli::Accessory.any_instance.expects(:remove_container).with("redis") Kamal::Cli::Accessory.any_instance.expects(:remove_image).with("redis") Kamal::Cli::Accessory.any_instance.expects(:remove_service_directory).with("redis") + Kamal::Cli::Accessory.any_instance.expects(:remove_env_file).with("redis") run_command("remove", "all", "-y") end @@ -185,6 +188,10 @@ class CliAccessoryTest < CliTestCase assert_match "rm -rf app-mysql", run_command("remove_service_directory", "mysql") end + test "remove_env_file" do + assert_match "rm -f .kamal/env/accessories/app-mysql.env", run_command("remove_env_file", "mysql") + end + test "hosts param respected" do Kamal::Cli::Accessory.any_instance.expects(:directories).with("redis") Kamal::Cli::Accessory.any_instance.expects(:upload).with("redis")