Skip to content
Draft
Show file tree
Hide file tree
Changes from 6 commits
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
6 changes: 3 additions & 3 deletions packages/google-cloud-bigtable/CONTRIBUTING.rst
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ Code samples and snippets live in the `samples/` catalogue. Feel free to
provide more examples, but make sure to write tests for those examples.
Each folder containing example code requires its own `noxfile.py` script
which automates testing. If you decide to create a new folder, you can
base it on the `samples/data_client_async/snippets` folder (providing `noxfile.py` and
base it on the `samples/data_client/snippets` folder (providing `noxfile.py` and
the requirements files).

The tests will run against a real Google Cloud Project, so you should
Expand All @@ -194,11 +194,11 @@ configure them just like the System Tests.
- To run sample tests, you can execute::

# Run all tests in a folder
$ cd samples/data_client_async/snippets
$ cd samples/data_client/snippets
$ nox -s py-3.14

# Run a single sample test
$ cd samples/data_client_async/snippets
$ cd samples/data_client/snippets
$ nox -s py-3.14 -- -k <name of test>

********************************************
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
#!/usr/bin/env python

# Copyright 2026 Google LLC
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Demonstrates how to run instance admin operations using BigtableInstanceAdminClient.

Prerequisites:
- Create a Cloud Bigtable project.
- Set your Google Application Default Credentials.
"""

import argparse

from google.api_core.exceptions import NotFound
from google.cloud import bigtable_admin_v2


def run_instance_operations(project_id, instance_id, cluster_id):
client = bigtable_admin_v2.BigtableInstanceAdminClient()
project_path = client.common_project_path(project_id)
instance_path = client.instance_path(project_id, instance_id)

# [START bigtable_check_instance_exists]
try:
instance = client.get_instance(name=instance_path)
print(f"Instance {instance_id} already exists.")
except NotFound:
print(f"Instance {instance_id} does not exist.")
# [END bigtable_check_instance_exists]

# [START bigtable_create_prod_instance]
cluster_path = client.cluster_path(project_id, instance_id, cluster_id)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The variable cluster_path is defined here but is never used anywhere in the run_instance_operations function. Consider removing it to clean up the code.

cluster = bigtable_admin_v2.Cluster(
location=client.common_location_path(project_id, "us-central1-f"),
serve_nodes=1,
default_storage_type=bigtable_admin_v2.StorageType.SSD,
)
instance_obj = bigtable_admin_v2.Instance(
display_name=instance_id,
labels={"prod-label": "prod-label"},
type_=bigtable_admin_v2.Instance.Type.PRODUCTION,
)

try:
client.get_instance(name=instance_path)
except NotFound:
print("\nCreating an instance")
operation = client.create_instance(
parent=project_path,
instance_id=instance_id,
instance=instance_obj,
clusters={cluster_id: cluster},
)
operation.result(timeout=480)
print(f"\nCreated instance: {instance_id}")
# [END bigtable_create_prod_instance]

# [START bigtable_list_instances]
print("\nListing instances:")
instances_response = client.list_instances(parent=project_path)
for instance in instances_response.instances:
print(instance.name.split("/")[-1])
# [END bigtable_list_instances]

# [START bigtable_get_instance]
inst = client.get_instance(name=instance_path)
print(f"\nName of instance: {inst.display_name}\nLabels: {dict(inst.labels)}")
# [END bigtable_get_instance]

# [START bigtable_get_clusters]
print("\nListing clusters...")
clusters_response = client.list_clusters(parent=instance_path)
for cluster in clusters_response.clusters:
print(cluster.name.split("/")[-1])
# [END bigtable_get_clusters]


def delete_instance(project_id, instance_id):
client = bigtable_admin_v2.BigtableInstanceAdminClient()
instance_path = client.instance_path(project_id, instance_id)

# [START bigtable_delete_instance]
print("\nDeleting instance")
try:
client.delete_instance(name=instance_path)
print(f"Deleted instance: {instance_id}")
except NotFound:
print(f"Instance {instance_id} does not exist.")
# [END bigtable_delete_instance]


def add_cluster(project_id, instance_id, cluster_id):
client = bigtable_admin_v2.BigtableInstanceAdminClient()
instance_path = client.instance_path(project_id, instance_id)
cluster_path = client.cluster_path(project_id, instance_id, cluster_id)

# [START bigtable_create_cluster]
print("\nListing clusters...")
clusters_response = client.list_clusters(parent=instance_path)
for cluster in clusters_response.clusters:
print(cluster.name.split("/")[-1])

new_cluster = bigtable_admin_v2.Cluster(
location=client.common_location_path(project_id, "us-central1-a"),
serve_nodes=1,
default_storage_type=bigtable_admin_v2.StorageType.SSD,
)
try:
client.get_cluster(name=cluster_path)
print(f"\nCluster not created, as {cluster_id} already exists.")
except NotFound:
operation = client.create_cluster(
parent=instance_path, cluster_id=cluster_id, cluster=new_cluster
)
operation.result(timeout=480)
print(f"\nCluster created: {cluster_id}")
# [END bigtable_create_cluster]


def delete_cluster(project_id, instance_id, cluster_id):
client = bigtable_admin_v2.BigtableInstanceAdminClient()
cluster_path = client.cluster_path(project_id, instance_id, cluster_id)

# [START bigtable_delete_cluster]
print("\nDeleting cluster")
try:
client.delete_cluster(name=cluster_path)
print(f"Cluster deleted: {cluster_id}")
except NotFound:
print(f"\nCluster {cluster_id} does not exist.")
# [END bigtable_delete_cluster]


if __name__ == "__main__":
parser = argparse.ArgumentParser(
description=__doc__, formatter_class=argparse.ArgumentDefaultsHelpFormatter
)
parser.add_argument(
"command",
help="run, del-instance, add-cluster or del-cluster.",
)
parser.add_argument("project_id", help="Your Cloud Platform project ID.")
parser.add_argument("instance_id", help="ID of the Cloud Bigtable instance.")
parser.add_argument("cluster_id", help="ID of the Cloud Bigtable cluster.")

args = parser.parse_args()

if args.command.lower() == "run":
run_instance_operations(args.project_id, args.instance_id, args.cluster_id)
elif args.command.lower() == "del-instance":
delete_instance(args.project_id, args.instance_id)
elif args.command.lower() == "add-cluster":
add_cluster(args.project_id, args.instance_id, args.cluster_id)
elif args.command.lower() == "del-cluster":
delete_cluster(args.project_id, args.instance_id, args.cluster_id)
Loading
Loading