From 79baa598fa99afc80cf0dea8317122b1fea1dcfb Mon Sep 17 00:00:00 2001 From: Matthew Kent Date: Fri, 24 Nov 2023 15:35:36 -0800 Subject: [PATCH] Make an effort to match the primary_role from a list of specific roles. This is less surprising than picking the first role and first host. --- lib/kamal/commander.rb | 3 ++- test/commander_test.rb | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/kamal/commander.rb b/lib/kamal/commander.rb index 35939fe7d..ded958eb8 100644 --- a/lib/kamal/commander.rb +++ b/lib/kamal/commander.rb @@ -36,7 +36,8 @@ def specific_hosts=(hosts) end def primary_host - specific_hosts&.first || specific_roles&.first&.primary_host || config.primary_host + # Given a list of specific roles, make an effort to match up with the primary_role + specific_hosts&.first || specific_roles&.detect { |role| role.name == config.primary_role }&.primary_host || specific_roles&.first&.primary_host || config.primary_host end def primary_role diff --git a/test/commander_test.rb b/test/commander_test.rb index 06cc5bbb1..d98026685 100644 --- a/test/commander_test.rb +++ b/test/commander_test.rb @@ -100,6 +100,15 @@ class CommanderTest < ActiveSupport::TestCase assert_equal({ in: :groups, limit: 1, wait: 2 }, @kamal.boot_strategy) end + test "try to match the primary role from a list of specific roles" do + configure_with(:deploy_primary_web_role_override) + + @kamal.specific_roles = [ "web_*" ] + assert_equal [ "web_chicago", "web_tokyo" ], @kamal.roles.map(&:name) + assert_equal "web_tokyo", @kamal.primary_role + assert_equal "1.1.1.3", @kamal.primary_host + end + private def configure_with(variant) @kamal = Kamal::Commander.new.tap do |kamal|