google-cloud-spanner 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/google-cloud-spanner.rb +106 -0
- data/lib/google/cloud/spanner.rb +382 -0
- data/lib/google/cloud/spanner/admin/database/v1.rb +17 -0
- data/lib/google/cloud/spanner/admin/database/v1/database_admin_client.rb +703 -0
- data/lib/google/cloud/spanner/admin/database/v1/database_admin_client_config.json +73 -0
- data/lib/google/cloud/spanner/admin/database/v1/doc/google/iam/v1/policy.rb +139 -0
- data/lib/google/cloud/spanner/admin/database/v1/doc/google/protobuf/any.rb +114 -0
- data/lib/google/cloud/spanner/admin/database/v1/doc/google/rpc/status.rb +83 -0
- data/lib/google/cloud/spanner/admin/database/v1/doc/google/spanner/admin/database/v1/spanner_database_admin.rb +188 -0
- data/lib/google/cloud/spanner/admin/instance/v1.rb +17 -0
- data/lib/google/cloud/spanner/admin/instance/v1/doc/google/iam/v1/policy.rb +139 -0
- data/lib/google/cloud/spanner/admin/instance/v1/doc/google/protobuf/any.rb +114 -0
- data/lib/google/cloud/spanner/admin/instance/v1/doc/google/protobuf/field_mask.rb +223 -0
- data/lib/google/cloud/spanner/admin/instance/v1/doc/google/rpc/status.rb +83 -0
- data/lib/google/cloud/spanner/admin/instance/v1/doc/google/spanner/admin/instance/v1/spanner_instance_admin.rb +268 -0
- data/lib/google/cloud/spanner/admin/instance/v1/instance_admin_client.rb +868 -0
- data/lib/google/cloud/spanner/admin/instance/v1/instance_admin_client_config.json +78 -0
- data/lib/google/cloud/spanner/client.rb +1034 -0
- data/lib/google/cloud/spanner/commit.rb +351 -0
- data/lib/google/cloud/spanner/convert.rb +311 -0
- data/lib/google/cloud/spanner/credentials.rb +32 -0
- data/lib/google/cloud/spanner/data.rb +199 -0
- data/lib/google/cloud/spanner/database.rb +377 -0
- data/lib/google/cloud/spanner/database/job.rb +179 -0
- data/lib/google/cloud/spanner/database/list.rb +171 -0
- data/lib/google/cloud/spanner/errors.rb +73 -0
- data/lib/google/cloud/spanner/fields.rb +252 -0
- data/lib/google/cloud/spanner/instance.rb +472 -0
- data/lib/google/cloud/spanner/instance/config.rb +99 -0
- data/lib/google/cloud/spanner/instance/config/list.rb +171 -0
- data/lib/google/cloud/spanner/instance/job.rb +197 -0
- data/lib/google/cloud/spanner/instance/list.rb +167 -0
- data/lib/google/cloud/spanner/policy.rb +201 -0
- data/lib/google/cloud/spanner/pool.rb +279 -0
- data/lib/google/cloud/spanner/project.rb +480 -0
- data/lib/google/cloud/spanner/range.rb +99 -0
- data/lib/google/cloud/spanner/results.rb +280 -0
- data/lib/google/cloud/spanner/service.rb +458 -0
- data/lib/google/cloud/spanner/session.rb +565 -0
- data/lib/google/cloud/spanner/snapshot.rb +260 -0
- data/lib/google/cloud/spanner/transaction.rb +533 -0
- data/lib/google/cloud/spanner/v1.rb +17 -0
- data/lib/google/cloud/spanner/v1/doc/google/protobuf/duration.rb +77 -0
- data/lib/google/cloud/spanner/v1/doc/google/protobuf/struct.rb +73 -0
- data/lib/google/cloud/spanner/v1/doc/google/protobuf/timestamp.rb +81 -0
- data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/keys.rb +148 -0
- data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/mutation.rb +80 -0
- data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/query_plan.rb +120 -0
- data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/result_set.rb +175 -0
- data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/spanner.rb +206 -0
- data/lib/google/cloud/spanner/v1/doc/google/spanner/v1/transaction.rb +351 -0
- data/lib/google/cloud/spanner/v1/spanner_client.rb +850 -0
- data/lib/google/cloud/spanner/v1/spanner_client_config.json +78 -0
- data/lib/google/cloud/spanner/version.rb +22 -0
- data/lib/google/spanner/admin/database/v1/spanner_database_admin_pb.rb +85 -0
- data/lib/google/spanner/admin/database/v1/spanner_database_admin_services_pb.rb +95 -0
- data/lib/google/spanner/admin/instance/v1/spanner_instance_admin_pb.rb +106 -0
- data/lib/google/spanner/admin/instance/v1/spanner_instance_admin_services_pb.rb +180 -0
- data/lib/google/spanner/v1/keys_pb.rb +33 -0
- data/lib/google/spanner/v1/mutation_pb.rb +38 -0
- data/lib/google/spanner/v1/query_plan_pb.rb +47 -0
- data/lib/google/spanner/v1/result_set_pb.rb +43 -0
- data/lib/google/spanner/v1/spanner_pb.rb +90 -0
- data/lib/google/spanner/v1/spanner_services_pb.rb +131 -0
- data/lib/google/spanner/v1/transaction_pb.rb +51 -0
- data/lib/google/spanner/v1/type_pb.rb +43 -0
- metadata +309 -0
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
# Copyright 2016 Google Inc. All rights reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
require "google/cloud/spanner/instance/job"
|
|
17
|
+
require "google/cloud/spanner/instance/list"
|
|
18
|
+
require "google/cloud/spanner/instance/config"
|
|
19
|
+
require "google/cloud/spanner/database"
|
|
20
|
+
require "google/cloud/spanner/policy"
|
|
21
|
+
|
|
22
|
+
module Google
|
|
23
|
+
module Cloud
|
|
24
|
+
module Spanner
|
|
25
|
+
##
|
|
26
|
+
# # Instance
|
|
27
|
+
#
|
|
28
|
+
# Represents a Cloud Spanner instance. Instances are dedicated Cloud
|
|
29
|
+
# Spanner serving and storage resources to be used by Cloud Spanner
|
|
30
|
+
# databases. Instances offer isolation: problems with databases in one
|
|
31
|
+
# instance will not affect other instances. However, within an instance
|
|
32
|
+
# databases can affect each other. For example, if one database in an
|
|
33
|
+
# instance receives a lot of requests and consumes most of the instance
|
|
34
|
+
# resources, fewer resources are available for other databases in that
|
|
35
|
+
# instance, and their performance may suffer.
|
|
36
|
+
#
|
|
37
|
+
# See {Google::Cloud::Spanner::Project#instances},
|
|
38
|
+
# {Google::Cloud::Spanner::Project#instance}, and
|
|
39
|
+
# {Google::Cloud::Spanner::Project#create_instance}.
|
|
40
|
+
#
|
|
41
|
+
# @example
|
|
42
|
+
# require "google/cloud/spanner"
|
|
43
|
+
#
|
|
44
|
+
# spanner = Google::Cloud::Spanner.new
|
|
45
|
+
#
|
|
46
|
+
# job = spanner.create_instance "my-new-instance",
|
|
47
|
+
# name: "My New Instance",
|
|
48
|
+
# config: "regional-us-central1",
|
|
49
|
+
# nodes: 5,
|
|
50
|
+
# labels: { production: :env }
|
|
51
|
+
#
|
|
52
|
+
# job.done? #=> false
|
|
53
|
+
# job.reload! # API call
|
|
54
|
+
# job.done? #=> true
|
|
55
|
+
#
|
|
56
|
+
# instance = spanner.instance "my-new-instance"
|
|
57
|
+
#
|
|
58
|
+
class Instance
|
|
59
|
+
##
|
|
60
|
+
# @private The gRPC Service object.
|
|
61
|
+
attr_accessor :service
|
|
62
|
+
|
|
63
|
+
# @private Creates a new Instance instance.
|
|
64
|
+
def initialize grpc, service
|
|
65
|
+
@grpc = grpc
|
|
66
|
+
@service = service
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# The unique identifier for the project.
|
|
70
|
+
# @return [String]
|
|
71
|
+
def project_id
|
|
72
|
+
Admin::Instance::V1::InstanceAdminClient
|
|
73
|
+
.match_project_from_instance_name @grpc.name
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# The unique identifier for the instance.
|
|
77
|
+
# @return [String]
|
|
78
|
+
def instance_id
|
|
79
|
+
Admin::Instance::V1::InstanceAdminClient
|
|
80
|
+
.match_instance_from_instance_name @grpc.name
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
##
|
|
84
|
+
# The full path for the instance resource. Values are of the form
|
|
85
|
+
# `projects/<project_id>/instances/<instance_id>`.
|
|
86
|
+
# @return [String]
|
|
87
|
+
def path
|
|
88
|
+
@grpc.name
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
##
|
|
92
|
+
# The descriptive name for this instance as it appears in UIs. Must be
|
|
93
|
+
# unique per project and between 4 and 30 characters in length.
|
|
94
|
+
# @return [String]
|
|
95
|
+
def name
|
|
96
|
+
@grpc.display_name
|
|
97
|
+
end
|
|
98
|
+
alias_method :display_name, :name
|
|
99
|
+
|
|
100
|
+
##
|
|
101
|
+
# The instance configuration resource.
|
|
102
|
+
# @return [Instance::Config]
|
|
103
|
+
def config
|
|
104
|
+
ensure_service!
|
|
105
|
+
config_grpc = service.get_instance_config @grpc.config
|
|
106
|
+
Instance::Config.from_grpc config_grpc
|
|
107
|
+
rescue Google::Cloud::NotFoundError
|
|
108
|
+
@grpc.config
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
##
|
|
112
|
+
# Updates the descriptive name for this instance as it appears in UIs.
|
|
113
|
+
# @param display_name [String] The descriptive name for this instance.
|
|
114
|
+
def name= display_name
|
|
115
|
+
@grpc.display_name = display_name
|
|
116
|
+
end
|
|
117
|
+
alias_method :display_name=, :name=
|
|
118
|
+
|
|
119
|
+
##
|
|
120
|
+
# The number of nodes allocated to this instance.
|
|
121
|
+
# @return [Integer]
|
|
122
|
+
def nodes
|
|
123
|
+
@grpc.node_count
|
|
124
|
+
end
|
|
125
|
+
alias_method :node_count, :nodes
|
|
126
|
+
|
|
127
|
+
##
|
|
128
|
+
# Updates the number of nodes allocated to this instance.
|
|
129
|
+
# @param nodes [Integer] The number of nodes allocated to this instance.
|
|
130
|
+
def nodes= nodes
|
|
131
|
+
@grpc.node_count = nodes
|
|
132
|
+
end
|
|
133
|
+
alias_method :node_count=, :nodes=
|
|
134
|
+
|
|
135
|
+
##
|
|
136
|
+
# The current instance state. Possible values are `:CREATING` and
|
|
137
|
+
# `:READY`.
|
|
138
|
+
# @return [Symbol]
|
|
139
|
+
def state
|
|
140
|
+
@grpc.state
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
##
|
|
144
|
+
# The instance is still being created. Resources may not be available
|
|
145
|
+
# yet, and operations such as database creation may not work.
|
|
146
|
+
# @return [Boolean]
|
|
147
|
+
def creating?
|
|
148
|
+
state == :CREATING
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
##
|
|
152
|
+
# The instance is fully created and ready to do work such as creating
|
|
153
|
+
# databases.
|
|
154
|
+
# @return [Boolean]
|
|
155
|
+
def ready?
|
|
156
|
+
state == :READY
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
##
|
|
160
|
+
# Cloud Labels are a flexible and lightweight mechanism for organizing
|
|
161
|
+
# cloud resources into groups that reflect a customer's organizational
|
|
162
|
+
# needs and deployment strategies. Cloud Labels can be used to filter
|
|
163
|
+
# collections of resources. They can be used to control how resource
|
|
164
|
+
# metrics are aggregated. And they can be used as arguments to policy
|
|
165
|
+
# management rules (e.g. route, firewall, load balancing, etc.).
|
|
166
|
+
#
|
|
167
|
+
# * Label keys must be between 1 and 63 characters long and must conform
|
|
168
|
+
# to the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
|
|
169
|
+
# * Label values must be between 0 and 63 characters long and must
|
|
170
|
+
# conform to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
|
|
171
|
+
# * No more than 64 labels can be associated with a given resource.
|
|
172
|
+
#
|
|
173
|
+
# @return [Hash{String=>String}] The label keys and values in a hash.
|
|
174
|
+
#
|
|
175
|
+
def labels
|
|
176
|
+
@grpc.labels
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
##
|
|
180
|
+
# Updates the Cloud Labels.
|
|
181
|
+
# @param labels [Hash{String=>String}] The Cloud Labels.
|
|
182
|
+
def labels= labels
|
|
183
|
+
@grpc.labels = Google::Protobuf::Map.new(
|
|
184
|
+
:string, :string,
|
|
185
|
+
Hash[labels.map { |k, v| [String(k), String(v)] }])
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def save
|
|
189
|
+
job_grpc = service.update_instance @grpc
|
|
190
|
+
Instance::Job.from_grpc job_grpc, service
|
|
191
|
+
end
|
|
192
|
+
alias_method :update, :save
|
|
193
|
+
|
|
194
|
+
##
|
|
195
|
+
# Permanently deletes the instance.
|
|
196
|
+
#
|
|
197
|
+
# Immediately upon completion of the request:
|
|
198
|
+
#
|
|
199
|
+
# * Billing ceases for all of the instance's reserved resources.
|
|
200
|
+
#
|
|
201
|
+
# Soon afterward:
|
|
202
|
+
#
|
|
203
|
+
# * The instance and all of its databases immediately and irrevocably
|
|
204
|
+
# disappear from the API. All data in the databases is permanently
|
|
205
|
+
# deleted.
|
|
206
|
+
#
|
|
207
|
+
# @return [Boolean] Returns `true` if the instance was deleted.
|
|
208
|
+
#
|
|
209
|
+
# @example
|
|
210
|
+
# require "google/cloud/spanner"
|
|
211
|
+
#
|
|
212
|
+
# spanner = Google::Cloud::Spanner.new
|
|
213
|
+
#
|
|
214
|
+
# instance = spanner.instance "my-instance"
|
|
215
|
+
# instance.delete
|
|
216
|
+
#
|
|
217
|
+
def delete
|
|
218
|
+
ensure_service!
|
|
219
|
+
service.delete_instance path
|
|
220
|
+
true
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
##
|
|
224
|
+
# Retrieves the list of databases for the given instance.
|
|
225
|
+
#
|
|
226
|
+
# @param [String] token The `token` value returned by the last call to
|
|
227
|
+
# `databases`; indicates that this is a continuation of a call,
|
|
228
|
+
# and that the system should return the next page of data.
|
|
229
|
+
# @param [Integer] max Maximum number of databases to return.
|
|
230
|
+
#
|
|
231
|
+
# @return [Array<Google::Cloud::Spanner::Database>] (See
|
|
232
|
+
# {Google::Cloud::Spanner::Database::List})
|
|
233
|
+
#
|
|
234
|
+
# @example
|
|
235
|
+
# require "google/cloud/spanner"
|
|
236
|
+
#
|
|
237
|
+
# spanner = Google::Cloud::Spanner.new
|
|
238
|
+
#
|
|
239
|
+
# instance = spanner.instance "my-instance"
|
|
240
|
+
# databases = instance.databases
|
|
241
|
+
# databases.each do |database|
|
|
242
|
+
# puts database.database_id
|
|
243
|
+
# end
|
|
244
|
+
#
|
|
245
|
+
# @example Retrieve all: (See {Instance::Config::List::List#all})
|
|
246
|
+
# require "google/cloud/spanner"
|
|
247
|
+
#
|
|
248
|
+
# spanner = Google::Cloud::Spanner.new
|
|
249
|
+
#
|
|
250
|
+
# instance = spanner.instance "my-instance"
|
|
251
|
+
# databases = instance.databases
|
|
252
|
+
# databases.all do |database|
|
|
253
|
+
# puts database.database_id
|
|
254
|
+
# end
|
|
255
|
+
#
|
|
256
|
+
def databases token: nil, max: nil
|
|
257
|
+
ensure_service!
|
|
258
|
+
grpc = service.list_databases instance_id, token: token, max: max
|
|
259
|
+
Database::List.from_grpc grpc, service, instance_id, max
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
##
|
|
263
|
+
# Retrieves a database belonging to the instance by identifier.
|
|
264
|
+
#
|
|
265
|
+
# @param [String] database_id The unique identifier for the database.
|
|
266
|
+
#
|
|
267
|
+
# @return [Google::Cloud::Spanner::Database, nil] Returns `nil`
|
|
268
|
+
# if database does not exist.
|
|
269
|
+
#
|
|
270
|
+
# @example
|
|
271
|
+
# require "google/cloud/spanner"
|
|
272
|
+
#
|
|
273
|
+
# spanner = Google::Cloud::Spanner.new
|
|
274
|
+
# instance = spanner.instance "my-instance"
|
|
275
|
+
# database = instance.database "my-database"
|
|
276
|
+
#
|
|
277
|
+
# @example Will return `nil` if instance does not exist.
|
|
278
|
+
# require "google/cloud/spanner"
|
|
279
|
+
#
|
|
280
|
+
# spanner = Google::Cloud::Spanner.new
|
|
281
|
+
# instance = spanner.instance "my-instance"
|
|
282
|
+
# database = instance.database "my-database" #=> nil
|
|
283
|
+
#
|
|
284
|
+
def database database_id
|
|
285
|
+
ensure_service!
|
|
286
|
+
grpc = service.get_database instance_id, database_id
|
|
287
|
+
Database.from_grpc grpc, service
|
|
288
|
+
rescue Google::Cloud::NotFoundError
|
|
289
|
+
nil
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
##
|
|
293
|
+
# Creates a database and starts preparing it to begin serving.
|
|
294
|
+
#
|
|
295
|
+
# See {Database::Job}.
|
|
296
|
+
#
|
|
297
|
+
# @param [String] database_id The unique identifier for the database,
|
|
298
|
+
# which cannot be changed after the database is created. Values are of
|
|
299
|
+
# the form `[a-z][a-z0-9_\-]*[a-z0-9]` and must be between 2 and 30
|
|
300
|
+
# characters in length. Required.
|
|
301
|
+
# @param [Array<String>] statements DDL statements to run inside the
|
|
302
|
+
# newly created database. Statements can create tables, indexes, etc.
|
|
303
|
+
# These statements execute atomically with the creation of the
|
|
304
|
+
# database: if there is an error in any statement, the database is not
|
|
305
|
+
# created. Optional.
|
|
306
|
+
#
|
|
307
|
+
# @return [Database::Job] The job representing the long-running,
|
|
308
|
+
# asynchronous processing of a database create operation.
|
|
309
|
+
#
|
|
310
|
+
# @example
|
|
311
|
+
# require "google/cloud/spanner"
|
|
312
|
+
#
|
|
313
|
+
# spanner = Google::Cloud::Spanner.new
|
|
314
|
+
#
|
|
315
|
+
# instance = spanner.instance "my-instance"
|
|
316
|
+
# job = instance.create_database "my-new-database"
|
|
317
|
+
#
|
|
318
|
+
# job.done? #=> false
|
|
319
|
+
# job.reload! # API call
|
|
320
|
+
# job.done? #=> true
|
|
321
|
+
# database = job.database
|
|
322
|
+
#
|
|
323
|
+
def create_database database_id, statements: []
|
|
324
|
+
grpc = service.create_database instance_id, database_id,
|
|
325
|
+
statements: statements
|
|
326
|
+
Database::Job.from_grpc grpc, service
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
##
|
|
330
|
+
# Gets the [Cloud IAM](https://cloud.google.com/iam/) access control
|
|
331
|
+
# policy for this instance.
|
|
332
|
+
#
|
|
333
|
+
# @see https://cloud.google.com/spanner/reference/rpc/google.iam.v1#google.iam.v1.Policy
|
|
334
|
+
# google.iam.v1.IAMPolicy
|
|
335
|
+
#
|
|
336
|
+
# @yield [policy] A block for updating the policy. The latest policy
|
|
337
|
+
# will be read from the Spanner service and passed to the block. After
|
|
338
|
+
# the block completes, the modified policy will be written to the
|
|
339
|
+
# service.
|
|
340
|
+
# @yieldparam [Policy] policy the current Cloud IAM Policy for this
|
|
341
|
+
# instance
|
|
342
|
+
#
|
|
343
|
+
# @return [Policy] The current Cloud IAM Policy for this instance.
|
|
344
|
+
#
|
|
345
|
+
# @example
|
|
346
|
+
# require "google/cloud/spanner"
|
|
347
|
+
#
|
|
348
|
+
# spanner = Google::Cloud::Spanner.new
|
|
349
|
+
# instance = spanner.instance "my-instance"
|
|
350
|
+
#
|
|
351
|
+
# policy = instance.policy
|
|
352
|
+
#
|
|
353
|
+
# @example Update the policy by passing a block:
|
|
354
|
+
# require "google/cloud/spanner"
|
|
355
|
+
#
|
|
356
|
+
# spanner = Google::Cloud::Spanner.new
|
|
357
|
+
# instance = spanner.instance "my-instance"
|
|
358
|
+
#
|
|
359
|
+
# instance.policy do |p|
|
|
360
|
+
# p.add "roles/owner", "user:owner@example.com"
|
|
361
|
+
# end # 2 API calls
|
|
362
|
+
#
|
|
363
|
+
def policy
|
|
364
|
+
ensure_service!
|
|
365
|
+
grpc = service.get_instance_policy path
|
|
366
|
+
policy = Policy.from_grpc grpc
|
|
367
|
+
return policy unless block_given?
|
|
368
|
+
yield policy
|
|
369
|
+
self.policy = policy
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
##
|
|
373
|
+
# Updates the [Cloud IAM](https://cloud.google.com/iam/) access control
|
|
374
|
+
# policy for this instance. The policy should be read from {#policy}.
|
|
375
|
+
# See {Google::Cloud::Spanner::Policy} for an explanation of the policy
|
|
376
|
+
# `etag` property and how to modify policies.
|
|
377
|
+
#
|
|
378
|
+
# You can also update the policy by passing a block to {#policy}, which
|
|
379
|
+
# will call this method internally after the block completes.
|
|
380
|
+
#
|
|
381
|
+
# @see https://cloud.google.com/spanner/reference/rpc/google.iam.v1#google.iam.v1.Policy
|
|
382
|
+
# google.iam.v1.IAMPolicy
|
|
383
|
+
#
|
|
384
|
+
# @param [Policy] new_policy a new or modified Cloud IAM Policy for this
|
|
385
|
+
# instance
|
|
386
|
+
#
|
|
387
|
+
# @return [Policy] The policy returned by the API update operation.
|
|
388
|
+
#
|
|
389
|
+
# @example
|
|
390
|
+
# require "google/cloud/spanner"
|
|
391
|
+
#
|
|
392
|
+
# spanner = Google::Cloud::Spanner.new
|
|
393
|
+
# instance = spanner.instance "my-instance"
|
|
394
|
+
#
|
|
395
|
+
# policy = instance.policy # API call
|
|
396
|
+
#
|
|
397
|
+
# policy.add "roles/owner", "user:owner@example.com"
|
|
398
|
+
#
|
|
399
|
+
# instance.policy = policy # API call
|
|
400
|
+
#
|
|
401
|
+
def policy= new_policy
|
|
402
|
+
ensure_service!
|
|
403
|
+
grpc = service.set_instance_policy path, new_policy.to_grpc
|
|
404
|
+
Policy.from_grpc grpc
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
##
|
|
408
|
+
# Tests the specified permissions against the [Cloud
|
|
409
|
+
# IAM](https://cloud.google.com/iam/) access control policy.
|
|
410
|
+
#
|
|
411
|
+
# @see https://cloud.google.com/iam/docs/managing-policies Managing
|
|
412
|
+
# Policies
|
|
413
|
+
#
|
|
414
|
+
# @param [String, Array<String>] permissions The set of permissions to
|
|
415
|
+
# check access for. Permissions with wildcards (such as `*` or
|
|
416
|
+
# `storage.*`) are not allowed.
|
|
417
|
+
#
|
|
418
|
+
# The permissions that can be checked on a instance are:
|
|
419
|
+
#
|
|
420
|
+
# * pubsub.instances.create
|
|
421
|
+
# * pubsub.instances.list
|
|
422
|
+
# * pubsub.instances.get
|
|
423
|
+
# * pubsub.instances.getIamPolicy
|
|
424
|
+
# * pubsub.instances.update
|
|
425
|
+
# * pubsub.instances.setIamPolicy
|
|
426
|
+
# * pubsub.instances.delete
|
|
427
|
+
#
|
|
428
|
+
# @return [Array<Strings>] The permissions that have access.
|
|
429
|
+
#
|
|
430
|
+
# @example
|
|
431
|
+
# require "google/cloud/spanner"
|
|
432
|
+
#
|
|
433
|
+
# spanner = Google::Cloud::Spanner.new
|
|
434
|
+
# instance = spanner.instance "my-instance"
|
|
435
|
+
# perms = instance.test_permissions "spanner.instances.get",
|
|
436
|
+
# "spanner.instances.update"
|
|
437
|
+
# perms.include? "spanner.instances.get" #=> true
|
|
438
|
+
# perms.include? "spanner.instances.update" #=> false
|
|
439
|
+
#
|
|
440
|
+
def test_permissions *permissions
|
|
441
|
+
permissions = Array(permissions).flatten
|
|
442
|
+
permissions = Array(permissions).flatten
|
|
443
|
+
ensure_service!
|
|
444
|
+
grpc = service.test_instance_permissions path, permissions
|
|
445
|
+
grpc.permissions
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
##
|
|
449
|
+
# @private Creates a new Instance instance from a
|
|
450
|
+
# Google::Spanner::Admin::Instance::V1::Instance.
|
|
451
|
+
def self.from_grpc grpc, service
|
|
452
|
+
new grpc, service
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
protected
|
|
456
|
+
|
|
457
|
+
##
|
|
458
|
+
# @private Raise an error unless an active connection to the service is
|
|
459
|
+
# available.
|
|
460
|
+
def ensure_service!
|
|
461
|
+
fail "Must have active connection to service" unless service
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
def instance_config_path name
|
|
465
|
+
return name if name.to_s.include? "/"
|
|
466
|
+
Admin::Instance::V1::InstanceAdminClient.instance_config_path(
|
|
467
|
+
project, name.to_s)
|
|
468
|
+
end
|
|
469
|
+
end
|
|
470
|
+
end
|
|
471
|
+
end
|
|
472
|
+
end
|