Enable backup and snapshot protection on Azure NetApp volumes
@timtalbot is already working on this.
Since Apr 29, 2026.
- Dominant language
- Go
- Stars
- 7
- Forks
- 2
- Avg merge
- 1d 15h
- Merged PRs (30d)
- 3
Description
Problem
AWS workloads have automatic backup protection on FSx OpenZFS file systems — 30-day retention with daily backups at 02:00 UTC. Azure workloads have no equivalent protection on their NetApp volumes. These volumes hold the same critical data (user home directories, shared project storage) but have zero backup or snapshot coverage today.
If an Azure NetApp volume is corrupted or accidentally modified, there is currently no recovery path short of support escalation.
Current state
AWS (aws_workload_persistent.py):
automatic_backup_retention_days=30daily_automatic_backup_start_time="02:00"(configurable)copy_tags_to_backups=True
Azure (azure_workload_persistent.py):
- No
data_protectionparameter onCapacityPoolVolumeresources - No snapshot policy
- No backup vault or backup policy
Proposed changes
Add three new resources to the Azure persistent infrastructure and wire them into each volume:
1. Snapshot policy
Create an azure_native.netapp.SnapshotPolicy on the NetApp account with a daily schedule (matching the AWS 02:00 UTC window). Retain enough snapshots for fast local recovery (e.g. 7 daily).
2. Backup vault
Create an azure_native.netapp.BackupVault on the NetApp account. This stores backups separately from the volume, surviving volume deletion.
3. Backup policy
Create an azure_native.netapp.BackupPolicy on the NetApp account with 30 daily backups retained (matching AWS FSx retention).
4. Wire into volumes
Add data_protection to each CapacityPoolVolume:
data_protection=netapp.VolumePropertiesDataProtectionArgs(
backup=netapp.VolumeBackupPropertiesArgs(
backup_policy_id=backup_policy.id,
backup_vault_id=backup_vault.id,
),
snapshot=netapp.VolumeSnapshotPropertiesArgs(
snapshot_policy_id=snapshot_policy.id,
),
)
Configuration
Add to AzureWorkloadConfig:
| Field | Default | Notes |
|---|---|---|
netapp_daily_backup_start_time |
"02:00" |
Hour/minute UTC for daily snapshots and backups |
netapp_backup_retention_days |
30 |
Daily backups to retain |
netapp_snapshot_retention_days |
7 |
Daily snapshots to retain (local, fast restore) |
Rollout notes
- Existing volumes will need a Pulumi import or careful state management since they weren't created with
data_protection. Test with--dry-runfirst. - The first backup per volume is a full copy — may take significant time depending on volume size. Schedule during low-usage windows.
- Backups require an active snapshot policy on the volume, so snapshot policy must be assigned before backup is enabled.
protect_persistent_resourcesshould also apply to the backup vault.
Manual interim steps
Until this is codified in Pulumi, backups can be enabled manually per-account in the Azure portal:
- Create a snapshot policy under the NetApp account > Data protection > Snapshot policy
- Assign the snapshot policy to each volume
- Create a backup vault under the NetApp account > Data protection > Backup vaults
- Create a backup policy under the NetApp account > Data protection > Backup policies (30 daily)
- Enable backups on each volume, selecting the vault and policy
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.