Skip to content

[Backup] Add SQL instance snapshot backup and restore support - #34235

Open
iwrinshow wants to merge 9 commits into
Azure:devfrom
iwrinshow:sqlinstclichanges
Open

iwrinshow wants to merge 9 commits into
Azure:devfrom
iwrinshow:sqlinstclichanges

Conversation

@iwrinshow

@iwrinshow iwrinshow commented Oct 16, 2026 •

Copy link
Copy Markdown
Member

🤖 PR Validation — ⚠️ Review suggested

Breaking Changes Tests Suppressions
⚠️ None ️✔️ 130/130 ️✔️ None
⚠️AzureCLI-BreakingChangeTest
⚠️backup
rule cmd_name rule_message suggest_message
⚠️ 1010 - ParaPropUpdate backup container re-register cmd backup container re-register update parameter workload_type: updated property choices from ['MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase'] to ['MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance']
⚠️ 1006 - ParaAdd backup container register cmd backup container register added parameter container_subscription_id
⚠️ 1010 - ParaPropUpdate backup container register cmd backup container register update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance']
⚠️ 1010 - ParaPropUpdate backup item list cmd backup item list update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1010 - ParaPropUpdate backup item set-policy cmd backup item set-policy update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1010 - ParaPropUpdate backup item show cmd backup item show update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1010 - ParaPropUpdate backup policy create cmd backup policy create update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1010 - ParaPropUpdate backup policy list cmd backup policy list update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1010 - ParaPropUpdate backup protectable-item initialize cmd backup protectable-item initialize update parameter workload_type: updated property choices from ['MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase'] to ['MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance']
⚠️ 1010 - ParaPropUpdate backup protectable-item list cmd backup protectable-item list update parameter workload_type: updated property choices from ['MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase'] to ['MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance']
⚠️ 1010 - ParaPropUpdate backup protectable-item show cmd backup protectable-item show update parameter workload_type: updated property choices from ['MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase'] to ['MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance']
⚠️ 1010 - ParaPropUpdate backup protection auto-disable-for-azurewl cmd backup protection auto-disable-for-azurewl update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1010 - ParaPropUpdate backup protection auto-enable-for-azurewl cmd backup protection auto-enable-for-azurewl update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1010 - ParaPropUpdate backup protection backup-now cmd backup protection backup-now update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1010 - ParaPropUpdate backup protection disable cmd backup protection disable update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1006 - ParaAdd backup protection enable-for-azurewl cmd backup protection enable-for-azurewl added parameter child_database_names
⚠️ 1010 - ParaPropUpdate backup protection enable-for-azurewl cmd backup protection enable-for-azurewl update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1010 - ParaPropUpdate backup protection reconfigure cmd backup protection reconfigure update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1010 - ParaPropUpdate backup protection resume cmd backup protection resume update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1010 - ParaPropUpdate backup protection undelete cmd backup protection undelete update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1006 - ParaAdd backup recoveryconfig show cmd backup recoveryconfig show added parameter no_recovery_mode
⚠️ 1006 - ParaAdd backup recoveryconfig show cmd backup recoveryconfig show added parameter recovery_mode
⚠️ 1010 - ParaPropUpdate backup recoveryconfig show cmd backup recoveryconfig show update parameter workload_type: updated property choices from ['MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase'] to ['MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance']
⚠️ 1006 - ParaAdd backup recoverypoint list cmd backup recoverypoint list added parameter get_latest_recovery_point_only
⚠️ 1006 - ParaAdd backup recoverypoint list cmd backup recoverypoint list added parameter restore_point_query_type
⚠️ 1010 - ParaPropUpdate backup recoverypoint list cmd backup recoverypoint list update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1010 - ParaPropUpdate backup recoverypoint move cmd backup recoverypoint move update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1010 - ParaPropUpdate backup recoverypoint show cmd backup recoverypoint show update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']
⚠️ 1006 - ParaAdd backup recoverypoint show-log-chain cmd backup recoverypoint show-log-chain added parameter base_recovery_point_datasource_id
⚠️ 1006 - ParaAdd backup recoverypoint show-log-chain cmd backup recoverypoint show-log-chain added parameter base_snapshot_recovery_point_id
⚠️ 1006 - ParaAdd backup recoverypoint show-log-chain cmd backup recoverypoint show-log-chain added parameter recovery_mode
⚠️ 1010 - ParaPropUpdate backup recoverypoint show-log-chain cmd backup recoverypoint show-log-chain update parameter workload_type: updated property choices from ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'VM'] to ['AzureFileShare', 'MSSQL', 'SAPASE', 'SAPAseDatabase', 'SAPHANA', 'SAPHanaDBInstance', 'SAPHanaDatabase', 'SQLDataBase', 'SQLInstance', 'VM']

Related command

  • az backup container register
  • az backup protection enable-for-azurewl
  • az backup policy create / az backup policy set
  • az backup recoverypoint list / az backup recoverypoint show-log-chain
  • az backup recoveryconfig show
  • az backup restore restore-azurewl

Description

Add SQL instance snapshot backup and restore support to the Backup command module using azure-mgmt-recoveryservicesbackup==11.2.0, published from Azure/azure-sdk-for-python#49430.

  • Support SQLInstance workload discovery/protection, child-database selection, and SnapshotV2 policy handling.
  • Add recovery-point query filters and snapshot-based log-chain queries.
  • Generate SQL snapshot recovery configurations and restore requests for supported instance/database scenarios, including alternate-location restore, point-in-time recovery, managed identity, and no-recovery mode.
  • Support container registration with an explicitly selected source subscription.

The new SQL snapshot paths are intended to preserve existing workload behavior. Full existing-workload playback validation is not yet passing; see Testing Guide below.

Testing Guide

Focused offline validation on Windows, using the repository-local Python environment:

$env:PYTHONPATH = "$PWD\src\azure-cli;$PWD\src\azure-cli-core"
$env:AZURE_CONFIG_DIR = "$PWD\.venv-sqlinstance\azure-config"
$env:AZURE_CORE_COLLECT_TELEMETRY = 'false'
.\.venv-sqlinstance\Scripts\python.exe -m pytest src\azure-cli\azure\cli\command_modules\backup\tests\latest\test_custom.py src\azure-cli\azure\cli\command_modules\backup\tests\latest\test_sql_instance.py -q

Result: 31 passed, 27 subtests passed. The new test_sql_instance.py file is currently local/untracked and will be added in a follow-up; this result is not yet reproducible from the PR checkout alone.

Current CI results for commit 7c4d490fa94c9a8b6224411bf37475b9f4b863af:

  • Full-test Python 3.12 and 3.14 instance8 jobs: failed, each reporting 32 failed, 198 passed, 82 skipped, and 14 subtests passed. Logs show backup playback requests using API version 2026-10-01 against recordings using 2026-08-01. Recordings and any remaining SDK compatibility failures still need to be addressed.
  • CLI style: failed, reporting E128 indentation at backup/custom_wl.py:598.
  • CLI linter: failed, including long-option alias and new-parameter coverage findings.

Full live backup/restore scenarios have not been run as part of this validation. Existing-workload compatibility is not yet fully verified. After fixes, rerun the documented azdev style backup, azdev linter backup --ci-exclusions, and azdev test backup --no-exitfirst checks; these local azdev commands have not yet been rerun for this follow-up.

History Notes

[Backup] Add SQL instance snapshot backup and restore support


This checklist is used to make sure that common guidelines for a pull request are followed.

@iwrinshow
iwrinshow requested review from a team as code owners October 16, 2026 15:22
Copilot AI balanced review requested due to automatic review settings October 16, 2026 15:22
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Container selection and alternate-target resolution have unresolved correctness issues, and snapshot restore paths lack focused tests.

3 open findings
What changed in this PR

Adds SQL instance snapshot backup and restore support to Azure CLI’s backup commands.

Changes:

  • Adds snapshot protection, recovery-point filters, and restore configuration.
  • Extends discovery and validation helpers, arguments, and examples.
  • Upgrades the Recovery Services Backup SDK to 11.2.0.
File Description
src/​azure-cli/​requirements.py3.windows.txt Updates Windows SDK pin.
src/​azure-cli/​requirements.py3.Linux.txt Updates Linux SDK pin.
src/​azure-cli/​requirements.py3.Darwin.txt Updates macOS SDK pin.
src/​azure-cli/​pyproject.toml Updates SDK dependency requirement.
src/​azure-cli/​azure/​cli/​command_modules/​backup/​custom_wl.py Implements snapshot protection and restore workflows.
src/​azure-cli/​azure/​cli/​command_modules/​backup/​custom_help.py Extends polling, filtering, and JSON handling.
src/​azure-cli/​azure/​cli/​command_modules/​backup/​custom_common.py Adds SQLInstance workload mappings.
src/​azure-cli/​azure/​cli/​command_modules/​backup/​custom_base.py Routes new options to workload handlers.
src/​azure-cli/​azure/​cli/​command_modules/​backup/​_params.py Exposes snapshot and discovery options.
src/​azure-cli/​azure/​cli/​command_modules/​backup/​_help.py Documents snapshot commands and examples.
src/​azure-cli/​azure/​cli/​command_modules/​backup/​_client_factory.py Adds discovery-status client factory.

🧠 Review effort: Balanced


💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread src/azure-cli/azure/cli/command_modules/backup/custom_wl.py
Comment thread src/azure-cli/azure/cli/command_modules/backup/custom_base.py
Comment thread src/azure-cli/azure/cli/command_modules/backup/custom_wl.py Outdated
@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).

@yonzhan

Copy link
Copy Markdown
Collaborator

Please fix CI issues

@iwrinshow iwrinshow changed the title Changes to support SQL Instance snapshot backup [Backup] Add SQL instance snapshot backup and restore support Oct 17, 2026
Iwrin Show and others added 3 commits October 21, 2026 21:02
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…changes

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve SQL instance source-subscription discovery alongside Azure Files managed identity registration.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).

@azure-pipelines

Copy link
Copy Markdown
Commenter does not have sufficient privileges for PR 34235 in repo Azure/azure-cli

Iwrin Show and others added 2 commits October 23, 2026 10:09
Preserve snapshot fields through passive SDK serialization, validate secondary snapshot and log availability at restore time, and retain the existing database restore command sequence.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Refresh 34 existing backup recordings against the updated API and add four live SQL instance snapshot policy, backup, ALR, and CRR scenarios with a CLI workflow guide. Fetch complete secondary SQL snapshot recovery-point details, normalize streamed TestSDK request bodies, and redact recording credentials.

Validation: 92 tests and 48 subtests passed, including all 38 recording playbacks; focused pylint syntax/name checks and staged whitespace checks passed.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).

Match full ARM IDs during container discovery, infer omitted source workloads before alternate target lookup, and preserve null-safe SQL/HANA instance matching. Add focused regressions and document SQL instance restore defaults.

Validation: 104 tests and 70 subtests passed, including all 38 offline recording scenarios. Added-test suite: 59 tests and 72 subtests passed. Syntax/name pylint and whitespace checks passed.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).

@iwrinshow

Copy link
Copy Markdown
Member Author

Please fix CI issues

Fixed CI issues

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants