fix: allow configurations without web roles

This commit is contained in:
Yoel Cabo
2023-11-12 09:39:07 +01:00
parent 8f53104d00
commit 87cb8c1f71
7 changed files with 31 additions and 10 deletions

View File

@@ -3,6 +3,7 @@ class Kamal::Cli::Healthcheck < Kamal::Cli::Base
desc "perform", "Health check current app version" desc "perform", "Health check current app version"
def perform def perform
return unless KAMAL.primary_role.running_traefik?
on(KAMAL.primary_host) do on(KAMAL.primary_host) do
begin begin
execute *KAMAL.healthcheck.run execute *KAMAL.healthcheck.run

View File

@@ -24,7 +24,7 @@ class Kamal::Commander
attr_reader :specific_roles, :specific_hosts attr_reader :specific_roles, :specific_hosts
def specific_primary! def specific_primary!
self.specific_hosts = [ config.primary_web_host ] self.specific_hosts = [ config.primary_host ]
end end
def specific_roles=(role_names) def specific_roles=(role_names)
@@ -36,7 +36,7 @@ class Kamal::Commander
end end
def primary_host def primary_host
specific_hosts&.first || specific_roles&.first&.primary_host || config.primary_web_host specific_hosts&.first || specific_roles&.first&.primary_host || config.primary_host
end end
def primary_role def primary_role

View File

@@ -2,6 +2,7 @@ class Kamal::Commands::Healthcheck < Kamal::Commands::Base
def run def run
web = config.role(:web) web = config.role(:web)
return unless web.present?
docker :run, docker :run,
"--detach", "--detach",

View File

@@ -89,8 +89,12 @@ class Kamal::Configuration
roles.flat_map(&:hosts).uniq roles.flat_map(&:hosts).uniq
end end
def primary_web_host def primary_host
role(:web).primary_host primary_role.primary_host
end
def primary_role
role(:web) || roles.first
end end
def traefik_hosts def traefik_hosts
@@ -208,7 +212,7 @@ class Kamal::Configuration
{ {
roles: role_names, roles: role_names,
hosts: all_hosts, hosts: all_hosts,
primary_host: primary_web_host, primary_host: primary_host,
version: version, version: version,
repository: repository, repository: repository,
absolute_image: absolute_image, absolute_image: absolute_image,

View File

@@ -64,9 +64,14 @@ class CliHealthcheckTest < CliTestCase
end end
assert_match "container not ready (unhealthy)", exception.message assert_match "container not ready (unhealthy)", exception.message
end end
test "does not perform if primary does not have traefik" do
SSHKit::Backend::Abstract.any_instance.expects(:execute).never
run_command("perform", config_file: "test/fixtures/deploy_workers_only.yml")
end
private private
def run_command(*command) def run_command(*command, config_file: "test/fixtures/deploy_with_accessories.yml")
stdouted { Kamal::Cli::Healthcheck.start([*command, "-c", "test/fixtures/deploy_with_accessories.yml"]) } stdouted { Kamal::Cli::Healthcheck.start([*command, "-c", config_file]) }
end end
end end

View File

@@ -58,9 +58,9 @@ class ConfigurationTest < ActiveSupport::TestCase
assert_equal [ "1.1.1.1", "1.1.1.2", "1.1.1.3" ], @config_with_roles.all_hosts assert_equal [ "1.1.1.1", "1.1.1.2", "1.1.1.3" ], @config_with_roles.all_hosts
end end
test "primary web host" do test "primary host" do
assert_equal "1.1.1.1", @config.primary_web_host assert_equal "1.1.1.1", @config.primary_host
assert_equal "1.1.1.1", @config_with_roles.primary_web_host assert_equal "1.1.1.1", @config_with_roles.primary_host
end end
test "traefik hosts" do test "traefik hosts" do

10
test/fixtures/deploy_workers_only.yml vendored Normal file
View File

@@ -0,0 +1,10 @@
service: app
image: dhh/app
servers:
workers:
hosts:
- 1.1.1.1
- 1.1.1.2
registry:
username: user
password: pw