Onboarding ESAN for DPP Workloads - #9938
Conversation
❌Azure CLI Extensions Breaking Change Test
|
|
ESAN |
…t, and command configurations
…nd restore scripts, update permissions, and refine help documentation
…estore request, add JSON validation in backup initialization, and implement tests for backup/restore configurations
7f46d2b to
d07636e
Compare
…API version for backup/restore, enhance validation, and implement tests for backup/restore workflows
|
Azure Pipelines: There may be pipelines that require an authorized user to comment /azp run to run. |
There was a problem hiding this comment.
Pull request overview
This PR bumps the dataprotection extension version and onboards Azure Elastic SAN (AzureElasticSAN / Elastic SAN volume groups) into the extension, including manifests, CLI surface area for backup/restore configuration, and supporting tests/docs. It also pins relevant backup-instance operations to the 2026-06-01 DataProtection API version.
Changes:
- Add AzureElasticSAN datasource onboarding (manifest + datasource type registration + restore criteria plumbing + MSI permissions support).
- Add docs and tests covering Elastic SAN backup/restore configuration and initialization flows.
- Update selected AAZ-generated backup-instance operations to use API version
2026-06-01.
Reviewed changes
Copilot reviewed 18 out of 19 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| src/dataprotection/setup.py | Bump extension version to 1.12.0. |
| src/dataprotection/README.md | Add Elastic SAN backup/restore example scripts. |
| src/dataprotection/HISTORY.rst | Add 1.12.0 release notes for AzureElasticSAN support. |
| src/dataprotection/azext_dataprotection/tests/latest/test_dataprotection_update_msi_permissions.py | Add skipped regression scaffolds for eSAN MSI permissions paths. |
| src/dataprotection/azext_dataprotection/tests/latest/test_dataprotection_esan.py | Add non-live CLI logic tests for eSAN onboarding. |
| src/dataprotection/azext_dataprotection/tests/latest/test_dataprotection_configs.py | Add unit-style tests for eSAN backup/restore config initialization and validation. |
| src/dataprotection/azext_dataprotection/tests/latest/test_dataprotection_backup_and_restore_workloads.py | Add a live-only end-to-end eSAN backup/restore scenario. |
| src/dataprotection/azext_dataprotection/manual/Manifests/config.py | Register AzureElasticSAN as a supported datasource type. |
| src/dataprotection/azext_dataprotection/manual/Manifests/AzureElasticSAN.py | Add the Elastic SAN workload manifest and default policy template. |
| src/dataprotection/azext_dataprotection/manual/helpers.py | Add eSAN restore-criteria handling and permission help text mapping. |
| src/dataprotection/azext_dataprotection/manual/custom.py | Implement eSAN backupconfig/restoreconfig initialization and wire item-level restore criteria. |
| src/dataprotection/azext_dataprotection/manual/_params.py | Add CLI parameters for eSAN backup/restore config and related help text. |
| src/dataprotection/azext_dataprotection/manual/_help.py | Add help examples referencing AzureElasticSAN. |
| src/dataprotection/azext_dataprotection/aaz/latest/dataprotection/backup_instance/restore/_trigger.py | Pin restore trigger API version to 2026-06-01. |
| src/dataprotection/azext_dataprotection/aaz/latest/dataprotection/backup_instance/_validate_for_restore.py | Pin validate-for-restore API version to 2026-06-01. |
| src/dataprotection/azext_dataprotection/aaz/latest/dataprotection/backup_instance/_validate_for_backup.py | Pin validate-for-backup API version to 2026-06-01. |
| src/dataprotection/azext_dataprotection/aaz/latest/dataprotection/backup_instance/_update.py | Pin update API version + extend schema for generic backup datasource params selectors. |
| src/dataprotection/azext_dataprotection/aaz/latest/dataprotection/backup_instance/_create.py | Pin create API version + extend schema for generic backup datasource params selectors. |
Suppressed comments (1)
src/dataprotection/README.md:127
- This restore-config example selects multiple source volumes, but the eSAN scenario test notes that a backup instance is single-volume. Unless multi-volume instances are actually supported, the restore-config example should be updated to match the single-volume model.
az dataprotection backup-instance initialize-restoreconfig \
--datasource-type AzureElasticSAN \
--resource-identifiers source-vol1 source-vol2 \
--resource-name-overrides '{"source-vol1":"restored-vol1","source-vol2":"restored-vol2"}' > esan_restore_config.json
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
…store configurations, enhance help documentation, and improve error handling
…orkloadOnboarding # Conflicts: # src/dataprotection/HISTORY.rst # src/dataprotection/setup.py
…on 2026-06-01 bump The eSAN change bumped backup-instance create/update/validate-for-backup/validate-for-restore/restore-trigger operations to api-version=2026-06-01. Update the recorded request URIs in the 8 affected backup-instance cassettes so VCR playback matches the version the CLI now sends; polling, show, delete and non-bumped operations are left at their recorded versions.
…non-blob datasource types don't require az login The initialize-backupconfig command was registered with client_factory=cf_blob_container_mgmt, which eagerly builds a storage management client (requiring an authenticated account) before the handler runs. This made AzureElasticSAN/AzureKubernetesService unit tests fail with 'Please run az login'. Build the blob client lazily inside the AzureBlob/AzureDataLakeStorage branch only when --include-all-containers is used, so eSAN/AKS paths no longer require login.
…orkloadOnboarding # Conflicts: # src/dataprotection/HISTORY.rst # src/dataprotection/setup.py
… Elastic SAN backup/restore
|
Adds the 2026-06-01 DataProtection API command models for the Azure Elastic SAN (eSAN) backup/restore onboarding, keeping the aaz command models in sync with the changes made in the azure-cli-extensions dataprotection extension |
…r aaz reproducibility (eSAN) The eSAN change hand-edited the api-version and resource_selectors in these aaz-generated commands but left the _aaz_info version metadata stale, so regenerating reverted the customizations. Regenerate create/update/validate-for-backup/validate-for-restore/restore-trigger from the 2026-06-01 command model (Azure/aaz#1083) so _aaz_info, api-version, and schema are consistent and the commands reproduce cleanly. No runtime change for create/validate/restore (already called 2026-06-01); update moves 2026-03-01 to 2026-06-01 where resource_selectors is valid.
|
[Release] Update index.json for extension [ dataprotection-1.12.0 ] : https://dev.azure.com/msazure/One/_build/results?buildId=180237654&view=results |
🤖 PR Validation —⚠️ Review suggested
This checklist is used to make sure that common guidelines for a pull request are followed.
Related command
General Guidelines
azdev style <YOUR_EXT>locally? (pip install azdevrequired)python scripts/ci/test_index.py -qlocally? (pip install wheel==0.30.0required)About Extension Publish
There is a pipeline to automatically build, upload and publish extension wheels.
Once your pull request is merged into main branch, a new pull request will be created to update
src/index.jsonautomatically.You only need to update the version information in file setup.py and historical information in file HISTORY.rst in your PR but do not modify
src/index.json.