Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from models_library.services_enums import ServiceState
from models_library.services_metadata_runtime import to_simcore_runtime_docker_label_key
from servicelib.utils import logged_gather
from settings_library.docker_registry import RegistrySettings
from starlette import status
from tenacity import TryAgain, retry
from tenacity.asyncio import AsyncRetrying
Expand Down Expand Up @@ -99,6 +100,7 @@ def _to_snake_case(string: str) -> str:

async def create_service_and_get_id(
create_service_data: AioDockerServiceSpec | dict[str, Any],
docker_hub_registry_settings: RegistrySettings | None,
) -> ServiceId:
# NOTE: ideally the argument should always be AioDockerServiceSpec
# but for that we need get_dynamic_proxy_spec to return that type
Expand All @@ -107,6 +109,13 @@ async def create_service_and_get_id(
create_service_data, by_alias=True, exclude_unset=True
)
kwargs = {_to_snake_case(k): v for k, v in kwargs.items()}
if docker_hub_registry_settings:
kwargs["auth"] = {
"username": docker_hub_registry_settings.REGISTRY_USER,
"password": docker_hub_registry_settings.REGISTRY_PW.get_secret_value(),
"serveraddress": docker_hub_registry_settings.resolved_registry_url,
}
kwargs["registry"] = docker_hub_registry_settings.resolved_registry_url

logging.debug("Creating service with\n%s", json_dumps(kwargs, indent=1))
service_start_result = await client.services.create(**kwargs)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
DynamicSidecarSettings,
PlacementSettings,
)
from .....core.settings import AppSettings
from .....models.dynamic_services_scheduler import NetworkId, SchedulerData
from .....utils.db import get_repository
from .....utils.dict_utils import nested_update
Expand Down Expand Up @@ -93,32 +94,35 @@ async def _create_proxy_service(
swarm_network_id: NetworkId,
swarm_network_name: str,
):
app_settings: AppSettings = app.state.settings
proxy_settings: DynamicSidecarProxySettings = (
app.state.settings.DYNAMIC_SERVICES.DYNAMIC_SIDECAR_PROXY_SETTINGS
)
scheduler_data.proxy_admin_api_port = (
proxy_settings.DYNAMIC_SIDECAR_CADDY_ADMIN_API_PORT
)

dynamic_services_settings: DynamicServicesSettings = (
app.state.settings.DYNAMIC_SERVICES
)

dynamic_sidecar_proxy_create_service_params: dict[
str, Any
] = get_dynamic_proxy_spec(
scheduler_data=scheduler_data,
dynamic_services_settings=dynamic_services_settings,
dynamic_sidecar_network_id=dynamic_sidecar_network_id,
swarm_network_id=swarm_network_id,
swarm_network_name=swarm_network_name,
dynamic_sidecar_proxy_create_service_params: dict[str, Any] = (
get_dynamic_proxy_spec(
scheduler_data=scheduler_data,
dynamic_services_settings=dynamic_services_settings,
dynamic_sidecar_network_id=dynamic_sidecar_network_id,
swarm_network_id=swarm_network_id,
swarm_network_name=swarm_network_name,
)
)
_logger.debug(
"dynamic-sidecar-proxy create_service_params %s",
json_dumps(dynamic_sidecar_proxy_create_service_params),
)

await create_service_and_get_id(dynamic_sidecar_proxy_create_service_params)
await create_service_and_get_id(
dynamic_sidecar_proxy_create_service_params,
app_settings.DIRECTOR_V2_DOCKER_HUB_REGISTRY,
)


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

app_settings: AppSettings = app.state.settings
dynamic_sidecar_settings: DynamicSidecarSettings = (
app.state.settings.DYNAMIC_SERVICES.DYNAMIC_SIDECAR
)
Expand Down Expand Up @@ -244,18 +249,20 @@ async def action(cls, app: FastAPI, scheduler_data: SchedulerData) -> None:

# WARNING: do NOT log, this structure has secrets in the open
# If you want to log, please use an obfuscator
dynamic_sidecar_service_spec_base: AioDockerServiceSpec = await get_dynamic_sidecar_spec(
scheduler_data=scheduler_data,
dynamic_sidecar_settings=dynamic_sidecar_settings,
dynamic_services_scheduler_settings=dynamic_services_scheduler_settings,
swarm_network_id=swarm_network_id,
settings=settings,
app_settings=app.state.settings,
hardware_info=scheduler_data.hardware_info,
has_quota_support=dynamic_services_scheduler_settings.DYNAMIC_SIDECAR_ENABLE_VOLUME_LIMITS,
metrics_collection_allowed=metrics_collection_allowed,
user_extra_properties=user_extra_properties,
rpc_client=rpc_client,
dynamic_sidecar_service_spec_base: AioDockerServiceSpec = (
await get_dynamic_sidecar_spec(
scheduler_data=scheduler_data,
dynamic_sidecar_settings=dynamic_sidecar_settings,
dynamic_services_scheduler_settings=dynamic_services_scheduler_settings,
swarm_network_id=swarm_network_id,
settings=settings,
app_settings=app.state.settings,
hardware_info=scheduler_data.hardware_info,
has_quota_support=dynamic_services_scheduler_settings.DYNAMIC_SIDECAR_ENABLE_VOLUME_LIMITS,
metrics_collection_allowed=metrics_collection_allowed,
user_extra_properties=user_extra_properties,
rpc_client=rpc_client,
)
)

user_specific_service_spec = (
Expand All @@ -278,7 +285,8 @@ async def action(cls, app: FastAPI, scheduler_data: SchedulerData) -> None:
)
await rabbitmq_client.publish(rabbit_message.channel_name, rabbit_message)
dynamic_sidecar_id = await create_service_and_get_id(
dynamic_sidecar_service_final_spec
dynamic_sidecar_service_final_spec,
app_settings.DIRECTOR_V2_DOCKER_HUB_REGISTRY,
)
# constrain service to the same node
scheduler_data.dynamic_sidecar.docker_node_id = (
Expand Down
Loading