Remove only specific container needed for rebooting
This commit is contained in:
@@ -21,10 +21,12 @@ class Mrsk::Cli::App < Mrsk::Cli::Base
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "reboot", "Reboot app on host (stop container, remove containers, start new container)"
|
desc "reboot", "Reboot app on host (stop container, remove container, start new container with latest image)"
|
||||||
def reboot
|
def reboot
|
||||||
|
old_version = current_running_version
|
||||||
|
|
||||||
stop
|
stop
|
||||||
remove_containers
|
remove_container old_version
|
||||||
boot
|
boot
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -147,7 +149,12 @@ class Mrsk::Cli::App < Mrsk::Cli::Base
|
|||||||
remove_images
|
remove_images
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "remove_containers", "Remove app containers from servers"
|
desc "remove_container [VERSION]", "Remove app container with given version from servers"
|
||||||
|
def remove_container(version)
|
||||||
|
on(MRSK.hosts) { execute *MRSK.app.remove_container(version: version) }
|
||||||
|
end
|
||||||
|
|
||||||
|
desc "remove_containers", "Remove all app containers from servers"
|
||||||
def remove_containers
|
def remove_containers
|
||||||
on(MRSK.hosts) { execute *MRSK.app.remove_containers }
|
on(MRSK.hosts) { execute *MRSK.app.remove_containers }
|
||||||
end
|
end
|
||||||
@@ -184,9 +191,9 @@ class Mrsk::Cli::App < Mrsk::Cli::Base
|
|||||||
version
|
version
|
||||||
end
|
end
|
||||||
|
|
||||||
def current_running_version(host:)
|
def current_running_version(host: MRSK.primary_host)
|
||||||
version = nil
|
version = nil
|
||||||
on(host) { version = capture_with_info(*MRSK.app.current_running_version).strip }
|
on(host) { version = capture_with_info(*MRSK.app.current_running_version).strip }
|
||||||
version
|
version.presence
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class Mrsk::Commands::App < Mrsk::Commands::Base
|
|||||||
docker :run,
|
docker :run,
|
||||||
"-d",
|
"-d",
|
||||||
"--restart unless-stopped",
|
"--restart unless-stopped",
|
||||||
"--name", config.service_with_version,
|
"--name", service_with_version,
|
||||||
*rails_master_key_arg,
|
*rails_master_key_arg,
|
||||||
*role.env_args,
|
*role.env_args,
|
||||||
*config.volume_args,
|
*config.volume_args,
|
||||||
@@ -20,7 +20,7 @@ class Mrsk::Commands::App < Mrsk::Commands::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def start(version: config.version)
|
def start(version: config.version)
|
||||||
docker :start, "#{config.service}-#{version}"
|
docker :start, service_with_version(version)
|
||||||
end
|
end
|
||||||
|
|
||||||
def current_container_id
|
def current_container_id
|
||||||
@@ -84,6 +84,12 @@ class Mrsk::Commands::App < Mrsk::Commands::Base
|
|||||||
docker :container, :ls, "-a", *service_filter
|
docker :container, :ls, "-a", *service_filter
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def remove_container(version:)
|
||||||
|
pipe \
|
||||||
|
container_id_for(container_name: service_with_version(version)),
|
||||||
|
docker(:container, :rm)
|
||||||
|
end
|
||||||
|
|
||||||
def remove_containers
|
def remove_containers
|
||||||
docker :container, :prune, "-f", *service_filter
|
docker :container, :prune, "-f", *service_filter
|
||||||
end
|
end
|
||||||
@@ -97,6 +103,14 @@ class Mrsk::Commands::App < Mrsk::Commands::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
def service_with_version(version = nil)
|
||||||
|
if version
|
||||||
|
"#{config.service}-#{version}"
|
||||||
|
else
|
||||||
|
config.service_with_version
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def service_filter
|
def service_filter
|
||||||
[ "--filter", "label=service=#{config.service}" ]
|
[ "--filter", "label=service=#{config.service}" ]
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
module Mrsk::Commands::Concerns
|
module Mrsk::Commands::Concerns
|
||||||
module Repository
|
module Repository
|
||||||
|
def container_id_for(container_name:)
|
||||||
|
docker :container, :ls, "-a", "-f", "name=#{container_name}", "-q"
|
||||||
|
end
|
||||||
|
|
||||||
def current_running_version
|
def current_running_version
|
||||||
# FIXME: Find more graceful way to extract the version from "app-version" than using sed and tail!
|
# FIXME: Find more graceful way to extract the version from "app-version" than using sed and tail!
|
||||||
pipe \
|
pipe \
|
||||||
|
|||||||
@@ -5,11 +5,24 @@ class CliAppTest < CliTestCase
|
|||||||
assert_match /Running docker run -d --restart unless-stopped/, run_command("boot")
|
assert_match /Running docker run -d --restart unless-stopped/, run_command("boot")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "reboot" do
|
test "reboot to default version" do
|
||||||
run_command("reboot").tap do |output|
|
run_command("reboot").tap do |output|
|
||||||
assert_match /docker stop/, output
|
assert_match /docker ps --filter label=service=app/, output # Find current container
|
||||||
assert_match /docker container prune/, output
|
assert_match /docker stop/, output # Stop old container
|
||||||
assert_match /docker run -d --restart unless-stopped/, output
|
assert_match /docker container rm/, output # Remove old container
|
||||||
|
assert_match /docker run -d --restart unless-stopped .* dhh\/app:999/, output # Start new container
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "reboot to specific version" do
|
||||||
|
run_command("reboot", "--version", "456").tap do |output|
|
||||||
|
assert_match /docker run -d --restart unless-stopped .* dhh\/app:456/, output
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "remove_container" do
|
||||||
|
run_command("remove_container", "1234567").tap do |output|
|
||||||
|
assert_match /docker container ls -a -f name=app-1234567 -q | docker container rm/, output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user