async def test_list_clusters(aiohttp_server: _TestServerFactory, make_client: _MakeClient) -> None: async def handle_list_clusters(request: web.Request) -> web.StreamResponse: assert request.query["include"] == "cloud_provider_infra" data = [ { "name": "default", "status": "deployed" }, { "name": "other", "status": "deployed" }, ] return web.json_response(data) app = web.Application() app.router.add_get("/api/v1/clusters", handle_list_clusters) srv = await aiohttp_server(app) async with make_client(srv.make_url("/api/v1")) as client: clusters = await client._admin.list_clusters() assert clusters == { "default": _Cluster(name="default", status="deployed"), "other": _Cluster(name="other", status="deployed"), }
def test_cluster_list(self) -> None: formatter = ClustersFormatter() clusters = [_Cluster(name="default", status="deployed")] expected_out = textwrap.dedent("""\ \x1b[1mdefault:\x1b[0m \x1b[1mStatus: \x1b[0mDeployed""") assert "\n".join(formatter(clusters)) == expected_out
def test_cluster_with_cloud_provider_with_maximum_node_pool_properties_list( self, ) -> None: formatter = ClustersFormatter() clusters = [ _Cluster( name="default", status="deployed", cloud_provider=_CloudProvider( type="gcp", region="us-central1", zones=[], node_pools=[ self._create_node_pool(is_preemptible=True, is_tpu_enabled=True, has_idle=True), self._create_node_pool(), ], storage=None, ), ) ] expected_out = textwrap.dedent(f"""\ \x1b[1mdefault:\x1b[0m \x1b[1mStatus: \x1b[0mDeployed \x1b[1mCloud: \x1b[0mgcp \x1b[1mRegion: \x1b[0mus-central1 \x1b[1mNode pools:\x1b[0m Machine CPU Memory Preemptible GPU TPU Min Max Idle n1-highmem-8 7.0 45.0G √ √ 1 2 1 n1-highmem-8 7.0 45.0G × × 1 2 0""" ) assert "\n".join(formatter(clusters)) == expected_out
def test_cluster_with_cloud_provider_with_minimum_node_pool_properties_list( self, ) -> None: formatter = ClustersFormatter() clusters = [ _Cluster( name="default", status="deployed", cloud_provider=_CloudProvider( type="on_prem", region=None, zones=[], node_pools=[ self._create_node_pool(is_scalable=False), self._create_node_pool(is_scalable=False, is_gpu=True), ], storage=None, ), ) ] expected_out = textwrap.dedent(f"""\ \x1b[1mdefault:\x1b[0m \x1b[1mStatus: \x1b[0mDeployed \x1b[1mNode pools:\x1b[0m Machine CPU Memory GPU Size n1-highmem-8 7.0 45.0G 2 n1-highmem-8 7.0 45.0G 1 x nvidia-tesla-k80 2""" # noqa: E501, ignore line length ) assert "\n".join(formatter(clusters)) == expected_out
def test_cluster_with_on_prem_cloud_provider_list(self) -> None: formatter = ClustersFormatter() clusters = [ _Cluster( name="on-prem", status="deployed", cloud_provider=_CloudProvider( type="on_prem", region=None, zones=[], node_pools=[], storage=None, ), ), ] expected_out = textwrap.dedent("""\ \x1b[1mon-prem:\x1b[0m \x1b[1mStatus: \x1b[0mDeployed""") assert "\n".join(formatter(clusters)) == expected_out
def test_cluster_with_cloud_provider_storage_list(self) -> None: formatter = ClustersFormatter() clusters = [ _Cluster( name="default", status="deployed", cloud_provider=_CloudProvider( type="gcp", region="us-central1", zones=["us-central1-a", "us-central1-c"], node_pools=[], storage=_Storage(description="Filestore"), ), ) ] expected_out = textwrap.dedent("""\ \x1b[1mdefault:\x1b[0m \x1b[1mStatus: \x1b[0mDeployed \x1b[1mCloud: \x1b[0mgcp \x1b[1mRegion: \x1b[0mus-central1 \x1b[1mZones: \x1b[0mus-central1-a, us-central1-c \x1b[1mStorage: \x1b[0mFilestore""") assert "\n".join(formatter(clusters)) == expected_out
async def test_list_clusters_with_cloud_provider( aiohttp_server: _TestServerFactory, make_client: _MakeClient) -> None: async def handle_list_clusters(request: web.Request) -> web.StreamResponse: assert request.query["include"] == "cloud_provider_infra" data = [ { "name": "default", "status": "deployed", "cloud_provider": { "type": "gcp", "region": "us-central1", "zone": "us-central1-a", "node_pools": [ { "machine_type": "n1-highmem-8", "min_size": 1, "max_size": 2, "idle_size": 1, "available_cpu": 7, "available_memory_mb": 46080, "gpu": 1, "gpu_model": "nvidia-tesla-k80", "is_tpu_enabled": True, "is_preemptible": True, }, { "machine_type": "n1-highmem-8", "min_size": 1, "max_size": 2, "available_cpu": 7, "available_memory_mb": 46080, }, ], "storage": { "description": "Filestore" }, }, }, { "name": "on-prem", "status": "deployed", "cloud_provider": { "type": "on_prem", "node_pools": [ { "min_size": 2, "max_size": 2, "machine_type": "n1-highmem-8", "available_cpu": 7, "available_memory_mb": 46080, }, ], "storage": { "description": "NFS" }, }, }, { "name": "other1", "status": "deployed", "cloud_provider": { "type": "gcp", "region": "us-central1", "zones": ["us-central1-a", "us-central1-c"], }, }, { "name": "other2", "status": "deployed", "cloud_provider": { "type": "aws", "region": "us-central1" }, }, ] return web.json_response(data) app = web.Application() app.router.add_get("/api/v1/clusters", handle_list_clusters) srv = await aiohttp_server(app) async with make_client(srv.make_url("/api/v1")) as client: clusters = await client._admin.list_clusters() assert clusters == { "default": _Cluster( name="default", status="deployed", cloud_provider=_CloudProvider( type="gcp", region="us-central1", zones=["us-central1-a"], node_pools=[ _NodePool( min_size=1, max_size=2, idle_size=1, machine_type="n1-highmem-8", available_cpu=7.0, available_memory_mb=46080, gpu=1, gpu_model="nvidia-tesla-k80", is_tpu_enabled=True, is_preemptible=True, ), _NodePool( min_size=1, max_size=2, machine_type="n1-highmem-8", available_cpu=7.0, available_memory_mb=46080, ), ], storage=_Storage(description="Filestore"), ), ), "on-prem": _Cluster( name="on-prem", status="deployed", cloud_provider=_CloudProvider( type="on_prem", region=None, zones=[], node_pools=[ _NodePool( min_size=2, max_size=2, machine_type="n1-highmem-8", available_cpu=7.0, available_memory_mb=46080, ), ], storage=_Storage(description="NFS"), ), ), "other1": _Cluster( name="other1", status="deployed", cloud_provider=_CloudProvider( type="gcp", region="us-central1", zones=["us-central1-a", "us-central1-c"], node_pools=[], storage=None, ), ), "other2": _Cluster( name="other2", status="deployed", cloud_provider=_CloudProvider( type="aws", region="us-central1", zones=[], node_pools=[], storage=None, ), ), }