From 7886c73f5b88582142e30bd98031384763848610 Mon Sep 17 00:00:00 2001 From: Chai Feng Date: Thu, 3 Jul 2025 10:27:47 +0800 Subject: [PATCH] Extract a function `ufw-docker--list-service-ports` --- test/ufw-docker-service.test.sh | 23 ++++++++++++----------- ufw-docker | 9 +++++++-- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/test/ufw-docker-service.test.sh b/test/ufw-docker-service.test.sh index c536d31..0a9125c 100755 --- a/test/ufw-docker-service.test.sh +++ b/test/ufw-docker-service.test.sh @@ -157,8 +157,7 @@ test-ufw-docker--service-allow-a-service-without-ports-published() { @mocktrue grep -E '^[0-9]+(/(tcp|udp))?$' @mock ufw-docker--get-service-id private-web === @stdout abcd1234 @mock ufw-docker--get-service-name private-web === @stdout private-web - @mock docker service inspect private-web \ - --format '{{range .Endpoint.Spec.Ports}}{{.PublishedPort}} {{.TargetPort}}/{{.Protocol}}{{"\n"}}{{end}}' === @stdout "" + @mock ufw-docker--list-service-ports private-web === @stdout "" load-ufw-docker-function ufw-docker--service-allow ufw-docker--service-allow private-web 80/tcp @@ -173,9 +172,7 @@ test-ufw-docker--service-allow-a-service-while-agent-not-running() { @mocktrue grep -E '^[0-9]+(/(tcp|udp))?$' @mock ufw-docker--get-service-id webapp === @stdout abcd1234 @mock ufw-docker--get-service-name webapp === @stdout webapp - @mock docker service inspect webapp \ - --format '{{range .Endpoint.Spec.Ports}}{{.PublishedPort}} {{.TargetPort}}/{{.Protocol}}{{"\n"}}{{end}}' \ - === @stdout "53 53/udp" "80 80/tcp" "8080 8080/tcp" + @mock ufw-docker--list-service-ports webapp === @stdout "53 53/udp" "80 80/tcp" "8080 8080/tcp" @mockfalse docker service inspect ufw-docker-agent load-ufw-docker-function ufw-docker--service-allow @@ -196,9 +193,7 @@ test-ufw-docker--service-allow-a-service-add-new-env() { @mocktrue grep -E '^[0-9]+(/(tcp|udp))?$' @mock ufw-docker--get-service-id webapp === @stdout abcd1234 @mock ufw-docker--get-service-name webapp === @stdout webapp - @mock docker service inspect webapp \ - --format '{{range .Endpoint.Spec.Ports}}{{.PublishedPort}} {{.TargetPort}}/{{.Protocol}}{{"\n"}}{{end}}' \ - === @stdout "53 53/udp" "80 80/tcp" "8080 8080/tcp" + @mock ufw-docker--list-service-ports webapp === @stdout "53 53/udp" "80 80/tcp" "8080 8080/tcp" @mocktrue docker service inspect ufw-docker-agent @mock ufw-docker--get-env-list === @stdout "abcd1234 webapp/80/tcp" @@ -219,9 +214,7 @@ test-ufw-docker--service-allow-a-service-update-a-env() { @mocktrue grep -E '^[0-9]+(/(tcp|udp))?$' @mock ufw-docker--get-service-id webapp === @stdout abcd1234 @mock ufw-docker--get-service-name webapp === @stdout webapp - @mock docker service inspect webapp \ - --format '{{range .Endpoint.Spec.Ports}}{{.PublishedPort}} {{.TargetPort}}/{{.Protocol}}{{"\n"}}{{end}}' \ - === @stdout "53 53/udp" "80 80/tcp" "8080 8080/tcp" + @mock ufw-docker--list-service-ports webapp === @stdout "53 53/udp" "80 80/tcp" "8080 8080/tcp" @mocktrue docker service inspect ufw-docker-agent @mock ufw-docker--get-env-list === @stdout "a_different_id webapp/80/tcp" @@ -288,3 +281,11 @@ test-ufw-docker--service-delete-matches-assert() { --image "${ufw_docker_agent_image}" \ "${ufw_docker_agent}" } + +test-ufw-docker--list-service-ports() { + load-ufw-docker-function ufw-docker--list-service-ports + ufw-docker--list-service-ports foo +} +test-ufw-docker--list-service-ports-assert() { + docker service inspect foo --format '{{range .Endpoint.Spec.Ports}}{{.PublishedPort}} {{.TargetPort}}/{{.Protocol}}{{"\n"}}{{end}}' +} diff --git a/ufw-docker b/ufw-docker index ad0c8e6..012c1be 100755 --- a/ufw-docker +++ b/ufw-docker @@ -196,6 +196,12 @@ function ufw-docker--get-service-name() { docker service inspect "${service_name}" --format "{{.Spec.Name}}" } +function ufw-docker--list-service-ports() { + declare service_name="$1" + docker service inspect "$service_name" \ + --format '{{range .Endpoint.Spec.Ports}}{{.PublishedPort}} {{.TargetPort}}/{{.Protocol}}{{"\n"}}{{end}}' +} + function ufw-docker--service-allow() { declare service_name="$1" declare service_port="$2" @@ -218,8 +224,7 @@ function ufw-docker--service-allow() { service_name="$(ufw-docker--get-service-name "${service_name}")" - exec 9< <(docker service inspect "$service_name" \ - --format '{{range .Endpoint.Spec.Ports}}{{.PublishedPort}} {{.TargetPort}}/{{.Protocol}}{{"\n"}}{{end}}') + exec 9< <(ufw-docker--list-service-ports "$service_name") while read -u 9 -r port target_port; do if [[ "$target_port" = "${service_port}/${service_proto}" ]]; then declare service_env="ufw_public_${service_id}=${service_name}/${port}/${service_proto}"