diff --git a/lib/mrsk/configuration/role.rb b/lib/mrsk/configuration/role.rb index ae1550e0..c8439a7d 100644 --- a/lib/mrsk/configuration/role.rb +++ b/lib/mrsk/configuration/role.rb @@ -12,11 +12,7 @@ class Mrsk::Configuration::Role end def labels - if name.web? - default_labels.merge(traefik_labels).merge(custom_labels) - else - default_labels.merge(custom_labels) - end + default_labels.merge(traefik_labels).merge(custom_labels) end def label_args @@ -52,13 +48,21 @@ class Mrsk::Configuration::Role end def traefik_labels - { - "traefik.http.routers.#{config.service}.rule" => "'PathPrefix(`/`)'", - "traefik.http.services.#{config.service}.loadbalancer.healthcheck.path" => "/up", - "traefik.http.services.#{config.service}.loadbalancer.healthcheck.interval" => "1s", - "traefik.http.middlewares.#{config.service}.retry.attempts" => "3", - "traefik.http.middlewares.#{config.service}.retry.initialinterval" => "500ms" - } + if running_traefik? + { + "traefik.http.routers.#{config.service}.rule" => "'PathPrefix(`/`)'", + "traefik.http.services.#{config.service}.loadbalancer.healthcheck.path" => "/up", + "traefik.http.services.#{config.service}.loadbalancer.healthcheck.interval" => "1s", + "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 def custom_labels diff --git a/test/configuration_role_test.rb b/test/configuration_role_test.rb index 6cbb0ee9..f954ebff 100644 --- a/test/configuration_role_test.rb +++ b/test/configuration_role_test.rb @@ -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"] 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 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