Skip to content
34 changes: 31 additions & 3 deletions src/azure-cli/azure/cli/command_modules/backup/custom_afs.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,9 +189,27 @@ def restore_AzureFileShare(cmd, client, resource_group_name, vault_name, rp_name

afs_restore_request.copy_options = resolve_conflict
afs_restore_request.recovery_type = restore_mode
afs_restore_request.source_resource_id = _get_storage_account_id(cmd.cli_ctx,
item.properties.container_name.split(';')[-1],
item.properties.container_name.split(';')[-2])

# Try to get source resource ID from storage account first, fallback to item's source resource ID
try:
afs_restore_request.source_resource_id = _get_storage_account_id(cmd.cli_ctx,
item.properties.container_name.split(';')[-1],
item.properties.container_name.split(';')[-2])
# Check if source_resource_id is null or empty after assignment
if not afs_restore_request.source_resource_id:
raise CLIError("Source resource ID is null or empty after retrieval from storage account.")
except (CLIError) as e:
logger.warning(
"Failed to get storage account ID: %s. Falling back to source resource ID from protected item.",
str(e))
source_resource_id = _get_source_resource_id_from_item(item)
Comment thread
IannGeorges marked this conversation as resolved.
if source_resource_id:
afs_restore_request.source_resource_id = source_resource_id
else:
raise CLIError(
"Unable to retrieve source resource ID. The storage account might have been deleted "
"and no fallback source resource ID is available.") from e

afs_restore_request.restore_request_type = restore_request_type

restore_file_specs = None
Expand Down Expand Up @@ -420,6 +438,16 @@ def _get_storage_account_id(cli_ctx, storage_account_name, storage_account_rg):
return storage_account.id


def _get_source_resource_id_from_item(item):
"""
Helper function to retrieve source resource ID from a protected item.
This is used as a fallback when the storage account is deleted.
"""
if item and hasattr(item, 'properties') and hasattr(item.properties, 'source_resource_id'):
return item.properties.source_resource_id
return None


def set_policy(cmd, client, resource_group_name, vault_name, policy, policy_name, tenant_id=None,
is_critical_operation=False, yes=False):
if policy_name is None:
Expand Down
Loading