defmodule Testcontainers.Docker.Exec do alias Testcontainers.Docker.Connection def inspect(exec_id, options \\ []) do conn = Connection.get_connection(options) case DockerEngineAPI.Api.Exec.exec_inspect(conn, exec_id) do {:ok, %DockerEngineAPI.Model.ExecInspectResponse{} = body} -> {:ok, parse_inspect_result(body)} {:ok, %Tesla.Env{status: status}} -> {:error, {:http_error, status}} {:error, message} -> {:error, message} end end def create(container_id, command, options \\ []) do data = %{"Cmd" => command} conn = Connection.get_connection(options) case DockerEngineAPI.Api.Exec.container_exec(conn, container_id, data) do {:ok, %DockerEngineAPI.Model.IdResponse{Id: id}} -> {:ok, id} {:ok, %Tesla.Env{status: status}} -> {:error, {:http_error, status}} {:error, message} -> {:error, message} end end def start(exec_id, options \\ []) do conn = Connection.get_connection(options) case DockerEngineAPI.Api.Exec.exec_start(conn, exec_id, body: %{}) do {:ok, %Tesla.Env{status: 200}} -> :ok {:ok, %Tesla.Env{status: status}} -> {:error, {:http_error, status}} {:error, message} -> {:error, message} end end def stdout_logs(container_id, options \\ []) do conn = Connection.get_connection(options) case DockerEngineAPI.Api.Container.container_logs(conn, container_id, stdout: true) do {:ok, %Tesla.Env{body: body}} -> {:ok, body} {:error, message} -> {:error, message} end end defp parse_inspect_result(%DockerEngineAPI.Model.ExecInspectResponse{} = json) do %{running: json."Running", exit_code: json."ExitCode"} end end