From 9ab448e1860e4bd43badaeadeed6ae0a3574630a Mon Sep 17 00:00:00 2001 From: Lewis Buckley Date: Wed, 19 Jul 2023 14:39:27 +0100 Subject: [PATCH] Support a --rolling option for traefik reboots --- lib/mrsk/cli/traefik.rb | 11 ++++++++--- test/cli/traefik_test.rb | 15 +++++++++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/mrsk/cli/traefik.rb b/lib/mrsk/cli/traefik.rb index 30fd10f3..aaa079a2 100644 --- a/lib/mrsk/cli/traefik.rb +++ b/lib/mrsk/cli/traefik.rb @@ -9,12 +9,17 @@ class Mrsk::Cli::Traefik < Mrsk::Cli::Base end end + method_option :rolling, type: :boolean, default: false desc "reboot", "Reboot Traefik on servers (stop container, remove container, start new container)" def reboot mutating do - stop - remove_container - boot + on(MRSK.traefik_hosts, in: options[:rolling] ? :sequence : :parallel) do + execute *MRSK.auditor.record("Rebooted traefik"), verbosity: :debug + execute *MRSK.traefik.stop, raise_on_non_zero_exit: false + execute *MRSK.traefik.remove_container + execute *MRSK.registry.login + execute *MRSK.traefik.run, raise_on_non_zero_exit: false + end end end diff --git a/test/cli/traefik_test.rb b/test/cli/traefik_test.rb index a1f661d2..efd00c81 100644 --- a/test/cli/traefik_test.rb +++ b/test/cli/traefik_test.rb @@ -9,11 +9,18 @@ class CliTraefikTest < CliTestCase end test "reboot" do - Mrsk::Cli::Traefik.any_instance.expects(:stop) - Mrsk::Cli::Traefik.any_instance.expects(:remove_container) - Mrsk::Cli::Traefik.any_instance.expects(:boot) + run_command("reboot").tap do |output| + assert_match "docker container stop traefik", output + assert_match "docker container prune --force --filter label=org.opencontainers.image.title=Traefik", output + assert_match "docker login", output + assert_match "docker run --name traefik --detach --restart unless-stopped --publish 80:80 --volume /var/run/docker.sock:/var/run/docker.sock --log-opt max-size=\"10m\" #{Mrsk::Commands::Traefik::DEFAULT_IMAGE} --providers.docker --log.level=\"DEBUG\"", output + end + end - run_command("reboot") + test "reboot --rolling" do + run_command("reboot", "--rolling").tap do |output| + assert_match "Running docker container prune --force --filter label=org.opencontainers.image.title=Traefik on 1.1.1.1", output.lines[2] + end end test "start" do