From 01a69d5a0eccb8f76ca204a9442130b47a087e56 Mon Sep 17 00:00:00 2001 From: Jvst Me Date: Thu, 19 Mar 2026 00:25:07 +0100 Subject: [PATCH] Show imported instances in `dstack offer` Show instances from imported fleets in `dstack offer`. Previously, they were only shown in `dstack fleet`. --- src/dstack/_internal/server/services/instances.py | 9 ++++++++- src/tests/_internal/server/routers/test_runs.py | 13 ++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/dstack/_internal/server/services/instances.py b/src/dstack/_internal/server/services/instances.py index 78d841cb6..b2a928004 100644 --- a/src/dstack/_internal/server/services/instances.py +++ b/src/dstack/_internal/server/services/instances.py @@ -513,7 +513,14 @@ async def get_pool_instances( res = await session.execute( select(InstanceModel) .where( - InstanceModel.project_id == project.id, + or_( + InstanceModel.project_id == project.id, + exists().where( + ImportModel.project_id == project.id, + ImportModel.export_id == ExportedFleetModel.export_id, + ExportedFleetModel.fleet_id == InstanceModel.fleet_id, + ), + ), InstanceModel.deleted == False, ) .options(joinedload(InstanceModel.fleet)) diff --git a/src/tests/_internal/server/routers/test_runs.py b/src/tests/_internal/server/routers/test_runs.py index 1d72ba552..3d14263a3 100644 --- a/src/tests/_internal/server/routers/test_runs.py +++ b/src/tests/_internal/server/routers/test_runs.py @@ -1388,11 +1388,22 @@ async def test_returns_run_plan_instance_volumes( @pytest.mark.asyncio @pytest.mark.parametrize("test_db", ["sqlite", "postgres"], indirect=True) + @pytest.mark.parametrize( + "configuration", + [ + pytest.param({"type": "dev-environment", "ide": "vscode"}, id="regular-configuration"), + pytest.param( + {"type": "task", "commands": [":"], "image": "scratch"}, + id="special-configuration-used-by-dstack-offer-cli-command", + ), + ], + ) async def test_returns_run_plan_with_offer_from_imported_fleet( self, test_db, session: AsyncSession, client: AsyncClient, + configuration: dict, ) -> None: importer_user = await create_user(session, global_role=GlobalRole.USER) exporter_project = await create_project(session, name="exporter-project") @@ -1424,7 +1435,7 @@ async def test_returns_run_plan_with_offer_from_imported_fleet( exported_fleets=[fleet], ) - run_spec = {"configuration": {"type": "dev-environment", "ide": "vscode"}} + run_spec = {"configuration": configuration} body = {"run_spec": run_spec} response = await client.post( "/api/project/importer-project/runs/get_plan",