Skip to content

Commit 2b36422

Browse files
committed
Merge pull request #1244 from dhermes/bigtable-list-clusters
Adding list clusters request to Bigtable client.
2 parents 4d880e4 + 4e3f6ce commit 2b36422

2 files changed

Lines changed: 84 additions & 0 deletions

File tree

gcloud/bigtable/client.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,3 +400,23 @@ def list_zones(self):
400400
zone.display_name,))
401401
result.append(zone.display_name)
402402
return result
403+
404+
def list_clusters(self):
405+
"""Lists clusters owned by the project.
406+
407+
:rtype: tuple
408+
:returns: A pair of results, the first is a list of :class:`.Cluster` s
409+
returned and the second is a list of strings (the failed
410+
zones in the request).
411+
"""
412+
request_pb = messages_pb2.ListClustersRequest(name=self.project_name)
413+
response = self._cluster_stub.ListClusters.async(request_pb,
414+
self.timeout_seconds)
415+
# We expect a `.messages_pb2.ListClustersResponse`
416+
list_clusters_response = response.result()
417+
418+
failed_zones = [zone.display_name
419+
for zone in list_clusters_response.failed_zones]
420+
clusters = [Cluster.from_pb(cluster_pb, self)
421+
for cluster_pb in list_clusters_response.clusters]
422+
return clusters, failed_zones

gcloud/bigtable/test_client.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,70 @@ def test_list_zones_failure(self):
547547
with self.assertRaises(ValueError):
548548
self._list_zones_helper(data_pb2.Zone.EMERGENCY_MAINENANCE)
549549

550+
def test_list_clusters(self):
551+
from gcloud.bigtable._generated import (
552+
bigtable_cluster_data_pb2 as data_pb2)
553+
from gcloud.bigtable._generated import (
554+
bigtable_cluster_service_messages_pb2 as messages_pb2)
555+
556+
credentials = _Credentials()
557+
project = 'PROJECT'
558+
timeout_seconds = 8004
559+
client = self._makeOne(project=project, credentials=credentials,
560+
admin=True, timeout_seconds=timeout_seconds)
561+
562+
# Create request_pb
563+
request_pb = messages_pb2.ListClustersRequest(
564+
name='projects/' + project,
565+
)
566+
567+
# Create response_pb
568+
zone = 'foo'
569+
failed_zone = 'bar'
570+
cluster_id1 = 'cluster-id1'
571+
cluster_id2 = 'cluster-id2'
572+
cluster_name1 = ('projects/' + project + '/zones/' + zone +
573+
'/clusters/' + cluster_id1)
574+
cluster_name2 = ('projects/' + project + '/zones/' + zone +
575+
'/clusters/' + cluster_id2)
576+
response_pb = messages_pb2.ListClustersResponse(
577+
failed_zones=[
578+
data_pb2.Zone(display_name=failed_zone),
579+
],
580+
clusters=[
581+
data_pb2.Cluster(
582+
name=cluster_name1,
583+
display_name=cluster_name1,
584+
serve_nodes=3,
585+
),
586+
data_pb2.Cluster(
587+
name=cluster_name2,
588+
display_name=cluster_name2,
589+
serve_nodes=3,
590+
),
591+
],
592+
)
593+
594+
# Patch the stub used by the API method.
595+
client._cluster_stub_internal = stub = _FakeStub(response_pb)
596+
597+
# Create expected_result.
598+
failed_zones = [failed_zone]
599+
clusters = [
600+
client.cluster(zone, cluster_id1),
601+
client.cluster(zone, cluster_id2),
602+
]
603+
expected_result = (clusters, failed_zones)
604+
605+
# Perform the method and check the result.
606+
result = client.list_clusters()
607+
self.assertEqual(result, expected_result)
608+
self.assertEqual(stub.method_calls, [(
609+
'ListClusters',
610+
(request_pb, timeout_seconds),
611+
{},
612+
)])
613+
550614

551615
class _Credentials(object):
552616

0 commit comments

Comments
 (0)