diff --git a/spanner/cloud-client/snippets.py b/spanner/cloud-client/snippets.py index 26402bcd3be..9c0eb3d64b9 100644 --- a/spanner/cloud-client/snippets.py +++ b/spanner/cloud-client/snippets.py @@ -28,6 +28,31 @@ from google.cloud.spanner_v1 import param_types +# [START spanner_create_instance] +def create_instance(instance_id): + """Creates an instance.""" + spanner_client = spanner.Client() + + config_name = "{}/instanceConfigs/regional-us-central1".format( + spanner_client.project_name + ) + + instance = spanner_client.instance( + instance_id, + configuration_name=config_name, + display_name="This is a display name.", + node_count=1, + ) + + operation = instance.create() + + print('Waiting for operation to complete...') + operation.result(120) + + print('Created instance {}'.format(instance_id)) +# [END spanner_create_instance] + + # [START spanner_create_database] def create_database(instance_id, database_id): """Creates a database and tables for sample data.""" @@ -1455,6 +1480,7 @@ def create_client_with_query_options(instance_id, database_id): default='example_db') subparsers = parser.add_subparsers(dest='command') + subparsers.add_parser('create_instance', help=create_instance.__doc__) subparsers.add_parser('create_database', help=create_database.__doc__) subparsers.add_parser('insert_data', help=insert_data.__doc__) subparsers.add_parser('delete_data', help=delete_data.__doc__) @@ -1567,7 +1593,9 @@ def create_client_with_query_options(instance_id, database_id): args = parser.parse_args() - if args.command == 'create_database': + if args.command == 'create_instance': + create_instance(args.instance_id) + elif args.command == 'create_database': create_database(args.instance_id, args.database_id) elif args.command == 'insert_data': insert_data(args.instance_id, args.database_id) diff --git a/spanner/cloud-client/snippets_test.py b/spanner/cloud-client/snippets_test.py index a33c4424587..49a11dce91a 100644 --- a/spanner/cloud-client/snippets_test.py +++ b/spanner/cloud-client/snippets_test.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -import os import time import uuid @@ -22,19 +21,27 @@ import snippets +def unique_instance_id(): + """ Creates a unique id for the database. """ + return f'test-instance-{uuid.uuid4().hex[:10]}' + + def unique_database_id(): """ Creates a unique id for the database. """ return f'test-db-{uuid.uuid4().hex[:10]}' -INSTANCE_ID = os.environ['SPANNER_INSTANCE'] +INSTANCE_ID = unique_instance_id() DATABASE_ID = unique_database_id() @pytest.fixture(scope='module') def spanner_instance(): + snippets.create_instance(INSTANCE_ID) spanner_client = spanner.Client() - return spanner_client.instance(INSTANCE_ID) + instance = spanner_client.instance(INSTANCE_ID) + yield instance + instance.delete() @pytest.fixture(scope='module') @@ -46,6 +53,11 @@ def database(spanner_instance): db.drop() +def test_create_instance(spanner_instance): + # Reload will only succeed if the instance exists. + spanner_instance.reload() + + def test_create_database(database): # Reload will only succeed if the database exists. database.reload()