Skip to content

Commit

Permalink
Raise an error when either the filtered hosts or roles are empty.
Browse files Browse the repository at this point in the history
Keeps us confusingly running things on the primary_host when nothing
matches.
  • Loading branch information
mdkent committed Nov 25, 2023
1 parent 79baa59 commit 63babec
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 6 deletions.
20 changes: 18 additions & 2 deletions lib/kamal/commander.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,27 @@ def specific_primary!
end

def specific_roles=(role_names)
@specific_roles = Kamal::Utils.filter_specific_items(role_names, config.roles) if role_names.present?
if role_names.present?
@specific_roles = Kamal::Utils.filter_specific_items(role_names, config.roles)

if @specific_roles.empty?
raise ArgumentError, "No --roles match for #{role_names.join(',')}"
end

@specific_roles
end
end

def specific_hosts=(hosts)
@specific_hosts = Kamal::Utils.filter_specific_items(hosts, config.all_hosts) if hosts.present?
if hosts.present?
@specific_hosts = Kamal::Utils.filter_specific_items(hosts, config.all_hosts)

if @specific_hosts.empty?
raise ArgumentError, "No --hosts match for #{hosts.join(',')}"
end

@specific_hosts
end
end

def primary_host
Expand Down
17 changes: 13 additions & 4 deletions test/commander_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,22 @@ class CommanderTest < ActiveSupport::TestCase
@kamal.specific_hosts = [ "*" ]
assert_equal [ "1.1.1.1", "1.1.1.2", "1.1.1.3", "1.1.1.4" ], @kamal.hosts

@kamal.specific_hosts = [ "*miss" ]
assert_equal [], @kamal.hosts
exception = assert_raises(ArgumentError) do
@kamal.specific_hosts = [ "*miss" ]
end
assert_match /hosts match for \*miss/, exception.message
end

test "filtering hosts by filtering roles" do
assert_equal [ "1.1.1.1", "1.1.1.2", "1.1.1.3", "1.1.1.4" ], @kamal.hosts

@kamal.specific_roles = [ "web" ]
assert_equal [ "1.1.1.1", "1.1.1.2" ], @kamal.hosts

exception = assert_raises(ArgumentError) do
@kamal.specific_roles = [ "*miss" ]
end
assert_match /roles match for \*miss/, exception.message
end

test "filtering roles" do
Expand All @@ -50,8 +57,10 @@ class CommanderTest < ActiveSupport::TestCase
@kamal.specific_roles = [ "*" ]
assert_equal [ "web", "workers" ], @kamal.roles.map(&:name)

@kamal.specific_roles = [ "*miss" ]
assert_equal [], @kamal.roles.map(&:name)
exception = assert_raises(ArgumentError) do
@kamal.specific_roles = [ "*miss" ]
end
assert_match /roles match for \*miss/, exception.message
end

test "filtering roles by filtering hosts" do
Expand Down

0 comments on commit 63babec

Please sign in to comment.