google-cloud-spanner 2.5.0 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/lib/google/cloud/spanner/backup.rb +65 -2
- data/lib/google/cloud/spanner/database.rb +81 -2
- data/lib/google/cloud/spanner/instance.rb +30 -2
- data/lib/google/cloud/spanner/project.rb +32 -2
- data/lib/google/cloud/spanner/service.rb +10 -6
- data/lib/google/cloud/spanner/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0faea5b1e581fbc3981a52fa5ea8b2f1674f79fc71bc3000639020739747b5ea
|
4
|
+
data.tar.gz: bd4d345cbf3cefc8dbba31a2d74d4f729e8a5d9e3364277ba3d168d572c2538b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b315bed1e2a9ef29f956333086d2ad35a77f8d8c305440fea90830b89d074269c8969cb5c6002a33f3f660974defa165eb270d4671338a3f7df43c07015d78f
|
7
|
+
data.tar.gz: c2807ef7f0f1289a6515114c34aba03dd3959a50467f4c2fa6ef22efd88c2b75db87b40e1ec8b5a3b29a7e334f5c96d2fc07a1196e3100a3a6c518d726da3ecd
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# Release History
|
2
2
|
|
3
|
+
### 2.6.0 / 2021-03-31
|
4
|
+
|
5
|
+
#### Features
|
6
|
+
|
7
|
+
* add cmek backup support - ext of [#8142](https://www.github.com/googleapis/google-cloud-ruby/issues/8142) ([#8168](https://www.github.com/googleapis/google-cloud-ruby/issues/8168))
|
8
|
+
* feat(spanner): add cmek backup support
|
9
|
+
* Add encryption_config to restore database.
|
10
|
+
* doc example for backup create with encryption config
|
11
|
+
* create backup with encryption type
|
12
|
+
* backup restore with encryption type changes
|
13
|
+
* fix typo
|
14
|
+
* add cmek db support
|
15
|
+
|
3
16
|
### 2.5.0 / 2021-03-10
|
4
17
|
|
5
18
|
#### Features
|
@@ -88,6 +88,12 @@ module Google
|
|
88
88
|
@grpc.database.split("/")[5]
|
89
89
|
end
|
90
90
|
|
91
|
+
# Encryption information for a given resource.
|
92
|
+
# @return [Google::Cloud::Spanner::Admin::Database::V1::EncryptionInfo, nil]
|
93
|
+
def encryption_info
|
94
|
+
@grpc.encryption_info
|
95
|
+
end
|
96
|
+
|
91
97
|
##
|
92
98
|
# The full path for the backup. Values are of the form
|
93
99
|
# `projects/<project>/instances/<instance>/backups/<backup_id>`.
|
@@ -245,6 +251,29 @@ module Google
|
|
245
251
|
# project and have the same instance configuration as the instance
|
246
252
|
# containing the source backup. Optional. Default value is same as a
|
247
253
|
# backup instance.
|
254
|
+
# @param [Hash] encryption_config An encryption configuration describing
|
255
|
+
# the encryption type and key resources in Cloud KMS used to
|
256
|
+
# encrypt/decrypt the database to restore to. If this field is not
|
257
|
+
# specified, the restored database will use the same encryption
|
258
|
+
# configuration as the backup by default. Optional. The following
|
259
|
+
# settings can be provided:
|
260
|
+
#
|
261
|
+
# * `:kms_key_name` (String) The name of KMS key to use which should
|
262
|
+
# be the full path, e.g., `projects/<project>/locations/<location>\
|
263
|
+
# /keyRings/<key_ring>/cryptoKeys/<kms_key_name>`
|
264
|
+
# This field should be set only when encryption type
|
265
|
+
# `:CUSTOMER_MANAGED_ENCRYPTION`.
|
266
|
+
# * `:encryption_type` (Symbol) The encryption type of the backup.
|
267
|
+
# Valid values are:
|
268
|
+
# 1. `:USE_CONFIG_DEFAULT_OR_BACKUP_ENCRYPTION` - This is the default
|
269
|
+
# option when config is not specified.
|
270
|
+
# 2. `:GOOGLE_DEFAULT_ENCRYPTION` - Google default encryption.
|
271
|
+
# 3. `:CUSTOMER_MANAGED_ENCRYPTION` - Use customer managed encryption.
|
272
|
+
# If specified, `:kms_key_name` must contain a valid Cloud KMS key.
|
273
|
+
#
|
274
|
+
# @raise [ArgumentError] if `:CUSTOMER_MANAGED_ENCRYPTION` specified without
|
275
|
+
# customer managed kms key.
|
276
|
+
#
|
248
277
|
# @return [Database] Restored database.
|
249
278
|
#
|
250
279
|
# @example
|
@@ -288,16 +317,50 @@ module Google
|
|
288
317
|
# database = job.database
|
289
318
|
# end
|
290
319
|
#
|
291
|
-
|
320
|
+
# @example Restore database with encryption config
|
321
|
+
# require "google/cloud/spanner"
|
322
|
+
#
|
323
|
+
# spanner = Google::Cloud::Spanner.new
|
324
|
+
#
|
325
|
+
# instance = spanner.instance "my-instance"
|
326
|
+
# backup = instance.backup "my-backup"
|
327
|
+
# kms_key_name = "projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<kms_key_name>"
|
328
|
+
# encryption_config = {
|
329
|
+
# kms_key_name: kms_key_name,
|
330
|
+
# encryption_type: :CUSTOMER_MANAGED_ENCRYPTION
|
331
|
+
# }
|
332
|
+
# job = backup.restore(
|
333
|
+
# "my-restored-database",
|
334
|
+
# encryption_config: encryption_config
|
335
|
+
# )
|
336
|
+
#
|
337
|
+
# job.done? #=> false
|
338
|
+
# job.reload! # API call
|
339
|
+
# job.done? #=> true
|
340
|
+
#
|
341
|
+
# if job.error?
|
342
|
+
# status = job.error
|
343
|
+
# else
|
344
|
+
# database = job.database
|
345
|
+
# end
|
346
|
+
#
|
347
|
+
def restore database_id, instance_id: nil, encryption_config: nil
|
292
348
|
ensure_service!
|
293
349
|
|
294
350
|
instance_id ||= self.instance_id
|
295
351
|
|
352
|
+
if encryption_config&.include?(:kms_key_name) &&
|
353
|
+
encryption_config[:encryption_type] != :CUSTOMER_MANAGED_ENCRYPTION
|
354
|
+
raise Google::Cloud::InvalidArgumentError,
|
355
|
+
"kms_key_name only used with CUSTOMER_MANAGED_ENCRYPTION"
|
356
|
+
end
|
357
|
+
|
296
358
|
grpc = service.restore_database \
|
297
359
|
self.instance_id,
|
298
360
|
backup_id,
|
299
361
|
instance_id,
|
300
|
-
database_id
|
362
|
+
database_id,
|
363
|
+
encryption_config: encryption_config
|
301
364
|
Restore::Job.from_grpc grpc, service
|
302
365
|
end
|
303
366
|
|
@@ -113,6 +113,31 @@ module Google
|
|
113
113
|
@grpc.state
|
114
114
|
end
|
115
115
|
|
116
|
+
# An encryption configuration describing the encryption type and key
|
117
|
+
# resources in Cloud KMS.
|
118
|
+
#
|
119
|
+
# @return [Google::Cloud::Spanner::Admin::Database::V1::EncryptionConfig, nil]
|
120
|
+
def encryption_config
|
121
|
+
@grpc.encryption_config
|
122
|
+
end
|
123
|
+
|
124
|
+
# Encryption information for the database.
|
125
|
+
#
|
126
|
+
# For databases that are using customer managed encryption, this
|
127
|
+
# field contains the encryption information for the database, such as
|
128
|
+
# encryption state and the Cloud KMS key versions that are in use.
|
129
|
+
#
|
130
|
+
# For databases that are using Google default or other types of encryption,
|
131
|
+
# this field is empty.
|
132
|
+
#
|
133
|
+
# This field is propagated lazily from the backend. There might be a delay
|
134
|
+
# from when a key version is being used and when it appears in this field.
|
135
|
+
#
|
136
|
+
# @return [Array<Google::Cloud::Spanner::Admin::Database::V1::EncryptionInfo>]
|
137
|
+
def encryption_info
|
138
|
+
@grpc.encryption_info.to_a
|
139
|
+
end
|
140
|
+
|
116
141
|
##
|
117
142
|
# The database is still being created. Operations on the database may
|
118
143
|
# raise with `FAILED_PRECONDITION` in this state.
|
@@ -417,6 +442,26 @@ module Google
|
|
417
442
|
# it will be automatically set to the backup create time. The version
|
418
443
|
# time can be as far in the past as specified by the database earliest
|
419
444
|
# version time. Optional.
|
445
|
+
# @param [Hash] encryption_config An encryption configuration describing
|
446
|
+
# the encryption type and key resources in Cloud KMS. Optional. The
|
447
|
+
# following settings can be provided:
|
448
|
+
#
|
449
|
+
# * `:kms_key_name` (String) The name of KMS key to use which should
|
450
|
+
# be the full path, e.g., `projects/<project>/locations/<location>\
|
451
|
+
# /keyRings/<key_ring>/cryptoKeys/<kms_key_name>`
|
452
|
+
# This field should be set only when encryption type
|
453
|
+
# `:CUSTOMER_MANAGED_ENCRYPTION`.
|
454
|
+
# * `:encryption_type` (Symbol) The encryption type of the backup.
|
455
|
+
# Valid values are:
|
456
|
+
# 1. `:USE_DATABASE_ENCRYPTION` - Use the same encryption configuration as
|
457
|
+
# the database.
|
458
|
+
# 2. `:GOOGLE_DEFAULT_ENCRYPTION` - Google default encryption.
|
459
|
+
# 3. `:CUSTOMER_MANAGED_ENCRYPTION` - Use customer managed encryption.
|
460
|
+
# If specified, `:kms_key_name` must contain a valid Cloud KMS key.
|
461
|
+
#
|
462
|
+
# @raise [ArgumentError] if `:CUSTOMER_MANAGED_ENCRYPTION` specified without
|
463
|
+
# customer managed kms key.
|
464
|
+
#
|
420
465
|
# @return [Google::Cloud::Spanner::Backup::Job] The job representing
|
421
466
|
# the long-running, asynchronous processing of a backup create
|
422
467
|
# operation.
|
@@ -443,14 +488,48 @@ module Google
|
|
443
488
|
# backup = job.backup
|
444
489
|
# end
|
445
490
|
#
|
446
|
-
|
491
|
+
# @example Create backup with encryption config
|
492
|
+
# require "google/cloud/spanner"
|
493
|
+
#
|
494
|
+
# spanner = Google::Cloud::Spanner.new
|
495
|
+
# database = spanner.database "my-instance", "my-database"
|
496
|
+
#
|
497
|
+
# kms_key_name = "projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<kms_key_name>"
|
498
|
+
# encryption_config = {
|
499
|
+
# kms_key_name: kms_key_name,
|
500
|
+
# encryption_type: :CUSTOMER_MANAGED_ENCRYPTION
|
501
|
+
# }
|
502
|
+
# job = database.create_backup "my-backup",
|
503
|
+
# Time.now + 36000,
|
504
|
+
# encryption_config: encryption_config
|
505
|
+
#
|
506
|
+
# job.done? #=> false
|
507
|
+
# job.reload! # API call
|
508
|
+
# job.done? #=> true
|
509
|
+
#
|
510
|
+
# if job.error?
|
511
|
+
# status = job.error
|
512
|
+
# else
|
513
|
+
# backup = job.backup
|
514
|
+
# end
|
515
|
+
#
|
516
|
+
def create_backup backup_id, expire_time,
|
517
|
+
version_time: nil, encryption_config: nil
|
447
518
|
ensure_service!
|
519
|
+
|
520
|
+
if encryption_config&.include?(:kms_key_name) &&
|
521
|
+
encryption_config[:encryption_type] != :CUSTOMER_MANAGED_ENCRYPTION
|
522
|
+
raise Google::Cloud::InvalidArgumentError,
|
523
|
+
"kms_key_name only used with CUSTOMER_MANAGED_ENCRYPTION"
|
524
|
+
end
|
525
|
+
|
448
526
|
grpc = service.create_backup \
|
449
527
|
instance_id,
|
450
528
|
database_id,
|
451
529
|
backup_id,
|
452
530
|
expire_time,
|
453
|
-
version_time
|
531
|
+
version_time,
|
532
|
+
encryption_config: encryption_config
|
454
533
|
Backup::Job.from_grpc grpc, service
|
455
534
|
end
|
456
535
|
|
@@ -306,6 +306,13 @@ module Google
|
|
306
306
|
# These statements execute atomically with the creation of the
|
307
307
|
# database: if there is an error in any statement, the database is not
|
308
308
|
# created. Optional.
|
309
|
+
# @param [Hash] encryption_config An encryption configuration describing
|
310
|
+
# the encryption type and key resources in Cloud KMS. Optional. The
|
311
|
+
# following settings can be provided:
|
312
|
+
#
|
313
|
+
# * `:kms_key_name` (String) The name of KMS key to use which should
|
314
|
+
# be the full path, e.g., `projects/<project>/locations/<location>\
|
315
|
+
# /keyRings/<key_ring>/cryptoKeys/<kms_key_name>`
|
309
316
|
#
|
310
317
|
# @return [Database::Job] The job representing the long-running,
|
311
318
|
# asynchronous processing of a database create operation.
|
@@ -328,9 +335,30 @@ module Google
|
|
328
335
|
# database = job.database
|
329
336
|
# end
|
330
337
|
#
|
331
|
-
|
338
|
+
# @example Create with encryption config
|
339
|
+
# require "google/cloud/spanner"
|
340
|
+
#
|
341
|
+
# spanner = Google::Cloud::Spanner.new
|
342
|
+
#
|
343
|
+
# instance = spanner.instance "my-instance"
|
344
|
+
#
|
345
|
+
# kms_key_name = "projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<kms_key_name>"
|
346
|
+
# job = instance.create_database "my-new-database", encryption_config: { kms_key_name: kms_key_name }
|
347
|
+
#
|
348
|
+
# job.done? #=> false
|
349
|
+
# job.reload! # API call
|
350
|
+
# job.done? #=> true
|
351
|
+
#
|
352
|
+
# if job.error?
|
353
|
+
# status = job.error
|
354
|
+
# else
|
355
|
+
# database = job.database
|
356
|
+
# end
|
357
|
+
#
|
358
|
+
def create_database database_id, statements: [], encryption_config: nil
|
332
359
|
grpc = service.create_database instance_id, database_id,
|
333
|
-
statements: statements
|
360
|
+
statements: statements,
|
361
|
+
encryption_config: encryption_config
|
334
362
|
Database::Job.from_grpc grpc, service
|
335
363
|
end
|
336
364
|
|
@@ -380,6 +380,13 @@ module Google
|
|
380
380
|
# These statements execute atomically with the creation of the
|
381
381
|
# database: if there is an error in any statement, the database is not
|
382
382
|
# created. Optional.
|
383
|
+
# @param [Hash] encryption_config An encryption configuration describing
|
384
|
+
# the encryption type and key resources in Cloud KMS. Optional. The
|
385
|
+
# following settings can be provided:
|
386
|
+
#
|
387
|
+
# * `:kms_key_name` (String) The name of KMS key to use which should
|
388
|
+
# be the full path, e.g., `projects/<project>/locations/<location>\
|
389
|
+
# /keyRings/<key_ring>/cryptoKeys/<kms_key_name>`
|
383
390
|
#
|
384
391
|
# @return [Database::Job] The job representing the long-running,
|
385
392
|
# asynchronous processing of a database create operation.
|
@@ -402,9 +409,32 @@ module Google
|
|
402
409
|
# database = job.database
|
403
410
|
# end
|
404
411
|
#
|
405
|
-
|
412
|
+
# @example Create with encryption config
|
413
|
+
# require "google/cloud/spanner"
|
414
|
+
#
|
415
|
+
# spanner = Google::Cloud::Spanner.new
|
416
|
+
#
|
417
|
+
# kms_key_name = "projects/<project>/locations/<location>/keyRings/<key_ring>/cryptoKeys/<kms_key_name>"
|
418
|
+
# encryption_config = { kms_key_name: kms_key_name }
|
419
|
+
# job = spanner.create_database "my-instance",
|
420
|
+
# "my-new-database",
|
421
|
+
# encryption_config: encryption_config
|
422
|
+
#
|
423
|
+
# job.done? #=> false
|
424
|
+
# job.reload! # API call
|
425
|
+
# job.done? #=> true
|
426
|
+
#
|
427
|
+
# if job.error?
|
428
|
+
# status = job.error
|
429
|
+
# else
|
430
|
+
# database = job.database
|
431
|
+
# end
|
432
|
+
#
|
433
|
+
def create_database instance_id, database_id, statements: [],
|
434
|
+
encryption_config: nil
|
406
435
|
grpc = service.create_database instance_id, database_id,
|
407
|
-
statements: statements
|
436
|
+
statements: statements,
|
437
|
+
encryption_config: encryption_config
|
408
438
|
Database::Job.from_grpc grpc, service
|
409
439
|
end
|
410
440
|
|
@@ -214,12 +214,13 @@ module Google
|
|
214
214
|
end
|
215
215
|
|
216
216
|
def create_database instance_id, database_id, statements: [],
|
217
|
-
call_options: nil
|
217
|
+
call_options: nil, encryption_config: nil
|
218
218
|
opts = default_options call_options: call_options
|
219
219
|
request = {
|
220
220
|
parent: instance_path(instance_id),
|
221
221
|
create_statement: "CREATE DATABASE `#{database_id}`",
|
222
|
-
extra_statements: Array(statements)
|
222
|
+
extra_statements: Array(statements),
|
223
|
+
encryption_config: encryption_config
|
223
224
|
}
|
224
225
|
databases.create_database request, opts
|
225
226
|
end
|
@@ -468,7 +469,8 @@ module Google
|
|
468
469
|
end
|
469
470
|
|
470
471
|
def create_backup instance_id, database_id, backup_id, expire_time,
|
471
|
-
version_time, call_options: nil
|
472
|
+
version_time, call_options: nil,
|
473
|
+
encryption_config: nil
|
472
474
|
opts = default_options call_options: call_options
|
473
475
|
backup = {
|
474
476
|
database: database_path(instance_id, database_id),
|
@@ -478,7 +480,8 @@ module Google
|
|
478
480
|
request = {
|
479
481
|
parent: instance_path(instance_id),
|
480
482
|
backup_id: backup_id,
|
481
|
-
backup: backup
|
483
|
+
backup: backup,
|
484
|
+
encryption_config: encryption_config
|
482
485
|
}
|
483
486
|
databases.create_backup request, opts
|
484
487
|
end
|
@@ -545,12 +548,13 @@ module Google
|
|
545
548
|
|
546
549
|
def restore_database backup_instance_id, backup_id,
|
547
550
|
database_instance_id, database_id,
|
548
|
-
call_options: nil
|
551
|
+
call_options: nil, encryption_config: nil
|
549
552
|
opts = default_options call_options: call_options
|
550
553
|
request = {
|
551
554
|
parent: instance_path(database_instance_id),
|
552
555
|
database_id: database_id,
|
553
|
-
backup: backup_path(backup_instance_id, backup_id)
|
556
|
+
backup: backup_path(backup_instance_id, backup_id),
|
557
|
+
encryption_config: encryption_config
|
554
558
|
}
|
555
559
|
databases.restore_database request, opts
|
556
560
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-cloud-spanner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Moore
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-03-
|
12
|
+
date: 2021-03-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: google-cloud-core
|