From ba6c3f8bc2268c86eb2c84560abf2060cb1d9d69 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 1 Apr 2026 13:03:39 +0000 Subject: [PATCH] sandboxes: allow to enable mesh --- koyeb/sandbox/sandbox.py | 8 ++++++++ koyeb/sandbox/utils.py | 13 +++++++++++++ 2 files changed, 21 insertions(+) diff --git a/koyeb/sandbox/sandbox.py b/koyeb/sandbox/sandbox.py index bd6821f9..362ff37a 100644 --- a/koyeb/sandbox/sandbox.py +++ b/koyeb/sandbox/sandbox.py @@ -121,6 +121,7 @@ def create( delete_after_delay: int = 0, delete_after_inactivity_delay: int = 0, app_id: Optional[str] = None, + enable_mesh: bool = None, ) -> Sandbox: """ Create a new sandbox instance. @@ -153,6 +154,7 @@ def create( delete_after_sleep: If >0, automatically delete the sandbox if service sleeps due to inactivity after this many seconds. app_id: If provided, create the sandbox service in an existing app instead of creating a new one. + enable_mesh: Enable or disable mesh for this sandbox. Disabled by default Returns: Sandbox: A new Sandbox instance @@ -196,6 +198,7 @@ def create( delete_after_delay=delete_after_delay, delete_after_inactivity_delay=delete_after_inactivity_delay, app_id=app_id, + enable_mesh=enable_mesh, ) if wait_ready: @@ -229,6 +232,7 @@ def _create_sync( delete_after_delay: int = 0, delete_after_inactivity_delay: int = 0, app_id: Optional[str] = None, + enable_mesh: bool = None, ) -> Sandbox: """ Synchronous creation method that returns creation parameters. @@ -275,6 +279,7 @@ def _create_sync( enable_tcp_proxy=enable_tcp_proxy, _experimental_enable_light_sleep=_experimental_enable_light_sleep, _experimental_deep_sleep_value=_experimental_deep_sleep_value, + enable_mesh=enable_mesh, ) service_life_cycle = ServiceLifeCycle( @@ -1026,6 +1031,7 @@ async def create( delete_after_delay: int = 0, delete_after_inactivity_delay: int = 0, app_id: Optional[str] = None, + enable_mesh: bool = False, ) -> AsyncSandbox: """ Create a new sandbox instance with async support. @@ -1060,6 +1066,7 @@ async def create( delete_after_inactivity_delay: If >0, automatically delete the sandbox if service sleeps due to inactivity after this many seconds. app_id: If provided, create the sandbox service in an existing app instead of creating a new one. + enable_mesh: Enable or disable mesh for this sandbox. Disabled by default Returns: AsyncSandbox: A new AsyncSandbox instance @@ -1096,6 +1103,7 @@ async def create( delete_after_delay=delete_after_delay, delete_after_inactivity_delay=delete_after_inactivity_delay, app_id=app_id, + enable_mesh=enable_mesh, ), ) diff --git a/koyeb/sandbox/utils.py b/koyeb/sandbox/utils.py index 78389488..b49ce1e5 100644 --- a/koyeb/sandbox/utils.py +++ b/koyeb/sandbox/utils.py @@ -30,6 +30,7 @@ from koyeb.api.models.deployment_scaling_target_sleep_idle_delay import ( DeploymentScalingTargetSleepIdleDelay, ) +from koyeb.api.models.deployment_mesh import DeploymentMesh from koyeb.api.models.docker_source import DockerSource from koyeb.api.models.proxy_port_protocol import ProxyPortProtocol @@ -242,6 +243,7 @@ def create_deployment_definition( enable_tcp_proxy: bool = False, _experimental_enable_light_sleep: bool = False, _experimental_deep_sleep_value: int = 3900, + enable_mesh: bool = None, ) -> DeploymentDefinition: """ Create deployment definition for a sandbox service. @@ -262,6 +264,7 @@ def create_deployment_definition( Light Sleep reduces cold starts to ~200ms. After scaling to zero, the service stays in Light Sleep for idle_timeout seconds before going into Deep Sleep. _experimental_deep_sleep_value: Number of seconds for deep sleep when light sleep is enabled (default: 3900). Only used if _experimental_enable_light_sleep is True. Ignored otherwise. + enable_mesh: Enable or disable mesh for this sandbox. Disabled by default Returns: DeploymentDefinition object @@ -312,6 +315,15 @@ def create_deployment_definition( scalings = [DeploymentScaling(min=min_scale, max=1, targets=targets)] + # Set mesh configuration + mesh = DeploymentMesh.DEPLOYMENT_MESH_AUTO + if enable_mesh is None: + mesh = DeploymentMesh.DEPLOYMENT_MESH_AUTO + elif not enable_mesh: + mesh = DeploymentMesh.DEPLOYMENT_MESH_DISABLED + elif enable_mesh: + mesh = DeploymentMesh.DEPLOYMENT_MESH_ENABLED + return DeploymentDefinition( name=name, type=deployment_type, @@ -323,6 +335,7 @@ def create_deployment_definition( instance_types=[DeploymentInstanceType(type=instance_type)], scalings=scalings, regions=regions_list, + mesh=mesh, )