Filter correctly for empty destinations

An empty destination should only filter container with empty
destination, not pick up all containers.

Fixes: https://github.com/basecamp/kamal/issues/1184
This commit is contained in:
Donal McBreen
2024-11-04 09:17:12 +00:00
parent 685312c9f8
commit e9ba92386c
6 changed files with 70 additions and 62 deletions

View File

@@ -47,7 +47,7 @@ class Kamal::Commands::App < Kamal::Commands::Base
end
def info
docker :ps, *filter_args
docker :ps, *container_filter_args
end
@@ -67,7 +67,7 @@ class Kamal::Commands::App < Kamal::Commands::Base
def list_versions(*docker_args, statuses: nil)
pipe \
docker(:ps, *filter_args(statuses: statuses), *docker_args, "--format", '"{{.Names}}"'),
docker(:ps, *container_filter_args(statuses: statuses), *docker_args, "--format", '"{{.Names}}"'),
extract_version_from_name
end
@@ -91,11 +91,15 @@ class Kamal::Commands::App < Kamal::Commands::Base
end
def latest_container(format:, filters: nil)
docker :ps, "--latest", *format, *filter_args(statuses: ACTIVE_DOCKER_STATUSES), argumentize("--filter", filters)
docker :ps, "--latest", *format, *container_filter_args(statuses: ACTIVE_DOCKER_STATUSES), argumentize("--filter", filters)
end
def filter_args(statuses: nil)
argumentize "--filter", filters(statuses: statuses)
def container_filter_args(statuses: nil)
argumentize "--filter", container_filters(statuses: statuses)
end
def image_filter_args
argumentize "--filter", image_filters
end
def extract_version_from_name
@@ -103,13 +107,17 @@ class Kamal::Commands::App < Kamal::Commands::Base
%(while read line; do echo ${line##{role.container_prefix}-}; done)
end
def filters(statuses: nil)
def container_filters(statuses: nil)
[ "label=service=#{config.service}" ].tap do |filters|
filters << "label=destination=#{config.destination}" if config.destination
filters << "label=destination=#{config.destination}"
filters << "label=role=#{role}" if role
statuses&.each do |status|
filters << "status=#{status}"
end
end
end
def image_filters
[ "label=service=#{config.service}" ]
end
end

View File

@@ -2,7 +2,7 @@ module Kamal::Commands::App::Containers
DOCKER_HEALTH_LOG_FORMAT = "'{{json .State.Health}}'"
def list_containers
docker :container, :ls, "--all", *filter_args
docker :container, :ls, "--all", *container_filter_args
end
def list_container_names
@@ -20,7 +20,7 @@ module Kamal::Commands::App::Containers
end
def remove_containers
docker :container, :prune, "--force", *filter_args
docker :container, :prune, "--force", *container_filter_args
end
def container_health_log(version:)

View File

@@ -4,7 +4,7 @@ module Kamal::Commands::App::Images
end
def remove_images
docker :image, :prune, "--all", "--force", *filter_args
docker :image, :prune, "--all", "--force", *image_filter_args
end
def tag_latest_image