Repository navigation
DurableTask: New beta extension version for 2026-07-01-preview features - #10482
Bernd Verst (berndverst) wants to merge 11 commits into
Conversation
|
Azure Pipelines: There may be pipelines that require an authorized user to comment /azp run to run. |
There was a problem hiding this comment.
🟡 Changes recommended
Restart registration still overrides the new handler, and encryption creation loses a compatibility-preserving default.
3 open issues
What changed in this PR
Extends DurableTask CLI support for 2026-07-01-preview, adding task queues, scheduler failover operations, and encryption key auto-rotation.
Changes:
- Adds taskqueue and failover-instance command groups.
- Updates taskhub and encryption APIs, including auto-rotation support.
- Adds a generated scheduler restart handler and documents taskhub selection.
Paths below are relative to src/durabletask/.
| File | Description |
|---|---|
README.md |
Documents taskqueue taskhub selection. |
azext_durabletask/aaz/latest/durabletask/taskqueue/_wait.py |
Adds queue condition polling. |
azext_durabletask/aaz/latest/durabletask/taskqueue/_update.py |
Adds queue throughput updates. |
azext_durabletask/aaz/latest/durabletask/taskqueue/_show.py |
Adds queue retrieval. |
azext_durabletask/aaz/latest/durabletask/taskqueue/_list.py |
Adds paginated queue listing. |
azext_durabletask/aaz/latest/durabletask/taskqueue/_delete.py |
Adds queue deletion. |
azext_durabletask/aaz/latest/durabletask/taskqueue/_create.py |
Adds queue creation. |
azext_durabletask/aaz/latest/durabletask/taskqueue/__init__.py |
Imports queue commands. |
azext_durabletask/aaz/latest/durabletask/taskqueue/__cmd_group.py |
Registers the queue command group. |
azext_durabletask/aaz/latest/durabletask/taskhub/_wait.py |
Updates polling API version. |
azext_durabletask/aaz/latest/durabletask/taskhub/_show.py |
Updates retrieval API version. |
azext_durabletask/aaz/latest/durabletask/taskhub/_list.py |
Updates listing API version. |
azext_durabletask/aaz/latest/durabletask/taskhub/_delete.py |
Updates deletion API version. |
azext_durabletask/aaz/latest/durabletask/taskhub/_create.py |
Updates creation API version. |
azext_durabletask/aaz/latest/durabletask/scheduler/transparent_data_encryption/_wait.py |
Updates API and reads auto-rotation state. |
azext_durabletask/aaz/latest/durabletask/scheduler/transparent_data_encryption/_update.py |
Adds auto-rotation updates. |
azext_durabletask/aaz/latest/durabletask/scheduler/transparent_data_encryption/_show.py |
Exposes auto-rotation state. |
azext_durabletask/aaz/latest/durabletask/scheduler/transparent_data_encryption/_delete.py |
Updates API and removes preview marking. |
azext_durabletask/aaz/latest/durabletask/scheduler/transparent_data_encryption/_create.py |
Adds auto-rotation; removes key-source default. |
azext_durabletask/aaz/latest/durabletask/scheduler/transparent_data_encryption/__cmd_group.py |
Removes group preview marking. |
azext_durabletask/aaz/latest/durabletask/scheduler/failover_instance/_wait.py |
Adds failover-instance polling. |
azext_durabletask/aaz/latest/durabletask/scheduler/failover_instance/_update.py |
Adds partner scheduler updates. |
azext_durabletask/aaz/latest/durabletask/scheduler/failover_instance/_show.py |
Adds failover-instance retrieval. |
azext_durabletask/aaz/latest/durabletask/scheduler/failover_instance/_force_failover_allow_data_loss.py |
Adds forced failover. |
azext_durabletask/aaz/latest/durabletask/scheduler/failover_instance/_failover.py |
Adds graceful failover. |
azext_durabletask/aaz/latest/durabletask/scheduler/failover_instance/_delete.py |
Adds failover-instance deletion. |
azext_durabletask/aaz/latest/durabletask/scheduler/failover_instance/_create.py |
Adds failover-instance creation. |
azext_durabletask/aaz/latest/durabletask/scheduler/failover_instance/__init__.py |
Imports failover commands. |
azext_durabletask/aaz/latest/durabletask/scheduler/failover_instance/__cmd_group.py |
Registers the failover command group. |
azext_durabletask/aaz/latest/durabletask/scheduler/_update.py |
Removes help examples only. |
azext_durabletask/aaz/latest/durabletask/scheduler/_restart.py |
Adds a generated restart handler. |
azext_durabletask/aaz/latest/durabletask/scheduler/__init__.py |
Imports the restart handler. |
Review effort: Balanced
|
/azp run |
|
Azure Pipelines: Successfully started running 2 pipeline(s). |
|
/azp run |
|
Azure Pipelines: Successfully started running 2 pipeline(s). |
|
/azp run |
|
Azure Pipelines: Successfully started running 2 pipeline(s). |
Sync missing task queue, scheduler failover, restart, and encryption key rotation examples from Azure/azure-cli-extensions#10482. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 1fa7d6ba-e6f1-457a-8829-9834cec6a58e
|
Bernd Verst (@berndverst) Generated-command provenance remains blocking, and failover outcome assertions need strengthening. The new request tests and seven playback recordings provide substantive evidence for the other command paths.
|
|
aaz: Azure/aaz#1138 |
|
Bernd Verst (@berndverst) There is very little test coverage for this module. Could you add some life cycle scenario tests for all the commands? Please refer to https://github.com/Azure/azure-cli/blob/dev/doc/authoring_tests.md#automating-tests-for-azure-cli for guidance |
|
/azp run |
|
Azure Pipelines: Successfully started running 2 pipeline(s). |
|
/azp run |
|
Azure Pipelines: Successfully started running 2 pipeline(s). |
Align 2026-07-01-preview models with Azure/azure-cli-extensions#10482. Remove unused retention-policy, scheduler CRUD/update/list, identity, and taskhub update versions and their unused resource configurations. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Bernd Verst (@berndverst) As mention please refer to https://github.com/Azure/azure-cli/blob/dev/doc/authoring_tests.md#automating-tests-for-azure-cli for authoring scenario tests (integration tests). Scenario tests seek to record the interactions with ARM to validate the schema and to verify proper life cycles of the commands. Since, many of the commands are code generated from AAZ models, unit testing the generated commands provide little value as their outputs are already deterministic. Please also address the failing CI issue, a potential credential was detected. |
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
JaysonTaiMicrosoft this has never been required of this before and we are in a time crunch now. Given this is a beta CLI extension I think we should approve and merge this. Understood that we want to have recorded tests all of a sudden for the CLI extension (never required of us before) and we can do so in the future. Credential leak is a false positive. Pushed a commit that should address that however. |
|
JaysonTaiMicrosoft integration testing also provides no real value - we are a typespec based RP. We use RPaaS - RPaaS validates inbound and outbound requests against the swagger generated from Typespec. All our management SDKs are auto generated from Typespec as well. |
|
/azp run |
|
Azure Pipelines: Successfully started running 2 pipeline(s). |
Record real scheduler, identity, task hub, retention, task queue, restart, encryption rotation, and Function App attachment lifecycles. Sanitize account metadata and signed operation links. Keep service-blocked failover coverage explicitly live-only. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Added replayable integration tests and four real VCR recordings in commit The
All four scenarios passed against real Azure resources and in offline playback. The checked-in recordings are under Validation against Azure CLI 2.92.0: the repository's full pre-push test run passed 61 tests, with 1 live-only test skipped. The pre-push linter, pylint, and flake8 checks also passed. The remaining limitation is failover: the live attempt produced a failed configuration while its asynchronous ARM operation continued polling. That scenario is explicitly |
There was a problem hiding this comment.
Review comments are inline on the changed lines. See the X Engineering Agent Report.
| '--scheduler-name {scheduler} --yes') | ||
| self.cmd('durabletask scheduler delete -g {rg} -n {scheduler} --yes') | ||
|
|
||
| @live_only() |
There was a problem hiding this comment.
Failover request/response/output coverage remains unverified
This is the only service failover scenario and is skipped in playback; the four committed recordings contain no failover-instance requests. Lines 243-255 also check provisioning success rather than role/state transitions after graceful and forced actions. The documented unsuccessful deployment explains the missing recording but does not establish these behaviors. On a working deployment, assert the actual transitions, capture sanitized successful traffic and enable playback; add terminal polling-failure coverage. Verify with azdev test --series --live test_durabletask_failover_lifecycle_live, then playback after enabling it.
X Engineering Agent · Reviewer · react 👍 / 👎 to train the reviewer
| value, flags=re.IGNORECASE) | ||
| value = re.sub(r'([?&](?:c|s|h|t)=)[^&"\s]+', r'\g<1>redacted', value) | ||
| return re.sub( | ||
| r'[a-z0-9-]+\.([a-z0-9]+)\.durabletask\.io', |
There was a problem hiding this comment.
Recording sanitizer corrupts encoded dashboard endpoints
For an encoded endpoint ending in %2f%2f<hostname>, this regex consumes the second 2f together with the hostname. The committed scheduler recording at tests/latest/recordings/test_durabletask_scheduler_lifecycle_recorded.yaml:1419 already contains endpoint=https%3a%2f%scheduler.northcentralus.durabletask.io, a malformed URL. Preserve encoded URI delimiters when replacing the hostname and repair affected recordings. Extend test_dashboard_links_do_not_reveal_tenant_or_scheduler_host to assert exact encoded/decoded endpoint validity and idempotence, then rerun that test and scheduler/taskqueue playback.
X Engineering Agent · Reviewer · react 👍 / 👎 to train the reviewer
|
/azp run |
|
Azure Pipelines: Successfully started running 2 pipeline(s). |
Record independent taskhub, retention-policy and multi-identity lifecycles. Preserve unrelated identities during selective removal. Retry failover with a westus2 partner and retain its sanitized service-failure trace explicitly as diagnostics. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Follow-up in
These three scenarios passed live and offline playback. There are now seven passing service recordings containing 309 sanitized HTTP interactions. Failover uses a second Dedicated scheduler in westus2, with the primary in northcentralus. Both schedulers reach Succeeded, but failover configuration still transitions to Failed. Retrying with a provisioned primary task hub did not resolve it. A sanitized real trace is checked in at Full validation and pre-push hooks passed: 65 tests passed, 1 service-blocked live-only test skipped, plus linter/pylint/flake8. The medium-confidence secret scan and account-identifier audit also passed. |
|
/azp run |
|
Azure Pipelines: Successfully started running 2 pipeline(s). |


🤖 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 azdevrequired)For new extensions:
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.