From 399f1526afd3469884c9fefae24c023f43d36058 Mon Sep 17 00:00:00 2001 From: Donal McBreen Date: Fri, 18 Apr 2025 10:20:54 +0100 Subject: [PATCH] Handle role filter when booting accessories Filter the accessory hosts via KAMAL.accessory_hosts, which correctly handles role and host filters. Fixes: https://github.com/basecamp/kamal/issues/935 --- lib/kamal/cli/accessory.rb | 6 +----- test/cli/accessory_test.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/kamal/cli/accessory.rb b/lib/kamal/cli/accessory.rb index c95cbb1e..326717ac 100644 --- a/lib/kamal/cli/accessory.rb +++ b/lib/kamal/cli/accessory.rb @@ -275,11 +275,7 @@ class Kamal::Cli::Accessory < Kamal::Cli::Base end def accessory_hosts(accessory) - if KAMAL.specific_hosts&.any? - KAMAL.specific_hosts & accessory.hosts - else - accessory.hosts - end + KAMAL.accessory_hosts & accessory.hosts end def remove_accessory(name) diff --git a/test/cli/accessory_test.rb b/test/cli/accessory_test.rb index cc517e59..c11426c0 100644 --- a/test/cli/accessory_test.rb +++ b/test/cli/accessory_test.rb @@ -251,6 +251,19 @@ class CliAccessoryTest < CliTestCase end end + test "boot with web role filter" do + run_command("boot", "redis", "-r", "web").tap do |output| + assert_match "docker run --name app-redis --detach --restart unless-stopped --network kamal --log-opt max-size=\"10m\" --publish 6379:6379 --env-file .kamal/apps/app/env/accessories/redis.env --volume $PWD/app-redis/data:/data --label service=\"app-redis\" redis:latest on 1.1.1.1", output + assert_match "docker run --name app-redis --detach --restart unless-stopped --network kamal --log-opt max-size=\"10m\" --publish 6379:6379 --env-file .kamal/apps/app/env/accessories/redis.env --volume $PWD/app-redis/data:/data --label service=\"app-redis\" redis:latest on 1.1.1.2", output + end + end + + test "boot with workers role filter" do + run_command("boot", "redis", "-r", "workers").tap do |output| + assert_no_match "docker run", output + end + end + private def run_command(*command) stdouted { Kamal::Cli::Accessory.start([ *command, "-c", "test/fixtures/deploy_with_accessories_with_different_registries.yml" ]) }