Allow any role to turn on traefik labels

This commit is contained in:
David Heinemeier Hansson
2023-01-20 13:32:12 +01:00
parent 135fcdd9d3
commit 2cb09be0cd
2 changed files with 24 additions and 12 deletions

View File

@@ -12,11 +12,7 @@ class Mrsk::Configuration::Role
end end
def labels def labels
if name.web? default_labels.merge(traefik_labels).merge(custom_labels)
default_labels.merge(traefik_labels).merge(custom_labels)
else
default_labels.merge(custom_labels)
end
end end
def label_args def label_args
@@ -52,13 +48,21 @@ class Mrsk::Configuration::Role
end end
def traefik_labels def traefik_labels
{ if running_traefik?
"traefik.http.routers.#{config.service}.rule" => "'PathPrefix(`/`)'", {
"traefik.http.services.#{config.service}.loadbalancer.healthcheck.path" => "/up", "traefik.http.routers.#{config.service}.rule" => "'PathPrefix(`/`)'",
"traefik.http.services.#{config.service}.loadbalancer.healthcheck.interval" => "1s", "traefik.http.services.#{config.service}.loadbalancer.healthcheck.path" => "/up",
"traefik.http.middlewares.#{config.service}.retry.attempts" => "3", "traefik.http.services.#{config.service}.loadbalancer.healthcheck.interval" => "1s",
"traefik.http.middlewares.#{config.service}.retry.initialinterval" => "500ms" "traefik.http.middlewares.#{config.service}.retry.attempts" => "3",
} "traefik.http.middlewares.#{config.service}.retry.initialinterval" => "500ms"
}
else
{}
end
end
def running_traefik?
name.web? || specializations["traefik"]
end end
def custom_labels def custom_labels

View File

@@ -64,6 +64,14 @@ class ConfigurationRoleTest < ActiveSupport::TestCase
assert_equal "'Host(`example.com`) || (Host(`example.org`) && Path(`/traefik`))'", @config.role(:web).labels["traefik.http.routers.app.rule"] assert_equal "'Host(`example.com`) || (Host(`example.org`) && Path(`/traefik`))'", @config.role(:web).labels["traefik.http.routers.app.rule"]
end end
test "default traefik label on non-web role" do
config = Mrsk::Configuration.new(@deploy_with_roles.tap { |c|
c[:servers]["beta"] = { "traefik" => "true", "hosts" => [ "1.1.1.5" ] }
})
assert_equal [ "--label", "service=app", "--label", "role=beta", "--label", "traefik.http.routers.app.rule='PathPrefix(`/`)'", "--label", "traefik.http.services.app.loadbalancer.healthcheck.path=/up", "--label", "traefik.http.services.app.loadbalancer.healthcheck.interval=1s", "--label", "traefik.http.middlewares.app.retry.attempts=3", "--label", "traefik.http.middlewares.app.retry.initialinterval=500ms" ], config.role(:beta).label_args
end
test "env overwritten by role" do test "env overwritten by role" do
assert_equal "redis://a/b", @config_with_roles.role(:workers).env["REDIS_URL"] assert_equal "redis://a/b", @config_with_roles.role(:workers).env["REDIS_URL"]
assert_equal ["-e", "REDIS_URL=redis://a/b", "-e", "WEB_CONCURRENCY=4"], @config_with_roles.role(:workers).env_args assert_equal ["-e", "REDIS_URL=redis://a/b", "-e", "WEB_CONCURRENCY=4"], @config_with_roles.role(:workers).env_args