|
29 | 29 | import time
|
30 | 30 |
|
31 | 31 | from google.cloud import spanner
|
| 32 | +from google.cloud.spanner_admin_instance_v1.types import spanner_instance_admin |
32 | 33 | from google.cloud.spanner_v1 import param_types
|
| 34 | +from google.protobuf import field_mask_pb2 # type: ignore |
33 | 35 |
|
34 | 36 | OPERATION_TIMEOUT_SECONDS = 240
|
35 | 37 |
|
@@ -2116,6 +2118,96 @@ def set_request_tag(instance_id, database_id):
|
2116 | 2118 | # [END spanner_set_request_tag]
|
2117 | 2119 |
|
2118 | 2120 |
|
| 2121 | +# [START spanner_create_instance_config] |
| 2122 | +def create_instance_config(user_config_name, base_config_id): |
| 2123 | + """Creates the new user-managed instance configuration using base instance config.""" |
| 2124 | + |
| 2125 | + # user_config_name = `custom-nam11` |
| 2126 | + # base_config_id = `projects/<project>/instanceConfigs/nam11` |
| 2127 | + spanner_client = spanner.Client() |
| 2128 | + base_config = spanner_client.instance_admin_api.get_instance_config( |
| 2129 | + name=base_config_id) |
| 2130 | + |
| 2131 | + # The replicas for the custom instance configuration must include all the replicas of the base |
| 2132 | + # configuration, in addition to at least one from the list of optional replicas of the base |
| 2133 | + # configuration. |
| 2134 | + replicas = [] |
| 2135 | + for replica in base_config.replicas: |
| 2136 | + replicas.append(replica) |
| 2137 | + replicas.append(base_config.optional_replicas[0]) |
| 2138 | + operation = spanner_client.instance_admin_api.create_instance_config( |
| 2139 | + parent=spanner_client.project_name, |
| 2140 | + instance_config_id=user_config_name, |
| 2141 | + instance_config=spanner_instance_admin.InstanceConfig( |
| 2142 | + name="{}/instanceConfigs/{}".format(spanner_client.project_name, user_config_name), |
| 2143 | + display_name="custom-python-samples", |
| 2144 | + config_type=spanner_instance_admin.InstanceConfig.Type.USER_MANAGED, |
| 2145 | + replicas=replicas, |
| 2146 | + base_config=base_config.name, |
| 2147 | + labels={ |
| 2148 | + "python_cloud_spanner_samples": "true" |
| 2149 | + } |
| 2150 | + )) |
| 2151 | + print("Waiting for operation to complete...") |
| 2152 | + operation.result(OPERATION_TIMEOUT_SECONDS) |
| 2153 | + |
| 2154 | + print("Created instance configuration {}".format(user_config_name)) |
| 2155 | + |
| 2156 | + |
| 2157 | +# [END spanner_create_instance_config] |
| 2158 | + |
| 2159 | +# [START spanner_update_instance_config] |
| 2160 | +def update_instance_config(user_config_name): |
| 2161 | + """Updates the user-managed instance configuration.""" |
| 2162 | + |
| 2163 | + # user_config_name = `custom-nam11` |
| 2164 | + spanner_client = spanner.Client() |
| 2165 | + config = spanner_client.instance_admin_api.get_instance_config( |
| 2166 | + name="{}/instanceConfigs/{}".format(spanner_client.project_name, user_config_name)) |
| 2167 | + config.display_name = "updated custom instance config" |
| 2168 | + config.labels["updated"] = "true" |
| 2169 | + operation = spanner_client.instance_admin_api.update_instance_config(instance_config=config, |
| 2170 | + update_mask=field_mask_pb2.FieldMask( |
| 2171 | + paths=["display_name", "labels"])) |
| 2172 | + print("Waiting for operation to complete...") |
| 2173 | + operation.result(OPERATION_TIMEOUT_SECONDS) |
| 2174 | + print("Updated instance configuration {}".format(user_config_name)) |
| 2175 | + |
| 2176 | + |
| 2177 | +# [END spanner_update_instance_config] |
| 2178 | + |
| 2179 | +# [START spanner_delete_instance_config] |
| 2180 | +def delete_instance_config(user_config_id): |
| 2181 | + """Deleted the user-managed instance configuration.""" |
| 2182 | + spanner_client = spanner.Client() |
| 2183 | + spanner_client.instance_admin_api.delete_instance_config( |
| 2184 | + name=user_config_id) |
| 2185 | + print("Instance config {} successfully deleted".format(user_config_id)) |
| 2186 | + |
| 2187 | + |
| 2188 | +# [END spanner_delete_instance_config] |
| 2189 | + |
| 2190 | + |
| 2191 | +# [START spanner_list_instance_config_operations] |
| 2192 | +def list_instance_config_operations(): |
| 2193 | + """List the user-managed instance configuration operations.""" |
| 2194 | + spanner_client = spanner.Client() |
| 2195 | + operations = spanner_client.instance_admin_api.list_instance_config_operations( |
| 2196 | + request=spanner_instance_admin.ListInstanceConfigOperationsRequest(parent=spanner_client.project_name, |
| 2197 | + filter="(metadata.@type=type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)")) |
| 2198 | + for op in operations: |
| 2199 | + metadata = spanner_instance_admin.CreateInstanceConfigMetadata.pb(spanner_instance_admin.CreateInstanceConfigMetadata()) |
| 2200 | + op.metadata.Unpack(metadata) |
| 2201 | + print( |
| 2202 | + "List instance config operations {} is {}% completed.".format( |
| 2203 | + metadata.instance_config.name, metadata.progress.progress_percent |
| 2204 | + ) |
| 2205 | + ) |
| 2206 | + |
| 2207 | + |
| 2208 | +# [END spanner_list_instance_config_operations] |
| 2209 | + |
| 2210 | + |
2119 | 2211 | if __name__ == "__main__": # noqa: C901
|
2120 | 2212 | parser = argparse.ArgumentParser(
|
2121 | 2213 | description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter
|
|
0 commit comments