Skip to content

Commit 24a5d2c

Browse files
authored
[Backup] az backup restore restore-azurefileshare: Fix a bug where the source storage account is deleted and the required sourceResourceId property is missing from the restore request payload (#31889)
1 parent 523f565 commit 24a5d2c

File tree

1 file changed

+31
-3
lines changed

1 file changed

+31
-3
lines changed

src/azure-cli/azure/cli/command_modules/backup/custom_afs.py

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,9 +189,27 @@ def restore_AzureFileShare(cmd, client, resource_group_name, vault_name, rp_name
189189

190190
afs_restore_request.copy_options = resolve_conflict
191191
afs_restore_request.recovery_type = restore_mode
192-
afs_restore_request.source_resource_id = _get_storage_account_id(cmd.cli_ctx,
193-
item.properties.container_name.split(';')[-1],
194-
item.properties.container_name.split(';')[-2])
192+
193+
# Try to get source resource ID from storage account first, fallback to item's source resource ID
194+
try:
195+
afs_restore_request.source_resource_id = _get_storage_account_id(cmd.cli_ctx,
196+
item.properties.container_name.split(';')[-1],
197+
item.properties.container_name.split(';')[-2])
198+
# Check if source_resource_id is null or empty after assignment
199+
if not afs_restore_request.source_resource_id:
200+
raise CLIError("Source resource ID is null or empty after retrieval from storage account.")
201+
except (CLIError) as e:
202+
logger.warning(
203+
"Failed to get storage account ID: %s. Falling back to source resource ID from protected item.",
204+
str(e))
205+
source_resource_id = _get_source_resource_id_from_item(item)
206+
if source_resource_id:
207+
afs_restore_request.source_resource_id = source_resource_id
208+
else:
209+
raise CLIError(
210+
"Unable to retrieve source resource ID. The storage account might have been deleted "
211+
"and no fallback source resource ID is available.") from e
212+
195213
afs_restore_request.restore_request_type = restore_request_type
196214

197215
restore_file_specs = None
@@ -420,6 +438,16 @@ def _get_storage_account_id(cli_ctx, storage_account_name, storage_account_rg):
420438
return storage_account.id
421439

422440

441+
def _get_source_resource_id_from_item(item):
442+
"""
443+
Helper function to retrieve source resource ID from a protected item.
444+
This is used as a fallback when the storage account is deleted.
445+
"""
446+
if item and hasattr(item, 'properties') and hasattr(item.properties, 'source_resource_id'):
447+
return item.properties.source_resource_id
448+
return None
449+
450+
423451
def set_policy(cmd, client, resource_group_name, vault_name, policy, policy_name, tenant_id=None,
424452
is_critical_operation=False, yes=False):
425453
if policy_name is None:

0 commit comments

Comments
 (0)