diff --git a/README.md b/README.md index 2b1e5377..62941f54 100644 --- a/README.md +++ b/README.md @@ -235,6 +235,18 @@ RUN --mount=type=secret,id=GITHUB_TOKEN \ bundle install ``` +### Using command arguments for Traefik + +You can customize the traefik command line: + +```yaml +traefik: + accesslog: true + accesslog.format: json + metrics.prometheus: true + metrics.prometheus.buckets: 0.1,0.3,1.2,5.0 +``` + ### Configuring build args for new images Build arguments that aren't secret can also be configured: diff --git a/lib/mrsk/commands/traefik.rb b/lib/mrsk/commands/traefik.rb index a64f4b14..f8f7aee7 100644 --- a/lib/mrsk/commands/traefik.rb +++ b/lib/mrsk/commands/traefik.rb @@ -9,7 +9,8 @@ class Mrsk::Commands::Traefik < Mrsk::Commands::Base "-v /var/run/docker.sock:/var/run/docker.sock", "traefik", "--providers.docker", - "--log.level=DEBUG" + "--log.level=DEBUG", + *cmd_args end def start @@ -44,4 +45,9 @@ class Mrsk::Commands::Traefik < Mrsk::Commands::Base def remove_image docker :image, :prune, "-a", "-f", "--filter", "label=org.opencontainers.image.title=Traefik" end + + private + def cmd_args + (config.raw_config.dig(:traefik, "args") || { }).collect { |(key, value)| [ "--#{key}", value ] }.flatten + end end diff --git a/test/commands/traefik_test.rb b/test/commands/traefik_test.rb new file mode 100644 index 00000000..9ba17319 --- /dev/null +++ b/test/commands/traefik_test.rb @@ -0,0 +1,23 @@ +require "test_helper" +require "mrsk/configuration" +require "mrsk/commands/traefik" + +class CommandsTraefikTest < ActiveSupport::TestCase + setup do + @config = { + service: "app", image: "dhh/app", registry: { "username" => "dhh", "password" => "secret" }, servers: [ "1.1.1.1" ], + traefik: { "args" => { "accesslog.format" => "json", "metrics.prometheus.buckets" => "0.1,0.3,1.2,5.0" } } + } + end + + test "run" do + assert_equal \ + [:docker, :run, "--name traefik", "-d", "--restart unless-stopped", "-p 80:80", "-v /var/run/docker.sock:/var/run/docker.sock", "traefik", "--providers.docker", "--accesslog.format", "json", "--metrics.prometheus.buckets", "0.1,0.3,1.2,5.0"], + new_command.run + end + + private + def new_command + Mrsk::Commands::Traefik.new(Mrsk::Configuration.new(@config, version: "123")) + end +end