Merge stop and stop_stale_containers
This commit is contained in:
@@ -48,32 +48,18 @@ class Mrsk::Cli::App < Mrsk::Cli::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
desc "stop", "Stop app container on servers"
|
desc "stop", "Stop app container on servers"
|
||||||
|
option :only_old, aliases: "-o", type: :boolean, default: false, desc: "Stop only old containers"
|
||||||
def stop
|
def stop
|
||||||
with_lock do
|
with_lock do
|
||||||
MRSK.hosts.each do |host|
|
MRSK.hosts.each do |host|
|
||||||
roles = MRSK.roles_on(host)
|
roles = MRSK.roles_on(host)
|
||||||
|
|
||||||
roles.each do |role|
|
roles.each do |role|
|
||||||
on(host) { execute *MRSK.auditor(role: role).record("Stopped app"), verbosity: :debug }
|
audit_record = options[:only_old] ? "Stopped old containers" : "Stopped app"
|
||||||
all_versions = list_versions(host: host, role: role)
|
on(host) { execute *MRSK.auditor(role: role).record(audit_record), verbosity: :debug }
|
||||||
all_versions.each do |version|
|
|
||||||
on(host) { execute *MRSK.app(role: role).stop(version: version), raise_on_non_zero_exit: false }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
desc "stop_stale_containers", "Stop all app stale containers"
|
versions = list_versions(host: host, role: role, only_old: options[:only_old])
|
||||||
def stop_stale_containers
|
versions.each do |version|
|
||||||
with_lock do
|
|
||||||
MRSK.hosts.each do |host|
|
|
||||||
roles = MRSK.roles_on(host)
|
|
||||||
|
|
||||||
roles.each do |role|
|
|
||||||
stale_versions = list_versions(host: host, role: role).drop(1)
|
|
||||||
stale_versions.each do |version|
|
|
||||||
say "Stopping stale container with version #{version}", :red
|
|
||||||
on(host) { execute *MRSK.app(role: role).stop(version: version), raise_on_non_zero_exit: false }
|
on(host) { execute *MRSK.app(role: role).stop(version: version), raise_on_non_zero_exit: false }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -258,10 +244,10 @@ class Mrsk::Cli::App < Mrsk::Cli::Base
|
|||||||
list_versions(host: host, status: :running).shift.presence
|
list_versions(host: host, status: :running).shift.presence
|
||||||
end
|
end
|
||||||
|
|
||||||
def list_versions(host:, role: nil, status: nil)
|
def list_versions(host:, role: nil, status: nil, only_old: false)
|
||||||
versions = nil
|
versions = nil
|
||||||
on(host) { versions = capture_with_info(*MRSK.app(role: role).list_versions(status: status), raise_on_non_zero_exit: false).split("\n").map(&:strip) }
|
on(host) { versions = capture_with_info(*MRSK.app(role: role).list_versions(status: status), raise_on_non_zero_exit: false).split("\n").map(&:strip) }
|
||||||
versions
|
only_old ? versions.drop(1) : versions
|
||||||
end
|
end
|
||||||
|
|
||||||
def version_or_latest
|
def version_or_latest
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ class Mrsk::Cli::Main < Mrsk::Cli::Base
|
|||||||
say "Ensure app can pass healthcheck...", :magenta
|
say "Ensure app can pass healthcheck...", :magenta
|
||||||
invoke "mrsk:cli:healthcheck:perform", [], invoke_options
|
invoke "mrsk:cli:healthcheck:perform", [], invoke_options
|
||||||
|
|
||||||
say "Stop stale containers...", :magenta
|
say "Stop old containers...", :magenta
|
||||||
invoke "mrsk:cli:app:stop_stale_containers", [], invoke_options
|
invoke "mrsk:cli:app:stop", [], invoke_options.merge({ "only_old" => true })
|
||||||
|
|
||||||
invoke "mrsk:cli:app:boot", [], invoke_options
|
invoke "mrsk:cli:app:boot", [], invoke_options
|
||||||
|
|
||||||
@@ -68,8 +68,8 @@ class Mrsk::Cli::Main < Mrsk::Cli::Base
|
|||||||
say "Ensure app can pass healthcheck...", :magenta
|
say "Ensure app can pass healthcheck...", :magenta
|
||||||
invoke "mrsk:cli:healthcheck:perform", [], invoke_options
|
invoke "mrsk:cli:healthcheck:perform", [], invoke_options
|
||||||
|
|
||||||
say "Stop stale containers...", :magenta
|
say "Stop old containers...", :magenta
|
||||||
invoke "mrsk:cli:app:stop_stale_containers", [], invoke_options
|
invoke "mrsk:cli:app:stop", [], invoke_options.merge({ "only_old" => true })
|
||||||
|
|
||||||
invoke "mrsk:cli:app:boot", [], invoke_options
|
invoke "mrsk:cli:app:boot", [], invoke_options
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -48,13 +48,12 @@ class CliAppTest < CliTestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
test "stop_stale_containers" do
|
test "stop only old containers" do
|
||||||
SSHKit::Backend::Abstract.any_instance.expects(:capture_with_info)
|
SSHKit::Backend::Abstract.any_instance.expects(:capture_with_info)
|
||||||
.with(:docker, :ps, "--filter", "label=service=app", "--filter", "label=role=web", "--format", "\"{{.Names}}\"", "|", "grep -oE \"\\-[^-]+$\"", "|", "cut -c 2-", raise_on_non_zero_exit: false)
|
.with(:docker, :ps, "--filter", "label=service=app", "--filter", "label=role=web", "--format", "\"{{.Names}}\"", "|", "grep -oE \"\\-[^-]+$\"", "|", "cut -c 2-", raise_on_non_zero_exit: false)
|
||||||
.returns("12345678\n87654321")
|
.returns("12345678\n87654321")
|
||||||
|
|
||||||
run_command("stop_stale_containers").tap do |output|
|
run_command("stop", '--only-old').tap do |output|
|
||||||
assert_match /Stopping stale container with version 87654321/, output
|
|
||||||
assert_match /#{Regexp.escape("docker container ls --all --filter name=^app-web-87654321$ --quiet | xargs docker stop")}/, output
|
assert_match /#{Regexp.escape("docker container ls --all --filter name=^app-web-87654321$ --quiet | xargs docker stop")}/, output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class CliMainTest < CliTestCase
|
|||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:build:deliver", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:build:deliver", [], invoke_options)
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:traefik:boot", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:traefik:boot", [], invoke_options)
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:healthcheck:perform", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:healthcheck:perform", [], invoke_options)
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:stop_stale_containers", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:stop", [], invoke_options.merge({ "only_old" => true }))
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:boot", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:boot", [], invoke_options)
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:prune:all", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:prune:all", [], invoke_options)
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ class CliMainTest < CliTestCase
|
|||||||
assert_match /Build and push app image/, output
|
assert_match /Build and push app image/, output
|
||||||
assert_match /Ensure Traefik is running/, output
|
assert_match /Ensure Traefik is running/, output
|
||||||
assert_match /Ensure app can pass healthcheck/, output
|
assert_match /Ensure app can pass healthcheck/, output
|
||||||
assert_match /Stop stale containers/, output
|
assert_match /Stop old containers/, output
|
||||||
assert_match /Prune old containers and images/, output
|
assert_match /Prune old containers and images/, output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -40,7 +40,7 @@ class CliMainTest < CliTestCase
|
|||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:build:pull", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:build:pull", [], invoke_options)
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:traefik:boot", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:traefik:boot", [], invoke_options)
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:healthcheck:perform", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:healthcheck:perform", [], invoke_options)
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:stop_stale_containers", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:stop", [], invoke_options.merge({ "only_old" => true }))
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:boot", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:boot", [], invoke_options)
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:prune:all", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:prune:all", [], invoke_options)
|
||||||
|
|
||||||
@@ -51,7 +51,7 @@ class CliMainTest < CliTestCase
|
|||||||
assert_match /Pull app image/, output
|
assert_match /Pull app image/, output
|
||||||
assert_match /Ensure Traefik is running/, output
|
assert_match /Ensure Traefik is running/, output
|
||||||
assert_match /Ensure app can pass healthcheck/, output
|
assert_match /Ensure app can pass healthcheck/, output
|
||||||
assert_match /Stop stale containers/, output
|
assert_match /Stop old containers/, output
|
||||||
assert_match /Prune old containers and images/, output
|
assert_match /Prune old containers and images/, output
|
||||||
assert_match /Releasing the deploy lock/, output
|
assert_match /Releasing the deploy lock/, output
|
||||||
end
|
end
|
||||||
@@ -62,7 +62,7 @@ class CliMainTest < CliTestCase
|
|||||||
|
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:build:deliver", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:build:deliver", [], invoke_options)
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:healthcheck:perform", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:healthcheck:perform", [], invoke_options)
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:stop_stale_containers", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:stop", [], invoke_options.merge({ "only_old" => true }))
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:boot", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:boot", [], invoke_options)
|
||||||
|
|
||||||
run_command("redeploy").tap do |output|
|
run_command("redeploy").tap do |output|
|
||||||
@@ -76,7 +76,7 @@ class CliMainTest < CliTestCase
|
|||||||
|
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:build:pull", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:build:pull", [], invoke_options)
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:healthcheck:perform", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:healthcheck:perform", [], invoke_options)
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:stop_stale_containers", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:stop", [], invoke_options.merge({ "only_old" => true }))
|
||||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:boot", [], invoke_options)
|
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:boot", [], invoke_options)
|
||||||
|
|
||||||
run_command("redeploy", "--skip_push").tap do |output|
|
run_command("redeploy", "--skip_push").tap do |output|
|
||||||
|
|||||||
Reference in New Issue
Block a user