diff --git a/plugins/logs/triggers.go b/plugins/logs/triggers.go index 31c829b50..f765311cf 100644 --- a/plugins/logs/triggers.go +++ b/plugins/logs/triggers.go @@ -10,6 +10,8 @@ import ( "github.com/dokku/dokku/plugins/common" dockeroptions "github.com/dokku/dokku/plugins/docker-options" + + sh "github.com/codeskyblue/go-sh" ) // TriggerDockerArgsProcessDeploy outputs the logs plugin docker options for an app @@ -30,11 +32,13 @@ func TriggerDockerArgsProcessDeploy(appName string) error { return err } + hasDriverOpt := false for _, option := range options { if !strings.HasPrefix(option, "--log-driver=") { continue } + hasDriverOpt = true logDriver := strings.TrimPrefix(option, "--log-driver=") if !allowedDrivers[logDriver] { ignoreMaxSize = true @@ -42,6 +46,14 @@ func TriggerDockerArgsProcessDeploy(appName string) error { break } + if !hasDriverOpt { + b, _ := sh.Command(common.DockerBin(), "system", "info", "--format", "{{ .LoggingDriver }}").Output() + output := strings.TrimSpace(string(b[:])) + if !allowedDrivers[output] { + ignoreMaxSize = true + } + } + if !ignoreMaxSize { maxSize := common.PropertyGet("logs", appName, "max-size") if maxSize == "" { diff --git a/tests/unit/logs.bats b/tests/unit/logs.bats index 70677b00e..9ad5ed65a 100644 --- a/tests/unit/logs.bats +++ b/tests/unit/logs.bats @@ -369,6 +369,66 @@ teardown() { assert_output "10m" } +@test "(logs) logs:set max-size with alternate log-driver daemon " { + driver="$(jq -r '."log-driver"' /etc/docker/daemon.json)" + local TMP_FILE=$(mktemp "/tmp/dokku.me.XXXX") + + run create_app + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku logs:set $TEST_APP max-size 20m 2>&1" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "Setting max-size" + + run /bin/bash -c "echo '' | dokku plugin:trigger docker-args-process-deploy $TEST_APP 2>&1 | xargs" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "--log-opt=max-size=20m" + + DRIVER="journald" jq '."log-driver" = env.DRIVER' <"/etc/docker/daemon.json" >"$TMP_FILE" + mv "$TMP_FILE" /etc/docker/daemon.json + + sudo service docker restart + + run /bin/bash -c "dokku logs:set $TEST_APP max-size 20m 2>&1" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "Setting max-size" + + run /bin/bash -c "echo '' | dokku plugin:trigger docker-args-process-deploy $TEST_APP 2>&1 | xargs" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_not_exists + + if [[ "$driver" = "null" ]]; then + DRIVER="$driver" jq 'del(."log-driver")' <"/etc/docker/daemon.json" >"$TMP_FILE" + else + DRIVER="$driver" jq '."log-driver" = env.DRIVER' <"/etc/docker/daemon.json" >"$TMP_FILE" + fi + + mv "$TMP_FILE" /etc/docker/daemon.json + sudo service docker restart + + run /bin/bash -c "dokku logs:set $TEST_APP max-size 20m 2>&1" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains "Setting max-size" + + run /bin/bash -c "echo '' | dokku plugin:trigger docker-args-process-deploy $TEST_APP 2>&1 | xargs" + echo "output: $output" + echo "status: $status" + assert_success + assert_output "--log-opt=max-size=20m" +} + @test "(logs) logs:set max-size with alternate log-driver" { run create_app echo "output: $output"