Skip to content

Commit fc83842

Browse files
author
Andrei Neagu
committed
added registry auth to director-v2 when creating services
1 parent 3fb8edd commit fc83842

File tree

2 files changed

+40
-23
lines changed

2 files changed

+40
-23
lines changed

services/director-v2/src/simcore_service_director_v2/modules/dynamic_sidecar/docker_api/_core.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from models_library.services_enums import ServiceState
1919
from models_library.services_metadata_runtime import to_simcore_runtime_docker_label_key
2020
from servicelib.utils import logged_gather
21+
from settings_library.docker_registry import RegistrySettings
2122
from starlette import status
2223
from tenacity import TryAgain, retry
2324
from tenacity.asyncio import AsyncRetrying
@@ -99,6 +100,7 @@ def _to_snake_case(string: str) -> str:
99100

100101
async def create_service_and_get_id(
101102
create_service_data: AioDockerServiceSpec | dict[str, Any],
103+
docker_hub_registry_settings: RegistrySettings | None,
102104
) -> ServiceId:
103105
# NOTE: ideally the argument should always be AioDockerServiceSpec
104106
# but for that we need get_dynamic_proxy_spec to return that type
@@ -107,6 +109,13 @@ async def create_service_and_get_id(
107109
create_service_data, by_alias=True, exclude_unset=True
108110
)
109111
kwargs = {_to_snake_case(k): v for k, v in kwargs.items()}
112+
if docker_hub_registry_settings:
113+
kwargs["auth"] = {
114+
"username": docker_hub_registry_settings.REGISTRY_USER,
115+
"password": docker_hub_registry_settings.REGISTRY_PW.get_secret_value(),
116+
"serveraddress": docker_hub_registry_settings.resolved_registry_url,
117+
}
118+
kwargs["registry"] = docker_hub_registry_settings.resolved_registry_url
110119

111120
logging.debug("Creating service with\n%s", json_dumps(kwargs, indent=1))
112121
service_start_result = await client.services.create(**kwargs)

services/director-v2/src/simcore_service_director_v2/modules/dynamic_sidecar/scheduler/_core/_event_create_sidecars.py

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
DynamicSidecarSettings,
3131
PlacementSettings,
3232
)
33+
from .....core.settings import AppSettings
3334
from .....models.dynamic_services_scheduler import NetworkId, SchedulerData
3435
from .....utils.db import get_repository
3536
from .....utils.dict_utils import nested_update
@@ -93,32 +94,35 @@ async def _create_proxy_service(
9394
swarm_network_id: NetworkId,
9495
swarm_network_name: str,
9596
):
97+
app_settings: AppSettings = app.state.settings
9698
proxy_settings: DynamicSidecarProxySettings = (
9799
app.state.settings.DYNAMIC_SERVICES.DYNAMIC_SIDECAR_PROXY_SETTINGS
98100
)
99101
scheduler_data.proxy_admin_api_port = (
100102
proxy_settings.DYNAMIC_SIDECAR_CADDY_ADMIN_API_PORT
101103
)
102-
103104
dynamic_services_settings: DynamicServicesSettings = (
104105
app.state.settings.DYNAMIC_SERVICES
105106
)
106107

107-
dynamic_sidecar_proxy_create_service_params: dict[
108-
str, Any
109-
] = get_dynamic_proxy_spec(
110-
scheduler_data=scheduler_data,
111-
dynamic_services_settings=dynamic_services_settings,
112-
dynamic_sidecar_network_id=dynamic_sidecar_network_id,
113-
swarm_network_id=swarm_network_id,
114-
swarm_network_name=swarm_network_name,
108+
dynamic_sidecar_proxy_create_service_params: dict[str, Any] = (
109+
get_dynamic_proxy_spec(
110+
scheduler_data=scheduler_data,
111+
dynamic_services_settings=dynamic_services_settings,
112+
dynamic_sidecar_network_id=dynamic_sidecar_network_id,
113+
swarm_network_id=swarm_network_id,
114+
swarm_network_name=swarm_network_name,
115+
)
115116
)
116117
_logger.debug(
117118
"dynamic-sidecar-proxy create_service_params %s",
118119
json_dumps(dynamic_sidecar_proxy_create_service_params),
119120
)
120121

121-
await create_service_and_get_id(dynamic_sidecar_proxy_create_service_params)
122+
await create_service_and_get_id(
123+
dynamic_sidecar_proxy_create_service_params,
124+
app_settings.DIRECTOR_V2_DOCKER_HUB_REGISTRY,
125+
)
122126

123127

124128
class CreateSidecars(DynamicSchedulerEvent):
@@ -156,6 +160,7 @@ async def action(cls, app: FastAPI, scheduler_data: SchedulerData) -> None:
156160
rabbitmq_client: RabbitMQClient = app.state.rabbitmq_client
157161
await rabbitmq_client.publish(message.channel_name, message)
158162

163+
app_settings: AppSettings = app.state.settings
159164
dynamic_sidecar_settings: DynamicSidecarSettings = (
160165
app.state.settings.DYNAMIC_SERVICES.DYNAMIC_SIDECAR
161166
)
@@ -244,18 +249,20 @@ async def action(cls, app: FastAPI, scheduler_data: SchedulerData) -> None:
244249

245250
# WARNING: do NOT log, this structure has secrets in the open
246251
# If you want to log, please use an obfuscator
247-
dynamic_sidecar_service_spec_base: AioDockerServiceSpec = await get_dynamic_sidecar_spec(
248-
scheduler_data=scheduler_data,
249-
dynamic_sidecar_settings=dynamic_sidecar_settings,
250-
dynamic_services_scheduler_settings=dynamic_services_scheduler_settings,
251-
swarm_network_id=swarm_network_id,
252-
settings=settings,
253-
app_settings=app.state.settings,
254-
hardware_info=scheduler_data.hardware_info,
255-
has_quota_support=dynamic_services_scheduler_settings.DYNAMIC_SIDECAR_ENABLE_VOLUME_LIMITS,
256-
metrics_collection_allowed=metrics_collection_allowed,
257-
user_extra_properties=user_extra_properties,
258-
rpc_client=rpc_client,
252+
dynamic_sidecar_service_spec_base: AioDockerServiceSpec = (
253+
await get_dynamic_sidecar_spec(
254+
scheduler_data=scheduler_data,
255+
dynamic_sidecar_settings=dynamic_sidecar_settings,
256+
dynamic_services_scheduler_settings=dynamic_services_scheduler_settings,
257+
swarm_network_id=swarm_network_id,
258+
settings=settings,
259+
app_settings=app.state.settings,
260+
hardware_info=scheduler_data.hardware_info,
261+
has_quota_support=dynamic_services_scheduler_settings.DYNAMIC_SIDECAR_ENABLE_VOLUME_LIMITS,
262+
metrics_collection_allowed=metrics_collection_allowed,
263+
user_extra_properties=user_extra_properties,
264+
rpc_client=rpc_client,
265+
)
259266
)
260267

261268
user_specific_service_spec = (
@@ -278,7 +285,8 @@ async def action(cls, app: FastAPI, scheduler_data: SchedulerData) -> None:
278285
)
279286
await rabbitmq_client.publish(rabbit_message.channel_name, rabbit_message)
280287
dynamic_sidecar_id = await create_service_and_get_id(
281-
dynamic_sidecar_service_final_spec
288+
dynamic_sidecar_service_final_spec,
289+
app_settings.DIRECTOR_V2_DOCKER_HUB_REGISTRY,
282290
)
283291
# constrain service to the same node
284292
scheduler_data.dynamic_sidecar.docker_node_id = (

0 commit comments

Comments
 (0)