Expand arguments to be more self-explanatory in logs
This commit is contained in:
@@ -10,10 +10,10 @@ class Mrsk::Commands::Accessory < Mrsk::Commands::Base
|
|||||||
def run
|
def run
|
||||||
docker :run,
|
docker :run,
|
||||||
"--name", service_name,
|
"--name", service_name,
|
||||||
"-d",
|
"--detach",
|
||||||
"--restart", "unless-stopped",
|
"--restart", "unless-stopped",
|
||||||
"--log-opt", "max-size=#{MAX_LOG_SIZE}",
|
"--log-opt", "max-size=#{MAX_LOG_SIZE}",
|
||||||
"-p", port,
|
"--publish", port,
|
||||||
*env_args,
|
*env_args,
|
||||||
*volume_args,
|
*volume_args,
|
||||||
*label_args,
|
*label_args,
|
||||||
@@ -35,14 +35,14 @@ class Mrsk::Commands::Accessory < Mrsk::Commands::Base
|
|||||||
|
|
||||||
def logs(since: nil, lines: nil, grep: nil)
|
def logs(since: nil, lines: nil, grep: nil)
|
||||||
pipe \
|
pipe \
|
||||||
docker(:logs, service_name, (" --since #{since}" if since), (" -n #{lines}" if lines), "-t", "2>&1"),
|
docker(:logs, service_name, (" --since #{since}" if since), (" --tail #{lines}" if lines), "--timestamps", "2>&1"),
|
||||||
("grep '#{grep}'" if grep)
|
("grep '#{grep}'" if grep)
|
||||||
end
|
end
|
||||||
|
|
||||||
def follow_logs(grep: nil)
|
def follow_logs(grep: nil)
|
||||||
run_over_ssh \
|
run_over_ssh \
|
||||||
pipe \
|
pipe \
|
||||||
docker(:logs, service_name, "-t", "-n", "10", "-f", "2>&1"),
|
docker(:logs, service_name, "--timestamps", "--tail", "10", "--follow", "2>&1"),
|
||||||
(%(grep "#{grep}") if grep)
|
(%(grep "#{grep}") if grep)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -96,11 +96,11 @@ class Mrsk::Commands::Accessory < Mrsk::Commands::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def remove_container
|
def remove_container
|
||||||
docker :container, :prune, "-f", *service_filter
|
docker :container, :prune, "--force", *service_filter
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_image
|
def remove_image
|
||||||
docker :image, :prune, "-a", "-f", *service_filter
|
docker :image, :prune, "--all", "--force", *service_filter
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ class Mrsk::Commands::App < Mrsk::Commands::Base
|
|||||||
role = config.role(role)
|
role = config.role(role)
|
||||||
|
|
||||||
docker :run,
|
docker :run,
|
||||||
"-d",
|
"--detach",
|
||||||
"--restart unless-stopped",
|
"--restart unless-stopped",
|
||||||
"--log-opt", "max-size=#{MAX_LOG_SIZE}",
|
"--log-opt", "max-size=#{MAX_LOG_SIZE}",
|
||||||
"--name", service_with_version,
|
"--name", service_with_version,
|
||||||
@@ -30,7 +30,7 @@ class Mrsk::Commands::App < Mrsk::Commands::Base
|
|||||||
def logs(since: nil, lines: nil, grep: nil)
|
def logs(since: nil, lines: nil, grep: nil)
|
||||||
pipe \
|
pipe \
|
||||||
current_container_id,
|
current_container_id,
|
||||||
"xargs docker logs#{" --since #{since}" if since}#{" -n #{lines}" if lines} 2>&1",
|
"xargs docker logs#{" --since #{since}" if since}#{" --tail #{lines}" if lines} 2>&1",
|
||||||
("grep '#{grep}'" if grep)
|
("grep '#{grep}'" if grep)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@ class Mrsk::Commands::App < Mrsk::Commands::Base
|
|||||||
run_over_ssh \
|
run_over_ssh \
|
||||||
pipe(
|
pipe(
|
||||||
current_container_id,
|
current_container_id,
|
||||||
"xargs docker logs -t -n 10 -f 2>&1",
|
"xargs docker logs --timestamps --tail 10 --follow 2>&1",
|
||||||
(%(grep "#{grep}") if grep)
|
(%(grep "#{grep}") if grep)
|
||||||
),
|
),
|
||||||
host: host
|
host: host
|
||||||
@@ -72,7 +72,7 @@ class Mrsk::Commands::App < Mrsk::Commands::Base
|
|||||||
|
|
||||||
|
|
||||||
def current_container_id
|
def current_container_id
|
||||||
docker :ps, "-q", *service_filter
|
docker :ps, "--quiet", *service_filter
|
||||||
end
|
end
|
||||||
|
|
||||||
def current_running_version
|
def current_running_version
|
||||||
@@ -97,7 +97,7 @@ class Mrsk::Commands::App < Mrsk::Commands::Base
|
|||||||
|
|
||||||
|
|
||||||
def list_containers
|
def list_containers
|
||||||
docker :container, :ls, "-a", *service_filter
|
docker :container, :ls, "--all", *service_filter
|
||||||
end
|
end
|
||||||
|
|
||||||
def list_container_names
|
def list_container_names
|
||||||
@@ -111,7 +111,7 @@ class Mrsk::Commands::App < Mrsk::Commands::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def remove_containers
|
def remove_containers
|
||||||
docker :container, :prune, "-f", *service_filter
|
docker :container, :prune, "--force", *service_filter
|
||||||
end
|
end
|
||||||
|
|
||||||
def list_images
|
def list_images
|
||||||
@@ -119,7 +119,7 @@ class Mrsk::Commands::App < Mrsk::Commands::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def remove_images
|
def remove_images
|
||||||
docker :image, :prune, "-a", "-f", *service_filter
|
docker :image, :prune, "--all", "--force", *service_filter
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ module Mrsk::Commands
|
|||||||
end
|
end
|
||||||
|
|
||||||
def container_id_for(container_name:)
|
def container_id_for(container_name:)
|
||||||
docker :container, :ls, "-a", "-f", "name=#{container_name}", "-q"
|
docker :container, :ls, "--all", "--filter", "name=#{container_name}", "--quiet"
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ class Mrsk::Commands::Healthcheck < Mrsk::Commands::Base
|
|||||||
web = config.role(:web)
|
web = config.role(:web)
|
||||||
|
|
||||||
docker :run,
|
docker :run,
|
||||||
"-d",
|
"--detach",
|
||||||
"--name", container_name_with_version,
|
"--name", container_name_with_version,
|
||||||
"-p", "#{EXPOSED_PORT}:#{config.healthcheck["port"]}",
|
"--publish", "#{EXPOSED_PORT}:#{config.healthcheck["port"]}",
|
||||||
"--label", "service=#{container_name}",
|
"--label", "service=#{container_name}",
|
||||||
*web.env_args,
|
*web.env_args,
|
||||||
*config.volume_args,
|
*config.volume_args,
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
class Mrsk::Commands::Traefik < Mrsk::Commands::Base
|
class Mrsk::Commands::Traefik < Mrsk::Commands::Base
|
||||||
def run
|
def run
|
||||||
docker :run, "--name traefik",
|
docker :run, "--name traefik",
|
||||||
"-d",
|
"--detach",
|
||||||
"--restart", "unless-stopped",
|
"--restart", "unless-stopped",
|
||||||
"--log-opt", "max-size=#{MAX_LOG_SIZE}",
|
"--log-opt", "max-size=#{MAX_LOG_SIZE}",
|
||||||
"-p 80:80",
|
"--publish", "80:80",
|
||||||
"-v /var/run/docker.sock:/var/run/docker.sock",
|
"--volume", "/var/run/docker.sock:/var/run/docker.sock",
|
||||||
"traefik",
|
"traefik",
|
||||||
"--providers.docker",
|
"--providers.docker",
|
||||||
"--log.level=DEBUG",
|
"--log.level=DEBUG",
|
||||||
@@ -26,23 +26,23 @@ class Mrsk::Commands::Traefik < Mrsk::Commands::Base
|
|||||||
|
|
||||||
def logs(since: nil, lines: nil, grep: nil)
|
def logs(since: nil, lines: nil, grep: nil)
|
||||||
pipe \
|
pipe \
|
||||||
docker(:logs, "traefik", (" --since #{since}" if since), (" -n #{lines}" if lines), "-t", "2>&1"),
|
docker(:logs, "traefik", (" --since #{since}" if since), (" --tail #{lines}" if lines), "--timestamps", "2>&1"),
|
||||||
("grep '#{grep}'" if grep)
|
("grep '#{grep}'" if grep)
|
||||||
end
|
end
|
||||||
|
|
||||||
def follow_logs(host:, grep: nil)
|
def follow_logs(host:, grep: nil)
|
||||||
run_over_ssh pipe(
|
run_over_ssh pipe(
|
||||||
docker(:logs, "traefik", "-t", "-n", "10", "-f", "2>&1"),
|
docker(:logs, "traefik", "--timestamps", "--tail", "10", "--follow", "2>&1"),
|
||||||
(%(grep "#{grep}") if grep)
|
(%(grep "#{grep}") if grep)
|
||||||
).join(" "), host: host
|
).join(" "), host: host
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_container
|
def remove_container
|
||||||
docker :container, :prune, "-f", "--filter", "label=org.opencontainers.image.title=Traefik"
|
docker :container, :prune, "--force", "--filter", "label=org.opencontainers.image.title=Traefik"
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_image
|
def remove_image
|
||||||
docker :image, :prune, "-a", "-f", "--filter", "label=org.opencontainers.image.title=Traefik"
|
docker :image, :prune, "--all", "--force", "--filter", "label=org.opencontainers.image.title=Traefik"
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class CliAccessoryTest < CliTestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "boot" do
|
test "boot" do
|
||||||
assert_match "Running docker run --name app-mysql -d --restart unless-stopped --log-opt max-size=10m -p 3306:3306 -e [REDACTED] -e MYSQL_ROOT_HOST=% --volume $PWD/app-mysql/etc/mysql/my.cnf:/etc/mysql/my.cnf --volume $PWD/app-mysql/data:/var/lib/mysql --label service=app-mysql mysql:5.7 on 1.1.1.3", run_command("boot", "mysql")
|
assert_match "Running docker run --name app-mysql --detach --restart unless-stopped --log-opt max-size=10m --publish 3306:3306 -e [REDACTED] -e MYSQL_ROOT_HOST=% --volume $PWD/app-mysql/etc/mysql/my.cnf:/etc/mysql/my.cnf --volume $PWD/app-mysql/data:/var/lib/mysql --label service=app-mysql mysql:5.7 on 1.1.1.3", run_command("boot", "mysql")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "exec" do
|
test "exec" do
|
||||||
@@ -34,7 +34,7 @@ class CliAccessoryTest < CliTestCase
|
|||||||
test "remove with confirmation" do
|
test "remove with confirmation" do
|
||||||
run_command("remove", "mysql", "-y").tap do |output|
|
run_command("remove", "mysql", "-y").tap do |output|
|
||||||
assert_match /docker container stop app-mysql/, output
|
assert_match /docker container stop app-mysql/, output
|
||||||
assert_match /docker image prune -a -f --filter label=service=app-mysql/, output
|
assert_match /docker image prune --all --force --filter label=service=app-mysql/, output
|
||||||
assert_match /rm -rf app-mysql/, output
|
assert_match /rm -rf app-mysql/, output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ require_relative "cli_test_case"
|
|||||||
|
|
||||||
class CliAppTest < CliTestCase
|
class CliAppTest < CliTestCase
|
||||||
test "boot" do
|
test "boot" do
|
||||||
assert_match /Running docker run -d --restart unless-stopped/, run_command("boot")
|
assert_match /Running docker run --detach --restart unless-stopped/, run_command("boot")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "boot will reboot if same version is already running" do
|
test "boot will reboot if same version is already running" do
|
||||||
@@ -15,8 +15,8 @@ class CliAppTest < CliTestCase
|
|||||||
|
|
||||||
run_command("boot").tap do |output|
|
run_command("boot").tap do |output|
|
||||||
assert_match /Rebooting container with same version already deployed/, output # Can't start what's already running
|
assert_match /Rebooting container with same version already deployed/, output # Can't start what's already running
|
||||||
assert_match /docker ps -q --filter label=service=app \| xargs docker stop/, output # Stop what's running
|
assert_match /docker ps --quiet --filter label=service=app \| xargs docker stop/, output # Stop what's running
|
||||||
assert_match /docker container ls -a -f name=app-999 -q \| xargs docker container rm/, output # Remove old container
|
assert_match /docker container ls --all --filter name=app-999 --quiet \| xargs docker container rm/, output # Remove old container
|
||||||
assert_match /docker run/, output # Start new container
|
assert_match /docker run/, output # Start new container
|
||||||
end
|
end
|
||||||
ensure
|
ensure
|
||||||
@@ -31,7 +31,7 @@ class CliAppTest < CliTestCase
|
|||||||
|
|
||||||
test "stop" do
|
test "stop" do
|
||||||
run_command("stop").tap do |output|
|
run_command("stop").tap do |output|
|
||||||
assert_match /docker ps -q --filter label=service=app \| xargs docker stop/, output
|
assert_match /docker ps --quiet --filter label=service=app \| xargs docker stop/, output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -43,15 +43,15 @@ class CliAppTest < CliTestCase
|
|||||||
|
|
||||||
test "remove" do
|
test "remove" do
|
||||||
run_command("remove").tap do |output|
|
run_command("remove").tap do |output|
|
||||||
assert_match /docker ps -q --filter label=service=app | xargs docker stop/, output
|
assert_match /docker ps --quiet --filter label=service=app | xargs docker stop/, output
|
||||||
assert_match /docker container prune -f --filter label=service=app/, output
|
assert_match /docker container prune --force --filter label=service=app/, output
|
||||||
assert_match /docker image prune -a -f --filter label=service=app/, output
|
assert_match /docker image prune --all --force --filter label=service=app/, output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
test "remove_container" do
|
test "remove_container" do
|
||||||
run_command("remove_container", "1234567").tap do |output|
|
run_command("remove_container", "1234567").tap do |output|
|
||||||
assert_match /docker container ls -a -f name=app-1234567 -q \| xargs docker container rm/, output
|
assert_match /docker container ls --all --filter name=app-1234567 --quiet \| xargs docker container rm/, output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class CliMainTest < CliTestCase
|
|||||||
run_command("details") # Preheat MRSK const
|
run_command("details") # Preheat MRSK const
|
||||||
|
|
||||||
run_command("rollback", "nonsense").tap do |output|
|
run_command("rollback", "nonsense").tap do |output|
|
||||||
assert_match /docker container ls -a --filter label=service=app --format '{{ .Names }}'/, output
|
assert_match /docker container ls --all --filter label=service=app --format '{{ .Names }}'/, output
|
||||||
assert_match /The app version 'nonsense' is not available as a container/, output
|
assert_match /The app version 'nonsense' is not available as a container/, output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -28,21 +28,21 @@ class CliMainTest < CliTestCase
|
|||||||
test "remove with confirmation" do
|
test "remove with confirmation" do
|
||||||
run_command("remove", "-y").tap do |output|
|
run_command("remove", "-y").tap do |output|
|
||||||
assert_match /docker container stop traefik/, output
|
assert_match /docker container stop traefik/, output
|
||||||
assert_match /docker container prune -f --filter label=org.opencontainers.image.title=Traefik/, output
|
assert_match /docker container prune --force --filter label=org.opencontainers.image.title=Traefik/, output
|
||||||
assert_match /docker image prune -a -f --filter label=org.opencontainers.image.title=Traefik/, output
|
assert_match /docker image prune --all --force --filter label=org.opencontainers.image.title=Traefik/, output
|
||||||
|
|
||||||
assert_match /docker ps -q --filter label=service=app | xargs docker stop/, output
|
assert_match /docker ps --quiet --filter label=service=app | xargs docker stop/, output
|
||||||
assert_match /docker container prune -f --filter label=service=app/, output
|
assert_match /docker container prune --force --filter label=service=app/, output
|
||||||
assert_match /docker image prune -a -f --filter label=service=app/, output
|
assert_match /docker image prune --all --force --filter label=service=app/, output
|
||||||
|
|
||||||
assert_match /docker container stop app-mysql/, output
|
assert_match /docker container stop app-mysql/, output
|
||||||
assert_match /docker container prune -f --filter label=service=app-mysql/, output
|
assert_match /docker container prune --force --filter label=service=app-mysql/, output
|
||||||
assert_match /docker image prune -a -f --filter label=service=app-mysql/, output
|
assert_match /docker image prune --all --force --filter label=service=app-mysql/, output
|
||||||
assert_match /rm -rf app-mysql/, output
|
assert_match /rm -rf app-mysql/, output
|
||||||
|
|
||||||
assert_match /docker container stop app-redis/, output
|
assert_match /docker container stop app-redis/, output
|
||||||
assert_match /docker container prune -f --filter label=service=app-redis/, output
|
assert_match /docker container prune --force --filter label=service=app-redis/, output
|
||||||
assert_match /docker image prune -a -f --filter label=service=app-redis/, output
|
assert_match /docker image prune --all --force --filter label=service=app-redis/, output
|
||||||
assert_match /rm -rf app-redis/, output
|
assert_match /rm -rf app-redis/, output
|
||||||
|
|
||||||
assert_match /docker logout/, output
|
assert_match /docker logout/, output
|
||||||
|
|||||||
@@ -49,11 +49,11 @@ class CommandsAccessoryTest < ActiveSupport::TestCase
|
|||||||
|
|
||||||
test "run" do
|
test "run" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker run --name app-mysql -d --restart unless-stopped --log-opt max-size=10m -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secret123 -e MYSQL_ROOT_HOST=% --label service=app-mysql mysql:8.0",
|
"docker run --name app-mysql --detach --restart unless-stopped --log-opt max-size=10m --publish 3306:3306 -e MYSQL_ROOT_PASSWORD=secret123 -e MYSQL_ROOT_HOST=% --label service=app-mysql mysql:8.0",
|
||||||
@mysql.run.join(" ")
|
@mysql.run.join(" ")
|
||||||
|
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker run --name app-redis -d --restart unless-stopped --log-opt max-size=10m -p 6379:6379 -e SOMETHING=else --volume /var/lib/redis:/data --label service=app-redis --label cache=true redis:latest",
|
"docker run --name app-redis --detach --restart unless-stopped --log-opt max-size=10m --publish 6379:6379 -e SOMETHING=else --volume /var/lib/redis:/data --label service=app-redis --label cache=true redis:latest",
|
||||||
@redis.run.join(" ")
|
@redis.run.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -106,29 +106,29 @@ class CommandsAccessoryTest < ActiveSupport::TestCase
|
|||||||
|
|
||||||
test "logs" do
|
test "logs" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker logs app-mysql -t 2>&1",
|
"docker logs app-mysql --timestamps 2>&1",
|
||||||
@mysql.logs.join(" ")
|
@mysql.logs.join(" ")
|
||||||
|
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker logs app-mysql --since 5m -n 100 -t 2>&1 | grep 'thing'",
|
"docker logs app-mysql --since 5m --tail 100 --timestamps 2>&1 | grep 'thing'",
|
||||||
@mysql.logs(since: "5m", lines: 100, grep: "thing").join(" ")
|
@mysql.logs(since: "5m", lines: 100, grep: "thing").join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "follow logs" do
|
test "follow logs" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"ssh -t root@1.1.1.5 'docker logs app-mysql -t -n 10 -f 2>&1'",
|
"ssh -t root@1.1.1.5 'docker logs app-mysql --timestamps --tail 10 --follow 2>&1'",
|
||||||
@mysql.follow_logs
|
@mysql.follow_logs
|
||||||
end
|
end
|
||||||
|
|
||||||
test "remove container" do
|
test "remove container" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker container prune -f --filter label=service=app-mysql",
|
"docker container prune --force --filter label=service=app-mysql",
|
||||||
@mysql.remove_container.join(" ")
|
@mysql.remove_container.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "remove image" do
|
test "remove image" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker image prune -a -f --filter label=service=app-mysql",
|
"docker image prune --all --force --filter label=service=app-mysql",
|
||||||
@mysql.remove_image.join(" ")
|
@mysql.remove_image.join(" ")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|||||||
|
|
||||||
test "run" do
|
test "run" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker run -d --restart unless-stopped --log-opt max-size=10m --name app-999 -e RAILS_MASTER_KEY=456 --label service=app --label role=web --label traefik.http.routers.app.rule='PathPrefix(`/`)' --label traefik.http.services.app.loadbalancer.healthcheck.path=/up --label traefik.http.services.app.loadbalancer.healthcheck.interval=1s --label traefik.http.middlewares.app.retry.attempts=3 --label traefik.http.middlewares.app.retry.initialinterval=500ms dhh/app:999",
|
"docker run --detach --restart unless-stopped --log-opt max-size=10m --name app-999 -e RAILS_MASTER_KEY=456 --label service=app --label role=web --label traefik.http.routers.app.rule='PathPrefix(`/`)' --label traefik.http.services.app.loadbalancer.healthcheck.path=/up --label traefik.http.services.app.loadbalancer.healthcheck.interval=1s --label traefik.http.middlewares.app.retry.attempts=3 --label traefik.http.middlewares.app.retry.initialinterval=500ms dhh/app:999",
|
||||||
@app.run.join(" ")
|
@app.run.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|||||||
@config[:volumes] = ["/local/path:/container/path" ]
|
@config[:volumes] = ["/local/path:/container/path" ]
|
||||||
|
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker run -d --restart unless-stopped --log-opt max-size=10m --name app-999 -e RAILS_MASTER_KEY=456 --volume /local/path:/container/path --label service=app --label role=web --label traefik.http.routers.app.rule='PathPrefix(`/`)' --label traefik.http.services.app.loadbalancer.healthcheck.path=/up --label traefik.http.services.app.loadbalancer.healthcheck.interval=1s --label traefik.http.middlewares.app.retry.attempts=3 --label traefik.http.middlewares.app.retry.initialinterval=500ms dhh/app:999",
|
"docker run --detach --restart unless-stopped --log-opt max-size=10m --name app-999 -e RAILS_MASTER_KEY=456 --volume /local/path:/container/path --label service=app --label role=web --label traefik.http.routers.app.rule='PathPrefix(`/`)' --label traefik.http.services.app.loadbalancer.healthcheck.path=/up --label traefik.http.services.app.loadbalancer.healthcheck.interval=1s --label traefik.http.middlewares.app.retry.attempts=3 --label traefik.http.middlewares.app.retry.initialinterval=500ms dhh/app:999",
|
||||||
@app.run.join(" ")
|
@app.run.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|||||||
@config[:healthcheck] = { "path" => "/healthz" }
|
@config[:healthcheck] = { "path" => "/healthz" }
|
||||||
|
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker run -d --restart unless-stopped --log-opt max-size=10m --name app-999 -e RAILS_MASTER_KEY=456 --label service=app --label role=web --label traefik.http.routers.app.rule='PathPrefix(`/`)' --label traefik.http.services.app.loadbalancer.healthcheck.path=/healthz --label traefik.http.services.app.loadbalancer.healthcheck.interval=1s --label traefik.http.middlewares.app.retry.attempts=3 --label traefik.http.middlewares.app.retry.initialinterval=500ms dhh/app:999",
|
"docker run --detach --restart unless-stopped --log-opt max-size=10m --name app-999 -e RAILS_MASTER_KEY=456 --label service=app --label role=web --label traefik.http.routers.app.rule='PathPrefix(`/`)' --label traefik.http.services.app.loadbalancer.healthcheck.path=/healthz --label traefik.http.services.app.loadbalancer.healthcheck.interval=1s --label traefik.http.middlewares.app.retry.attempts=3 --label traefik.http.middlewares.app.retry.initialinterval=500ms dhh/app:999",
|
||||||
@app.run.join(" ")
|
@app.run.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|||||||
|
|
||||||
test "stop" do
|
test "stop" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker ps -q --filter label=service=app | xargs docker stop",
|
"docker ps --quiet --filter label=service=app | xargs docker stop",
|
||||||
@app.stop.join(" ")
|
@app.stop.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -55,38 +55,38 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|||||||
|
|
||||||
test "logs" do
|
test "logs" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker ps -q --filter label=service=app | xargs docker logs 2>&1",
|
"docker ps --quiet --filter label=service=app | xargs docker logs 2>&1",
|
||||||
@app.logs.join(" ")
|
@app.logs.join(" ")
|
||||||
|
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker ps -q --filter label=service=app | xargs docker logs --since 5m 2>&1",
|
"docker ps --quiet --filter label=service=app | xargs docker logs --since 5m 2>&1",
|
||||||
@app.logs(since: "5m").join(" ")
|
@app.logs(since: "5m").join(" ")
|
||||||
|
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker ps -q --filter label=service=app | xargs docker logs -n 100 2>&1",
|
"docker ps --quiet --filter label=service=app | xargs docker logs --tail 100 2>&1",
|
||||||
@app.logs(lines: "100").join(" ")
|
@app.logs(lines: "100").join(" ")
|
||||||
|
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker ps -q --filter label=service=app | xargs docker logs --since 5m -n 100 2>&1",
|
"docker ps --quiet --filter label=service=app | xargs docker logs --since 5m --tail 100 2>&1",
|
||||||
@app.logs(since: "5m", lines: "100").join(" ")
|
@app.logs(since: "5m", lines: "100").join(" ")
|
||||||
|
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker ps -q --filter label=service=app | xargs docker logs 2>&1 | grep 'my-id'",
|
"docker ps --quiet --filter label=service=app | xargs docker logs 2>&1 | grep 'my-id'",
|
||||||
@app.logs(grep: "my-id").join(" ")
|
@app.logs(grep: "my-id").join(" ")
|
||||||
|
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker ps -q --filter label=service=app | xargs docker logs --since 5m 2>&1 | grep 'my-id'",
|
"docker ps --quiet --filter label=service=app | xargs docker logs --since 5m 2>&1 | grep 'my-id'",
|
||||||
@app.logs(since: "5m", grep: "my-id").join(" ")
|
@app.logs(since: "5m", grep: "my-id").join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "follow logs" do
|
test "follow logs" do
|
||||||
@app.stub(:run_over_ssh, ->(cmd, host:) { cmd.join(" ") }) do
|
@app.stub(:run_over_ssh, ->(cmd, host:) { cmd.join(" ") }) do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker ps -q --filter label=service=app | xargs docker logs -t -n 10 -f 2>&1",
|
"docker ps --quiet --filter label=service=app | xargs docker logs --timestamps --tail 10 --follow 2>&1",
|
||||||
@app.follow_logs(host: "app-1")
|
@app.follow_logs(host: "app-1")
|
||||||
|
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker ps -q --filter label=service=app | xargs docker logs -t -n 10 -f 2>&1 | grep \"Completed\"",
|
"docker ps --quiet --filter label=service=app | xargs docker logs --timestamps --tail 10 --follow 2>&1 | grep \"Completed\"",
|
||||||
@app.follow_logs(host: "app-1", grep: "Completed")
|
@app.follow_logs(host: "app-1", grep: "Completed")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -145,13 +145,13 @@ class CommandsAppTest < ActiveSupport::TestCase
|
|||||||
|
|
||||||
test "current_container_id" do
|
test "current_container_id" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker ps -q --filter label=service=app",
|
"docker ps --quiet --filter label=service=app",
|
||||||
@app.current_container_id.join(" ")
|
@app.current_container_id.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "container_id_for" do
|
test "container_id_for" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker container ls -a -f name=app-999 -q",
|
"docker container ls --all --filter name=app-999 --quiet",
|
||||||
@app.container_id_for(container_name: "app-999").join(" ")
|
@app.container_id_for(container_name: "app-999").join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class CommandsHealthcheckTest < ActiveSupport::TestCase
|
|||||||
|
|
||||||
test "run" do
|
test "run" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker run -d --name healthcheck-app-123 -p 3999:3000 --label service=healthcheck-app dhh/app:123",
|
"docker run --detach --name healthcheck-app-123 --publish 3999:3000 --label service=healthcheck-app dhh/app:123",
|
||||||
new_command.run.join(" ")
|
new_command.run.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ class CommandsHealthcheckTest < ActiveSupport::TestCase
|
|||||||
@config[:healthcheck] = { "port" => 3001 }
|
@config[:healthcheck] = { "port" => 3001 }
|
||||||
|
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker run -d --name healthcheck-app-123 -p 3999:3001 --label service=healthcheck-app dhh/app:123",
|
"docker run --detach --name healthcheck-app-123 --publish 3999:3001 --label service=healthcheck-app dhh/app:123",
|
||||||
new_command.run.join(" ")
|
new_command.run.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -38,13 +38,13 @@ class CommandsHealthcheckTest < ActiveSupport::TestCase
|
|||||||
|
|
||||||
test "stop" do
|
test "stop" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker container ls -a -f name=healthcheck-app -q | xargs docker stop",
|
"docker container ls --all --filter name=healthcheck-app --quiet | xargs docker stop",
|
||||||
new_command.stop.join(" ")
|
new_command.stop.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "remove" do
|
test "remove" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker container ls -a -f name=healthcheck-app -q | xargs docker container rm",
|
"docker container ls --all --filter name=healthcheck-app --quiet | xargs docker container rm",
|
||||||
new_command.remove.join(" ")
|
new_command.remove.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class CommandsTraefikTest < ActiveSupport::TestCase
|
|||||||
|
|
||||||
test "run" do
|
test "run" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker run --name traefik -d --restart unless-stopped --log-opt max-size=10m -p 80:80 -v /var/run/docker.sock:/var/run/docker.sock traefik --providers.docker --log.level=DEBUG --accesslog.format json --metrics.prometheus.buckets 0.1,0.3,1.2,5.0",
|
"docker run --name traefik --detach --restart unless-stopped --log-opt max-size=10m --publish 80:80 --volume /var/run/docker.sock:/var/run/docker.sock traefik --providers.docker --log.level=DEBUG --accesslog.format json --metrics.prometheus.buckets 0.1,0.3,1.2,5.0",
|
||||||
new_command.run.join(" ")
|
new_command.run.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -34,49 +34,49 @@ class CommandsTraefikTest < ActiveSupport::TestCase
|
|||||||
|
|
||||||
test "traefik logs" do
|
test "traefik logs" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker logs traefik -t 2>&1",
|
"docker logs traefik --timestamps 2>&1",
|
||||||
new_command.logs.join(" ")
|
new_command.logs.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "traefik logs since 2h" do
|
test "traefik logs since 2h" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker logs traefik --since 2h -t 2>&1",
|
"docker logs traefik --since 2h --timestamps 2>&1",
|
||||||
new_command.logs(since: '2h').join(" ")
|
new_command.logs(since: '2h').join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "traefik logs last 10 lines" do
|
test "traefik logs last 10 lines" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker logs traefik -n 10 -t 2>&1",
|
"docker logs traefik --tail 10 --timestamps 2>&1",
|
||||||
new_command.logs(lines: 10).join(" ")
|
new_command.logs(lines: 10).join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "traefik logs with grep hello!" do
|
test "traefik logs with grep hello!" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker logs traefik -t 2>&1 | grep 'hello!'",
|
"docker logs traefik --timestamps 2>&1 | grep 'hello!'",
|
||||||
new_command.logs(grep: 'hello!').join(" ")
|
new_command.logs(grep: 'hello!').join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "traefik remove container" do
|
test "traefik remove container" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker container prune -f --filter label=org.opencontainers.image.title=Traefik",
|
"docker container prune --force --filter label=org.opencontainers.image.title=Traefik",
|
||||||
new_command.remove_container.join(" ")
|
new_command.remove_container.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "traefik remove image" do
|
test "traefik remove image" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"docker image prune -a -f --filter label=org.opencontainers.image.title=Traefik",
|
"docker image prune --all --force --filter label=org.opencontainers.image.title=Traefik",
|
||||||
new_command.remove_image.join(" ")
|
new_command.remove_image.join(" ")
|
||||||
end
|
end
|
||||||
|
|
||||||
test "traefik follow logs" do
|
test "traefik follow logs" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"ssh -t root@1.1.1.1 'docker logs traefik -t -n 10 -f 2>&1'",
|
"ssh -t root@1.1.1.1 'docker logs traefik --timestamps --tail 10 --follow 2>&1'",
|
||||||
new_command.follow_logs(host: @config[:servers].first)
|
new_command.follow_logs(host: @config[:servers].first)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "traefik follow logs with grep hello!" do
|
test "traefik follow logs with grep hello!" do
|
||||||
assert_equal \
|
assert_equal \
|
||||||
"ssh -t root@1.1.1.1 'docker logs traefik -t -n 10 -f 2>&1 | grep \"hello!\"'",
|
"ssh -t root@1.1.1.1 'docker logs traefik --timestamps --tail 10 --follow 2>&1 | grep \"hello!\"'",
|
||||||
new_command.follow_logs(host: @config[:servers].first, grep: 'hello!')
|
new_command.follow_logs(host: @config[:servers].first, grep: 'hello!')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user