Skip to content

Commit 567ef35

Browse files
WalterHubJon Wayne Parrott
authored and
Jon Wayne Parrott
committed
Adds snippets for enabling and restoring a key version (#1196)
* Adds snippets for enabling and restoring a key version * Fixed lint issues
1 parent 5da6cd0 commit 567ef35

File tree

2 files changed

+108
-0
lines changed

2 files changed

+108
-0
lines changed

kms/api-client/snippets.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,33 @@ def disable_crypto_key_version(project_id, location_id, key_ring_id,
155155
# [END kms_disable_cryptokey_version]
156156

157157

158+
# [START kms_enable_cryptokey_version]
159+
def enable_crypto_key_version(project_id, location_id, key_ring_id,
160+
crypto_key_id, version_id):
161+
"""Enables a CryptoKeyVersion associated with a given CryptoKey and
162+
KeyRing."""
163+
164+
# Creates an API client for the KMS API.
165+
kms_client = googleapiclient.discovery.build('cloudkms', 'v1')
166+
167+
# Construct the resource name of the CryptoKeyVersion.
168+
name = (
169+
'projects/{}/locations/{}/keyRings/{}/cryptoKeys/{}/'
170+
'cryptoKeyVersions/{}'
171+
.format(
172+
project_id, location_id, key_ring_id, crypto_key_id, version_id))
173+
174+
# Use the KMS API to enable the CryptoKeyVersion.
175+
crypto_keys = kms_client.projects().locations().keyRings().cryptoKeys()
176+
request = crypto_keys.cryptoKeyVersions().patch(
177+
name=name, body={'state': 'ENABLED'}, updateMask='state')
178+
response = request.execute()
179+
180+
print('CryptoKeyVersion {}\'s state has been set to {}.'.format(
181+
name, response['state']))
182+
# [END kms_enable_cryptokey_version]
183+
184+
158185
# [START kms_destroy_cryptokey_version]
159186
def destroy_crypto_key_version(
160187
project_id, location_id, key_ring_id, crypto_key_id, version_id):
@@ -181,6 +208,31 @@ def destroy_crypto_key_version(
181208
# [END kms_destroy_cryptokey_version]
182209

183210

211+
# [START kms_restore_cryptokey_version]
212+
def restore_crypto_key_version(
213+
project_id, location_id, key_ring_id, crypto_key_id, version_id):
214+
"""Restores a CryptoKeyVersion that is scheduled for destruction."""
215+
216+
# Creates an API client for the KMS API.
217+
kms_client = googleapiclient.discovery.build('cloudkms', 'v1')
218+
219+
# Construct the resource name of the CryptoKeyVersion.
220+
name = (
221+
'projects/{}/locations/{}/keyRings/{}/cryptoKeys/{}/'
222+
'cryptoKeyVersions/{}'
223+
.format(
224+
project_id, location_id, key_ring_id, crypto_key_id, version_id))
225+
226+
# Use the KMS API to restore the CryptoKeyVersion.
227+
crypto_keys = kms_client.projects().locations().keyRings().cryptoKeys()
228+
request = crypto_keys.cryptoKeyVersions().restore(name=name, body={})
229+
response = request.execute()
230+
231+
print('CryptoKeyVersion {}\'s state has been set to {}.'.format(
232+
name, response['state']))
233+
# [END kms_restore_cryptokey_version]
234+
235+
184236
# [START kms_add_member_to_cryptokey_policy]
185237
def add_member_to_crypto_key_policy(
186238
project_id, location_id, key_ring_id, crypto_key_id, member, role):
@@ -294,6 +346,14 @@ def get_key_ring_policy(project_id, location_id, key_ring_id):
294346
disable_crypto_key_version_parser.add_argument('crypto_key')
295347
disable_crypto_key_version_parser.add_argument('version')
296348

349+
enable_crypto_key_version_parser = subparsers.add_parser(
350+
'enable_crypto_key_version')
351+
enable_crypto_key_version_parser.add_argument('project')
352+
enable_crypto_key_version_parser.add_argument('location')
353+
enable_crypto_key_version_parser.add_argument('key_ring')
354+
enable_crypto_key_version_parser.add_argument('crypto_key')
355+
enable_crypto_key_version_parser.add_argument('version')
356+
297357
destroy_crypto_key_version_parser = subparsers.add_parser(
298358
'destroy_crypto_key_version')
299359
destroy_crypto_key_version_parser.add_argument('project')
@@ -302,6 +362,14 @@ def get_key_ring_policy(project_id, location_id, key_ring_id):
302362
destroy_crypto_key_version_parser.add_argument('crypto_key')
303363
destroy_crypto_key_version_parser.add_argument('version')
304364

365+
restore_crypto_key_version_parser = subparsers.add_parser(
366+
'restore_crypto_key_version')
367+
restore_crypto_key_version_parser.add_argument('project')
368+
restore_crypto_key_version_parser.add_argument('location')
369+
restore_crypto_key_version_parser.add_argument('key_ring')
370+
restore_crypto_key_version_parser.add_argument('crypto_key')
371+
restore_crypto_key_version_parser.add_argument('version')
372+
305373
add_member_to_crypto_key_policy_parser = subparsers.add_parser(
306374
'add_member_to_crypto_key_policy')
307375
add_member_to_crypto_key_policy_parser.add_argument('project')
@@ -352,13 +420,27 @@ def get_key_ring_policy(project_id, location_id, key_ring_id):
352420
args.key_ring,
353421
args.crypto_key,
354422
args.version)
423+
elif args.command == 'enable_crypto_key_version':
424+
enable_crypto_key_version(
425+
args.project,
426+
args.location,
427+
args.key_ring,
428+
args.crypto_key,
429+
args.version)
355430
elif args.command == 'destroy_crypto_key_version':
356431
destroy_crypto_key_version(
357432
args.project,
358433
args.location,
359434
args.key_ring,
360435
args.crypto_key,
361436
args.version)
437+
elif args.command == 'restore_crypto_key_version':
438+
restore_crypto_key_version(
439+
args.project,
440+
args.location,
441+
args.key_ring,
442+
args.crypto_key,
443+
args.version)
362444
elif args.command == 'add_member_to_crypto_key_policy':
363445
add_member_to_crypto_key_policy(
364446
args.project,

kms/api-client/snippets_test.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,19 @@ def test_disable_crypto_key_version(capsys):
102102
assert expected in out
103103

104104

105+
def test_enable_crypto_key_version(capsys):
106+
snippets.enable_crypto_key_version(
107+
PROJECT, LOCATION, KEY_RING, CRYPTO_KEY, VERSION)
108+
out, _ = capsys.readouterr()
109+
expected = (
110+
'CryptoKeyVersion projects/{}/locations/{}/keyRings/{}/cryptoKeys/{}/'
111+
'cryptoKeyVersions/{}\'s state has been set to {}.'
112+
.format(
113+
PROJECT, LOCATION, KEY_RING, CRYPTO_KEY, VERSION,
114+
'ENABLED'))
115+
assert expected in out
116+
117+
105118
def test_destroy_crypto_key_version(capsys):
106119
snippets.destroy_crypto_key_version(
107120
PROJECT, LOCATION, KEY_RING, CRYPTO_KEY, VERSION)
@@ -115,6 +128,19 @@ def test_destroy_crypto_key_version(capsys):
115128
assert expected in out
116129

117130

131+
def test_restore_crypto_key_version(capsys):
132+
snippets.restore_crypto_key_version(
133+
PROJECT, LOCATION, KEY_RING, CRYPTO_KEY, VERSION)
134+
out, _ = capsys.readouterr()
135+
expected = (
136+
'CryptoKeyVersion projects/{}/locations/{}/keyRings/{}/cryptoKeys/{}/'
137+
'cryptoKeyVersions/{}\'s state has been set to {}.'
138+
.format(
139+
PROJECT, LOCATION, KEY_RING, CRYPTO_KEY, VERSION,
140+
'DISABLED'))
141+
assert expected in out
142+
143+
118144
def test_add_member_to_crypto_key_policy(capsys):
119145
snippets.add_member_to_crypto_key_policy(
120146
PROJECT, LOCATION, KEY_RING, CRYPTO_KEY, MEMBER, ROLE)

0 commit comments

Comments
 (0)