Skip to content

Commit 2f8cd50

Browse files
author
Andrei Neagu
committed
fixed self container targetting
1 parent 236d3a1 commit 2f8cd50

File tree

2 files changed

+49
-6
lines changed

2 files changed

+49
-6
lines changed

services/agent/src/simcore_service_agent/services/backup.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import asyncio
2+
import json
23
import logging
3-
import os
4+
import socket
45
import tempfile
56
from asyncio.streams import StreamReader
67
from datetime import timedelta
@@ -9,6 +10,7 @@
910
from typing import Final
1011
from uuid import uuid4
1112

13+
import httpx
1214
from fastapi import FastAPI
1315
from servicelib.container_utils import run_command_in_container
1416
from settings_library.utils_r_clone import resolve_provider
@@ -112,8 +114,26 @@ def _log_expected_operation(
112114
_logger.log(log_level, formatted_message)
113115

114116

117+
def _get_self_container_ip() -> str:
118+
return socket.gethostbyname(socket.gethostname())
119+
120+
121+
async def _get_self_container() -> str:
122+
ip = _get_self_container_ip()
123+
124+
transport = httpx.AsyncHTTPTransport(uds="/var/run/docker.sock")
125+
async with httpx.AsyncClient(transport=transport) as client:
126+
response = await client.get("http://localhost/containers/json")
127+
for entry in response.json():
128+
if ip in json.dumps(entry):
129+
return entry["Id"]
130+
131+
msg = "Could not determine self container ID"
132+
raise RuntimeError(msg)
133+
134+
115135
async def _ensure_permissions_on_source_dir(source_dir: Path) -> None:
116-
self_container = os.environ["HOSTNAME"]
136+
self_container = await _get_self_container()
117137
await run_command_in_container(
118138
self_container,
119139
command=f"chmod -R o+rX '{source_dir}'",

services/agent/tests/unit/test_services_backup.py

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
from models_library.projects_nodes_io import NodeID
1616
from models_library.services_types import ServiceRunID
1717
from pydantic import NonNegativeInt
18+
from pytest_mock import MockerFixture
19+
from servicelib.container_utils import run_command_in_container
1820
from simcore_service_agent.core.settings import ApplicationSettings
1921
from simcore_service_agent.services.backup import backup_volume
2022
from simcore_service_agent.services.docker_utils import get_volume_details
@@ -42,21 +44,26 @@ def volume_content(tmpdir: Path) -> Path:
4244
@pytest.fixture
4345
async def mock_container_with_data(
4446
volume_content: Path, monkeypatch: pytest.MonkeyPatch
45-
) -> AsyncIterable[None]:
47+
) -> AsyncIterable[str]:
4648
async with aiodocker.Docker() as client:
4749
container = await client.containers.run(
4850
config={
4951
"Image": "alpine:latest",
5052
"Cmd": ["/bin/ash", "-c", "sleep 10000"],
51-
"HostConfig": {"Binds": [f"{volume_content}:{volume_content}:rw"]},
53+
"HostConfig": {
54+
"Binds": [
55+
f"{volume_content}:{volume_content}:rw",
56+
"/var/run/docker.sock:/var/run/docker.sock:rw",
57+
]
58+
},
5259
}
5360
)
5461
container_inspect = await container.show()
5562

5663
container_name = container_inspect["Name"][1:]
5764
monkeypatch.setenv("HOSTNAME", container_name)
5865

59-
yield None
66+
yield container_inspect["Id"]
6067

6168
await container.delete(force=True)
6269

@@ -68,8 +75,24 @@ def downlaoded_from_s3(tmpdir: Path) -> Path:
6875
return path
6976

7077

78+
@pytest.fixture
79+
async def mock__get_self_container_ip(
80+
mock_container_with_data: str,
81+
mocker: MockerFixture,
82+
) -> None:
83+
container_ip = await run_command_in_container(
84+
mock_container_with_data, command="hostname -i"
85+
)
86+
87+
mocker.patch(
88+
"simcore_service_agent.services.backup._get_self_container_ip",
89+
return_value=container_ip.strip(),
90+
)
91+
92+
7193
async def test_backup_volume(
72-
mock_container_with_data: None,
94+
mock_container_with_data: str,
95+
mock__get_self_container_ip: None,
7396
volume_content: Path,
7497
project_id: ProjectID,
7598
swarm_stack_name: str,

0 commit comments

Comments
 (0)