From dee138bc4b4023cfb5690d102fe2cf5f04a3b049 Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Thu, 6 Nov 2025 07:15:05 +0100 Subject: [PATCH] Fix typing info. (#1183) --- changelogs/fragments/typing.yml | 2 ++ plugins/connection/docker.py | 6 +++--- plugins/connection/nsenter.py | 10 +++++----- plugins/module_utils/_compose_v2.py | 4 ++-- plugins/modules/docker_compose_v2_exec.py | 6 +++--- plugins/modules/docker_compose_v2_run.py | 8 ++++---- plugins/modules/docker_swarm_service.py | 4 ++-- 7 files changed, 21 insertions(+), 19 deletions(-) create mode 100644 changelogs/fragments/typing.yml diff --git a/changelogs/fragments/typing.yml b/changelogs/fragments/typing.yml new file mode 100644 index 00000000..88c4bda6 --- /dev/null +++ b/changelogs/fragments/typing.yml @@ -0,0 +1,2 @@ +bugfixes: + - "docker_compose_v2_run - when ``detach=true``, ensure that the returned container ID is not a bytes string (https://github.com/ansible-collections/community.docker/pull/1183)." diff --git a/plugins/connection/docker.py b/plugins/connection/docker.py index cc0cf461..99b8f14f 100644 --- a/plugins/connection/docker.py +++ b/plugins/connection/docker.py @@ -228,12 +228,12 @@ class Connection(ConnectionBase): stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) as p: - out, err = p.communicate() - out = to_text(out, errors="surrogate_or_strict") + out_b, err_b = p.communicate() + out = to_text(out_b, errors="surrogate_or_strict") if p.returncode != 0: display.warning( - f"unable to retrieve default user from docker container: {out} {to_text(err)}" + f"unable to retrieve default user from docker container: {out} {to_text(err_b)}" ) self._container_user_cache[container] = None return None diff --git a/plugins/connection/nsenter.py b/plugins/connection/nsenter.py index 41833649..e4e98ac0 100644 --- a/plugins/connection/nsenter.py +++ b/plugins/connection/nsenter.py @@ -116,9 +116,9 @@ class Connection(ConnectionBase): ] cmd_parts = nsenter_cmd_parts + [cmd] - cmd = to_bytes(" ".join(cmd_parts)) + cmd_b = to_bytes(" ".join(cmd_parts)) - display.vvv(f"EXEC {to_text(cmd)}", host=self._play_context.remote_addr) + display.vvv(f"EXEC {to_text(cmd_b)}", host=self._play_context.remote_addr) display.debug("opening command with Popen()") master = None @@ -137,9 +137,9 @@ class Connection(ConnectionBase): display.debug(f"Unable to open pty: {e}") with subprocess.Popen( - cmd, - shell=isinstance(cmd, (str, bytes)), - executable=executable if isinstance(cmd, (str, bytes)) else None, + cmd_b, + shell=True, + executable=executable, cwd=self.cwd, stdin=stdin, stdout=subprocess.PIPE, diff --git a/plugins/module_utils/_compose_v2.py b/plugins/module_utils/_compose_v2.py index 3953746b..6b61ebaf 100644 --- a/plugins/module_utils/_compose_v2.py +++ b/plugins/module_utils/_compose_v2.py @@ -556,8 +556,8 @@ def parse_events( stderr_lines = stderr.splitlines() if stderr_lines and stderr_lines[-1] == b"": del stderr_lines[-1] - for index, line in enumerate(stderr_lines): - line = to_text(line.strip()) + for index, line_b in enumerate(stderr_lines): + line = to_text(line_b.strip()) if not line: continue warn_missing_dry_run_prefix = False diff --git a/plugins/modules/docker_compose_v2_exec.py b/plugins/modules/docker_compose_v2_exec.py index 1149bb91..1ab738a1 100644 --- a/plugins/modules/docker_compose_v2_exec.py +++ b/plugins/modules/docker_compose_v2_exec.py @@ -250,11 +250,11 @@ class ExecManager(BaseComposeManager): kwargs["data"] = self.stdin.encode("utf-8") if self.detach: kwargs["check_rc"] = True - rc, stdout, stderr = self.client.call_cli(*args, **kwargs) + rc, stdout_b, stderr_b = self.client.call_cli(*args, **kwargs) if self.detach: return {} - stdout = to_text(stdout) - stderr = to_text(stderr) + stdout = to_text(stdout_b) + stderr = to_text(stderr_b) if self.strip_empty_ends: stdout = stdout.rstrip("\r\n") stderr = stderr.rstrip("\r\n") diff --git a/plugins/modules/docker_compose_v2_run.py b/plugins/modules/docker_compose_v2_run.py index 39cc5e38..51da9f55 100644 --- a/plugins/modules/docker_compose_v2_run.py +++ b/plugins/modules/docker_compose_v2_run.py @@ -368,13 +368,13 @@ class ExecManager(BaseComposeManager): kwargs["data"] = self.stdin.encode("utf-8") if self.detach: kwargs["check_rc"] = True - rc, stdout, stderr = self.client.call_cli(*args, **kwargs) + rc, stdout_b, stderr_b = self.client.call_cli(*args, **kwargs) if self.detach: return { - "container_id": stdout.strip(), + "container_id": to_text(stdout_b.strip()), } - stdout = to_text(stdout) - stderr = to_text(stderr) + stdout = to_text(stdout_b) + stderr = to_text(stderr_b) if self.strip_empty_ends: stdout = stdout.rstrip("\r\n") stderr = stderr.rstrip("\r\n") diff --git a/plugins/modules/docker_swarm_service.py b/plugins/modules/docker_swarm_service.py index ec1d0528..0c4b77b9 100644 --- a/plugins/modules/docker_swarm_service.py +++ b/plugins/modules/docker_swarm_service.py @@ -2381,12 +2381,12 @@ class DockerServiceManager: mode = raw_data["Spec"]["Mode"] if "Replicated" in mode: - ds.mode = to_text("replicated", encoding="utf-8") + ds.mode = to_text("replicated", encoding="utf-8") # type: ignore ds.replicas = mode["Replicated"]["Replicas"] elif "Global" in mode: ds.mode = "global" elif "ReplicatedJob" in mode: - ds.mode = to_text("replicated-job", encoding="utf-8") + ds.mode = to_text("replicated-job", encoding="utf-8") # type: ignore ds.replicas = mode["ReplicatedJob"]["TotalCompletions"] else: raise ValueError(f"Unknown service mode: {mode}")