in src/azure-cli/azure/cli/command_modules/vm/custom.py [0:0]
def restore_point_create(client,
resource_group_name,
restore_point_collection_name,
restore_point_name,
exclude_disks=None,
source_restore_point=None,
consistency_mode=None,
source_os_resource=None,
os_restore_point_encryption_set=None,
os_restore_point_encryption_type=None,
source_data_disk_resource=None,
data_disk_restore_point_encryption_set=None,
data_disk_restore_point_encryption_type=None,
no_wait=False):
parameters = {}
if exclude_disks is not None:
parameters['excludeDisks'] = []
for disk in exclude_disks:
parameters['excludeDisks'].append({'id': disk})
if source_restore_point is not None:
parameters['sourceRestorePoint'] = {'id': source_restore_point}
if consistency_mode is not None:
parameters['consistencyMode'] = consistency_mode
storage_profile = {}
# Local restore point
if source_restore_point is None:
os_disk = {}
if source_os_resource is not None:
managed_disk = {
'id': source_os_resource
}
os_disk['managedDisk'] = managed_disk
if os_restore_point_encryption_set is None and os_restore_point_encryption_type is None:
raise ArgumentUsageError('usage error: --os-restore-point-encryption-set or --os-restore-point-encryption-type must be used together with --source-os-resource')
disk_restore_point = {}
if os_restore_point_encryption_set is not None or os_restore_point_encryption_type is not None:
encryption = {}
if os_restore_point_encryption_set is not None:
encryption['diskEncryptionSet'] = {
'id': os_restore_point_encryption_set
}
if os_restore_point_encryption_type is not None:
encryption['type'] = os_restore_point_encryption_type
if encryption:
disk_restore_point['encryption'] = encryption
if disk_restore_point:
os_disk['diskRestorePoint'] = disk_restore_point
if os_disk:
storage_profile['osDisk'] = os_disk
data_disks = []
if source_data_disk_resource is not None:
if data_disk_restore_point_encryption_set is None and data_disk_restore_point_encryption_type is None:
raise ArgumentUsageError('usage error: --data-disk-restore-point-encryption-set or --data-disk-restore-point-encryption-type must be used together with --source-data-disk-resource')
if data_disk_restore_point_encryption_set is not None and (len(source_data_disk_resource) != len(data_disk_restore_point_encryption_set)):
raise ArgumentUsageError('Length of --source-data-disk-resource, --data-disk-restore-point-encryption-set must be same.')
if data_disk_restore_point_encryption_type is not None and (len(source_data_disk_resource) != len(data_disk_restore_point_encryption_type)):
raise ArgumentUsageError('Length of --source-data-disk-resource, --data-disk-restore-point-encryption-type must be same.')
for i, v in enumerate(source_data_disk_resource):
data_disks.append({
'managedDisk': {
'id': v
},
'diskRestorePoint': {
'encryption': {
'disk_encryption_set': {
'id': data_disk_restore_point_encryption_set[i] if data_disk_restore_point_encryption_set is not None else None
},
'type': data_disk_restore_point_encryption_type[i] if data_disk_restore_point_encryption_type is not None else None
}
}
})
if data_disks:
storage_profile['dataDisks'] = data_disks
# Remote restore point
if source_restore_point is not None:
os_disk = {}
disk_restore_point = {}
if source_os_resource is not None:
source_disk_restore_point = {
'id': source_os_resource
}
disk_restore_point['sourceDiskRestorePoint'] = source_disk_restore_point
if os_restore_point_encryption_set is None and os_restore_point_encryption_type is None:
raise ArgumentUsageError('usage error: --os-restore-point-encryption-set or --os-restore-point-encryption-type must be used together with --source-os-resource')
if os_restore_point_encryption_set is not None or os_restore_point_encryption_type is not None:
encryption = {}
if os_restore_point_encryption_set is not None:
encryption['diskEncryptionSet'] = {
'id': os_restore_point_encryption_set
}
if os_restore_point_encryption_type is not None:
encryption['type'] = os_restore_point_encryption_type
if encryption:
disk_restore_point['encryption'] = encryption
if disk_restore_point:
os_disk['diskRestorePoint'] = disk_restore_point
if os_disk:
storage_profile['osDisk'] = os_disk
data_disks = []
if source_data_disk_resource is not None:
if data_disk_restore_point_encryption_set is None and data_disk_restore_point_encryption_type is None:
raise ArgumentUsageError('usage error: --data-disk-restore-point-encryption-set or --data-disk-restore-point-encryption-type must be used together with --source-data-disk-resource')
if data_disk_restore_point_encryption_set is not None and (len(source_data_disk_resource) != len(data_disk_restore_point_encryption_set)):
raise ArgumentUsageError('Length of --source-data-disk-resource, --data-disk-restore-point-encryption-set must be same.')
if data_disk_restore_point_encryption_type is not None and (len(source_data_disk_resource) != len(data_disk_restore_point_encryption_type)):
raise ArgumentUsageError('Length of --source-data-disk-resource, --data-disk-restore-point-encryption-type must be same.')
for i, v in enumerate(source_data_disk_resource):
data_disks.append({
'diskRestorePoint': {
'sourceDiskRestorePoint': {
'id': v
},
'encryption': {
'disk_encryption_set': {
'id': data_disk_restore_point_encryption_set[i] if data_disk_restore_point_encryption_set is not None else None
},
'type': data_disk_restore_point_encryption_type[i] if data_disk_restore_point_encryption_type is not None else None
}
}
})
if data_disks:
storage_profile['dataDisks'] = data_disks
if storage_profile:
parameters['sourceMetadata'] = {'storageProfile': storage_profile}
return sdk_no_wait(no_wait,
client.begin_create,
resource_group_name=resource_group_name,
restore_point_collection_name=restore_point_collection_name,
restore_point_name=restore_point_name,
parameters=parameters)