Allow any role to turn on traefik labels
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user