@@ -327,7 +327,11 @@ def list_managed_disks(cmd, resource_group_name=None):
327327 return client .disks .list ()
328328
329329
330- def update_managed_disk (cmd , instance , size_gb = None , sku = None , disk_iops_read_write = None , disk_mbps_read_write = None ):
330+ def update_managed_disk (cmd , resource_group_name , instance , size_gb = None , sku = None , disk_iops_read_write = None ,
331+ disk_mbps_read_write = None , encryption_type = None , disk_encryption_set = None ):
332+ from msrestazure .tools import resource_id , is_valid_resource_id
333+ from azure .cli .core .commands .client_factory import get_subscription_id
334+
331335 if size_gb is not None :
332336 instance .disk_size_gb = size_gb
333337 if sku is not None :
@@ -336,6 +340,17 @@ def update_managed_disk(cmd, instance, size_gb=None, sku=None, disk_iops_read_wr
336340 instance .disk_iops_read_write = disk_iops_read_write
337341 if disk_mbps_read_write is not None :
338342 instance .disk_mbps_read_write = disk_mbps_read_write
343+ if disk_encryption_set is not None :
344+ if instance .encryption .type != 'EncryptionAtRestWithCustomerKey' and \
345+ encryption_type != 'EncryptionAtRestWithCustomerKey' :
346+ raise CLIError ('usage error: Please set --encryption-type to EncryptionAtRestWithCustomerKey' )
347+ if not is_valid_resource_id (disk_encryption_set ):
348+ disk_encryption_set = resource_id (
349+ subscription = get_subscription_id (cmd .cli_ctx ), resource_group = resource_group_name ,
350+ namespace = 'Microsoft.Compute' , type = 'diskEncryptionSets' , name = disk_encryption_set )
351+ instance .encryption .disk_encryption_set_id = disk_encryption_set
352+ if encryption_type is not None :
353+ instance .encryption .type = encryption_type
339354 return instance
340355# endregion
341356
@@ -408,12 +423,18 @@ def list_images(cmd, resource_group_name=None):
408423
409424
410425# region Snapshots
426+ # pylint: disable=unused-argument,too-many-locals
411427def create_snapshot (cmd , resource_group_name , snapshot_name , location = None , size_gb = None , sku = 'Standard_LRS' ,
412- source = None , for_upload = None , incremental = None , # pylint: disable=unused-argument
428+ source = None , for_upload = None , incremental = None ,
413429 # below are generated internally from 'source'
414430 source_blob_uri = None , source_disk = None , source_snapshot = None , source_storage_account_id = None ,
415- hyper_v_generation = None , tags = None , no_wait = False ):
416- Snapshot , CreationData , DiskCreateOption = cmd .get_models ('Snapshot' , 'CreationData' , 'DiskCreateOption' )
431+ hyper_v_generation = None , tags = None , no_wait = False , disk_encryption_set = None ,
432+ encryption_type = None ):
433+ from msrestazure .tools import resource_id , is_valid_resource_id
434+ from azure .cli .core .commands .client_factory import get_subscription_id
435+
436+ Snapshot , CreationData , DiskCreateOption , Encryption = cmd .get_models (
437+ 'Snapshot' , 'CreationData' , 'DiskCreateOption' , 'Encryption' )
417438
418439 location = location or _get_resource_group_location (cmd .cli_ctx , resource_group_name )
419440 if source_blob_uri :
@@ -432,8 +453,22 @@ def create_snapshot(cmd, resource_group_name, snapshot_name, location=None, size
432453
433454 if size_gb is None and option == DiskCreateOption .empty :
434455 raise CLIError ('Please supply size for the snapshots' )
456+
457+ if disk_encryption_set is not None and not is_valid_resource_id (disk_encryption_set ):
458+ disk_encryption_set = resource_id (
459+ subscription = get_subscription_id (cmd .cli_ctx ), resource_group = resource_group_name ,
460+ namespace = 'Microsoft.Compute' , type = 'diskEncryptionSets' , name = disk_encryption_set )
461+
462+ if disk_encryption_set is not None and encryption_type is None :
463+ raise CLIError ('usage error: Please specify --encryption-type.' )
464+ if encryption_type is not None :
465+ encryption = Encryption (type = encryption_type , disk_encryption_set_id = disk_encryption_set )
466+ else :
467+ encryption = None
468+
435469 snapshot = Snapshot (location = location , creation_data = creation_data , tags = (tags or {}),
436- sku = _get_sku_object (cmd , sku ), disk_size_gb = size_gb , incremental = incremental )
470+ sku = _get_sku_object (cmd , sku ), disk_size_gb = size_gb , incremental = incremental ,
471+ encryption = encryption )
437472 if hyper_v_generation :
438473 snapshot .hyper_vgeneration = hyper_v_generation
439474
@@ -453,9 +488,23 @@ def list_snapshots(cmd, resource_group_name=None):
453488 return client .snapshots .list ()
454489
455490
456- def update_snapshot (cmd , instance , sku = None ):
491+ def update_snapshot (cmd , resource_group_name , instance , sku = None , disk_encryption_set = None , encryption_type = None ):
492+ from msrestazure .tools import resource_id , is_valid_resource_id
493+ from azure .cli .core .commands .client_factory import get_subscription_id
494+
457495 if sku is not None :
458496 _set_sku (cmd , instance , sku )
497+ if disk_encryption_set is not None :
498+ if instance .encryption .type != 'EncryptionAtRestWithCustomerKey' and \
499+ encryption_type != 'EncryptionAtRestWithCustomerKey' :
500+ raise CLIError ('usage error: Please set --encryption-type to EncryptionAtRestWithCustomerKey' )
501+ if not is_valid_resource_id (disk_encryption_set ):
502+ disk_encryption_set = resource_id (
503+ subscription = get_subscription_id (cmd .cli_ctx ), resource_group = resource_group_name ,
504+ namespace = 'Microsoft.Compute' , type = 'diskEncryptionSets' , name = disk_encryption_set )
505+ instance .encryption .disk_encryption_set_id = disk_encryption_set
506+ if encryption_type is not None :
507+ instance .encryption .type = encryption_type
459508 return instance
460509# endregion
461510
0 commit comments