google-cloud-spanner 2.5.0 → 2.6.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 +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
|