10000 add docker client commands to get docker system info (#8578) · codeperl/localstack@df911f0 · GitHub
[go: up one dir, main page]

Skip to content

Commit df911f0

Browse files
authored
add docker client commands to get docker system info (localstack#8578)
1 parent 7f3b534 commit df911f0

File tree

4 files changed

+32
-0
lines changed

4 files changed

+32
-0
lines changed

localstack/utils/container_utils/container_client.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,14 @@ class DockerRunFlags:
455455
class ContainerClient(metaclass=ABCMeta):
456456
STOP_TIMEOUT = 0
457457

458+
@abstractmethod
459+
def get_system_info(self) -> dict:
460+
"""Returns the docker system-wide information as dictionary (``docker info``)."""
461+
462+
def get_system_id(self) -> str:
463+
"""Returns the unique and stable ID of the docker daemon."""
464+
return self.get_system_info()["ID"]
465+
458466
@abstractmethod
459467
def get_container_status(self, container_name: str) -> DockerContainerStatus:
460468
"""Returns the status of the container with the given name"""

localstack/utils/container_utils/docker_cmd_client.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,17 @@ def _docker_cmd(self) -> List[str]:
6868
"""Return the string to be used for running Docker commands."""
6969
return config.DOCKER_CMD.split()
7070

71+
def get_system_info(self) -> dict:
72+
cmd = [
73+
*self._docker_cmd(),
74+
"info",
75+
"--format",
76+
"{{json .}}",
77+
]
78+
cmd_result = run(cmd)
79+
80+
return json.loads(cmd_result)
81+
7182
def get_container_status(self, container_name: str) -> DockerContainerStatus:
7283
cmd = self._docker_cmd()
7384
cmd += [

localstack/utils/container_utils/docker_sdk_client.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ def _head(path_suffix, **kwargs):
125125
target_is_dir = target_exists and bool(stats["mode"] & SDK_ISDIR)
126126
return target_exists, target_is_dir
127127

128+
def get_system_info(self) -> dict:
129+
return self.client().info()
130+
128131
def get_container_status(self, container_name: str) -> DockerContainerStatus:
129132
# LOG.debug("Getting container status for container: %s", container_name) # too verbose
130133
try:

tests/integration/docker_utils/test_docker.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,16 @@ def _create_network(network_name: str):
118118

119119

120120
class TestDockerClient:
121+
def test_get_system_info(self, docker_client: ContainerClient):
122+
info = docker_client.get_system_info()
123+
assert "ID" in info
124+
assert "OperatingSystem" in info
125+
assert "Architecture" in info
126+
127+
def test_get_system_id(self, docker_client: ContainerClient):
128+
assert len(docker_client.get_system_id()) > 1
129+
assert docker_client.get_system_id() == docker_client.get_system_id()
130+
121131
def test_container_lifecycle_commands(self, docker_client: ContainerClient):
122132
container_name = _random_container_name()
123133
output = docker_client.create_container(

0 commit comments

Comments
 (0)
0