* Add telemetry tags to Advisor tools
Emit subscription, service group, recommendation type ID, category and
sub-category values on the ToolExecuted activity from each Advisor command.
McpRuntime only captures a top-level `subscription` argument, so namespace
server mode (where arguments are nested in `parameters`) loses it today.
Null or blank values are skipped.
* Add impact, group-by and prioritized telemetry tags to Advisor tools
Tag `advisor/Impact` on recommendation list, summary and metadata list,
`advisor/Prioritized` on recommendation list and summary, and
`advisor/GroupBy` on recommendation summary. Null or blank values are skipped.
* Restrict Advisor telemetry tag values to known formats
Tag the subscription only when it is a GUID, the recommendation type ID only
when it is a GUID, and category, impact and group-by only when they match the
existing allow-lists, using their canonical casing. Sub-category is trimmed,
matching the existing filter normalization. Values that do not match are not
tagged.
* Hash the service group name in Advisor telemetry
Record a SHA-256 hash of the trimmed, lowercased service group name instead of
the raw name, following the Deploy project name pattern.
* Record the raw service group name in Advisor telemetry
Revert the SHA-256 hashing of `advisor/ServiceGroup`. The raw name is
recorded and will be classified in the GDPR inventory.
* Add azurebackup operation get tool
Adds the azurebackup operation get command to read asynchronous RSV backup operation status at vault scope or protected-item scope. Returns timestamps, sanitized errors, and actual job IDs when present, without treating operation IDs as job IDs. Includes unit tests, a recorded integration test, docs, changelog, and consolidated-tools registration.
* Map OperationCanceledException to 504 in operation get command
Override GetStatusCode so all cancellations (including TaskCanceledException) return GatewayTimeout, matching the canceled GetErrorMessage instead of falling through to 500. Adds unit coverage for both exception types.
* Wait for operation-get live update LRO to complete before final assertions
The re-submitted protected-item update now awaits WaitForCompletionResponseAsync so the final-state checks observe the settled write and no operation lingers into later tests or cleanup. Re-recorded (assets tag 59d31d946a).
* Address operation get review feedback and refresh recording
* Add package name and package version to logs.
* Pass dummy hash when no hash is provided.
* Revert "Pass dummy hash when no hash is provided."
This reverts commit 3449133ed429c799db553ea5e2a96a69aa7cc5ed.
---------
Co-authored-by: Travis Prescott <trpresco@microsoft.com>
* Add the Azure Resiliency Agent tool area
Exposes the Azure Resiliency Agent through a single conversation-level tool,
resiliencyagent_conversation_ask. A developer describes an application in their
own words and receives a zonal resilience assessment, or asks for zone-resilient
Bicep, ARM or Terraform templates for new resources.
The area holds no agent logic. It is a thin client over the agent's existing A2A
surface, so the backend keeps ownership of what a turn does, including which
scenario handles it and when to stop and ask the user something. That is why one
conversation-level tool covers both assessment and template generation rather
than one tool per Azure operation.
The agent is multi-turn: it asks its own clarifying questions before it can act.
A single tool call therefore carries an entire conversation. The command polls
the agent, raises an elicitation when the agent needs input, feeds the answer
back, and returns once. The host model issues one call and never sees the
polling, so clarifying questions reach the user exactly as the agent wrote them
rather than depending on a model to follow instructions about how to poll.
While a turn is running the agent publishes short reasoning steps. Those are
forwarded as progress notifications, which also resets client inactivity timers
on a call that can run for minutes.
Templates and reports are written to the caller's working directory and returned
as paths, following the pattern the Azure Migrate platform landing zone tool
uses. A generated template is more useful as a file that can be opened and
deployed than as text in a chat reply, and a long report does not have to travel
through the model's context. Artifact names arrive from a remote service and are
treated as untrusted input when used as file names.
The tool is marked LocalRequired because it asks the user questions over the
client connection, which is not available in HTTP mode.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Add Start Resilient Azure MCP tool surface
Add five architecture and IaC scenario tools, local file attachment with explicit consent and bounded in-memory caching, A2A FilePart forwarding, public data-boundary routing, MCP artifact content blocks, evaluations, documentation, and tests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Clean up Resiliency Agent README entry
Remove stale POC prompts and use customer-facing service-area language.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Use generated Resiliency Agent evaluations
Remove the checked-in Vally specification and rely on the repository evaluator to generate unattended routing evaluations from the E2E prompt inventory. Normalize interactive scenarios to the supported context-required classification.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Evaluate inline resiliency IaC reviews
Add generated Vally coverage for inline ARM, Bicep, and Terraform reviews. Clarify that review commands accept source directly in the request while local files use attachment IDs.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Prefer attachments for IaC reviews
Guide complete and multi-file templates through the attachment flow while retaining direct support for templates pasted inline. Reserve existing IaC resiliency review for the format-specific Resiliency Agent commands instead of generic guidance tools.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Fix A2A inline file discriminator
Include the nested FileContent kind discriminator required by the A2A polymorphic contract so uploaded bytes, filename, and MIME type survive backend deserialization and blob offload.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Add general Resiliency Agent guidance
Add a conceptual guidance command and routing prompts, and make the public A2A endpoint plus delegated scope fixed production constants with no runtime environment overrides or auth bypass.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Add Resiliency Agent service owner
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Fix Resiliency Agent PR checks
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Handle canonical macOS temp paths in artifact tests
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Address Resiliency Agent review feedback
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Improve Resiliency Agent tool routing
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Improve Resiliency Agent artifact presentation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Materialize resiliency reports in workspaces
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Add clickable links for resiliency artifacts
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Retrigger PR checks
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Harden Resiliency Agent conversation handling
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Address Resiliency Agent artifact and test review
Preserve backend artifacts when workspace writes fail, harden metadata bounds, use factory-managed HTTP clients, and add recorded ARM/A2A playback coverage.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Fix Resiliency Agent cross-platform CI tests
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Clarify Resiliency Agent attachment evaluation prompt
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 974958dc-ded9-4351-bed3-07227e1bce92
* Add six resiliency Goals tools for GA 2026-10-01
Integrate the supplied GA SDK, typed tool contracts, lifecycle coverage, and published ECY recordings. Keep known CI readiness blockers explicit in the draft PR.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix Goals documentation links and trim investigation notes
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Trim Goals delivery documentation and consolidate regression tests
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Use released Resilience Management SDK 1.0.0
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Resolve Goals metadata tests through the command factory
Use the stable command lookup API so the new tests remain compatible with upstream CommandRegistration wrappers.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Update existing Resiliency MCP Tools for GA Release
Migrate the Resiliency SDK integration and existing Drills API surfaces to GA. Add request validation, isolated fixtures, recording scenarios, HTTP contract tests, and documentation.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add SDK GA upgrade usage recovery plan
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* up
* up
* up
* up
* up
* up
* up
* up
* up
* up
* up
* up
* up
* Resilience drills: keep integrated fixture plan Ready; align drill tools with GA SDK
- Drills fixture brings the recovery plan back to Ready (exclude new service-group members, finalize, checkReadiness) before and after the full failover/reprotect cycle; RO rejects failover unless the plan is Ready.
- Remove --recoveryplan from drill create/update: recoveryPlanId is read-only in the GA SDK and never serialized; the service links the service group's plan.
- Return the drill managed identity in drill get/create/update output.
- Always emit hasCompleted for drill resync, validation, add-or-update, and mark-complete results.
- Update docs, e2e prompts, skill reference, changelog, and tests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Resilience: expose remaining GA SDK request fields and re-record live tests
- Drill create/update: --identity, --chaos-resource-properties, --recovery-plan-properties, --monitoring-properties; update --resource-group.
- Drill run failover: --user-consent (Unspecified/Allowed).
- Recovery plan create: None identity, --default-group-unique-id, CustomRunbook action associatedIdentity (Zonal only).
- Recovery plan resource update: CrossZoneVMRecovery protection; rejected long-running updates now return 400 with the service error code.
- Usage plan create: --tags.
- Re-recorded affected live tests against GA 2026-10-01 (assets tag Azure.Mcp.Tools.ResilienceManagement.Tests_9f4bd3a70d), added a CrossZoneVMRecovery rejection test, removed orphan preview recordings.
- Tuned drill update and drill run failover descriptions (ToolDescriptionEvaluator: changed tools' non-clarification prompts min 0.618).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Resilience: document drill update resource group as immutable after creation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Resilience: consolidate test fixtures and record Goals tests on canary
Inline the drills post script into test-resources-post.ps1, remove the PR 3921 goal fixture scripts, add a dedicated goals service group to the main fixture, and record the Goals GA tests on canary until the service reaches production.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* up
* up
* up
* up
* Resilience: record drill run report tests and publish assets.json
- Read the report download URL and expiry from the raw operation response; the
service returns downloadUrl/expiryTimestamp, which the SDK model does not map.
- Sanitize the signed downloadUrl in recordings.
- Make the download URL test retry only on a 409 from a prior run operation and
stop generating a second report.
- Point assets.json at Azure.Mcp.Tools.ResilienceManagement.Tests_fe97a70f15
(79 recordings, including the three drill run report tests and a re-recorded
Should_create_usage_plan).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix cspell failure in drill run report eval doc
Remove the personal branch name that cspell flagged as unknown words.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix broken evaluator link in drill run report eval doc
Use the absolute GitHub URL, matching CONTRIBUTING.md, so the link check passes.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* up
* up
* Resilience: read generate-report summary from the DrillRun envelope
generateReport returns 202 with the DrillRun resource, so the SDK model has no
value and the summary was always null. Read it from properties.report in the raw
operation response (same approach as the download URL), keep using the SDK
value when present, and assert the returned report in the recorded test. The
existing recording replays unchanged.
Also update the tool count in the Resilience skill tools reference to 49.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Dhruv Bharuka <dhruvbharuka@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add six resiliency Goals tools for GA 2026-10-01
Integrate the supplied GA SDK, typed tool contracts, lifecycle coverage, and published ECY recordings. Keep known CI readiness blockers explicit in the draft PR.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix Goals documentation links and trim investigation notes
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Trim Goals delivery documentation and consolidate regression tests
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Use released Resilience Management SDK 1.0.0
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Resolve Goals metadata tests through the command factory
Use the stable command lookup API so the new tests remain compatible with upstream CommandRegistration wrappers.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Update existing Resiliency MCP Tools for GA Release
Migrate the Resiliency SDK integration and existing Drills API surfaces to GA. Add request validation, isolated fixtures, recording scenarios, HTTP contract tests, and documentation.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add SDK GA upgrade usage recovery plan
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* up
* up
* up
* up
* up
* up
* up
* up
* up
* up
* up
* up
* up
* Resilience drills: keep integrated fixture plan Ready; align drill tools with GA SDK
- Drills fixture brings the recovery plan back to Ready (exclude new service-group members, finalize, checkReadiness) before and after the full failover/reprotect cycle; RO rejects failover unless the plan is Ready.
- Remove --recoveryplan from drill create/update: recoveryPlanId is read-only in the GA SDK and never serialized; the service links the service group's plan.
- Return the drill managed identity in drill get/create/update output.
- Always emit hasCompleted for drill resync, validation, add-or-update, and mark-complete results.
- Update docs, e2e prompts, skill reference, changelog, and tests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Resilience: expose remaining GA SDK request fields and re-record live tests
- Drill create/update: --identity, --chaos-resource-properties, --recovery-plan-properties, --monitoring-properties; update --resource-group.
- Drill run failover: --user-consent (Unspecified/Allowed).
- Recovery plan create: None identity, --default-group-unique-id, CustomRunbook action associatedIdentity (Zonal only).
- Recovery plan resource update: CrossZoneVMRecovery protection; rejected long-running updates now return 400 with the service error code.
- Usage plan create: --tags.
- Re-recorded affected live tests against GA 2026-10-01 (assets tag Azure.Mcp.Tools.ResilienceManagement.Tests_9f4bd3a70d), added a CrossZoneVMRecovery rejection test, removed orphan preview recordings.
- Tuned drill update and drill run failover descriptions (ToolDescriptionEvaluator: changed tools' non-clarification prompts min 0.618).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Resilience: document drill update resource group as immutable after creation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Resilience: consolidate test fixtures and record Goals tests on canary
Inline the drills post script into test-resources-post.ps1, remove the PR 3921 goal fixture scripts, add a dedicated goals service group to the main fixture, and record the Goals GA tests on canary until the service reaches production.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* up
* up
---------
Co-authored-by: Dhruv Bharuka <dhruvbharuka@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add Storage Intelligence disk diagnostics
* Support prefix-free application scopes
* Add host latency to disk diagnostics
* Remove Storage disk latency flag
* Improve storage disk diagnose tool description
* Support VMSS instances in disk diagnostics
* Add recorded live test for disk diagnostics
* Update disk resolver for Azure service API
* Default Storage Intelligence configuration
* Restore recorded endpoint for playback
* Address storage disk diagnostics review feedback
* Align disk diagnostics with latest command contract
* Fix disk diagnostics spelling checks
* Secure disk diagnostics endpoints and support tenant selection
* Adapt disk endpoint validation to the shared validator service
* Use Azure service facade for disk endpoint validation
---------
Co-authored-by: Pranjal Abhyankar <pabhyankar@microsoft.com>
docs: move Device Provisioning Service sections into alphabetical order
The sections added by #3898 were inserted between Insights and IoT Hub in all
three docs. Relocate them to their alphabetical position next to the other
Device services: between Deploy and Device Registry in azmcp-commands.md and
e2eTestPrompts.md, and between Database for PostgreSQL and Event Grid in the
README prompt list.
Pure block moves, no content changes; moved blocks contain no annotation
comments.
Fixes#3970
Co-authored-by: kun654 <273006726+kun654@users.noreply.github.com>
Ensure GitHub release tags created by the publishing pipeline point to the exact source commit built by Azure DevOps.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 844d677d-8613-46c9-8988-ae14b2e4c208
* Publish complete eval build results directly to Blob
* Report sanitized Blob publication failure diagnostics
* Opt eval publishing into the AzureStorage network policy
* Publish real skill and live eval results to Blob
* Enable scoped automatic publication for tools main evals
* Remove dedicated synthetic storage smoke mode
* Restrict refresh token destinations and make publisher lock portable
* Reject noncanonical archive identities and clarify publisher boundaries
* Document the production-only dashboard boundary
* Convert Blob publisher scripts to TypeScript
* Notify the dashboard after publishing evaluation results
* Centralize eval publication configuration and simplify pipeline IDs
* Simplify eval publication and close validation gaps
* Simplify eval result publication and strengthen failure recovery
* Use one eval publication opt-in for upload and storage egress
* Keep one main-only eval publication switch
* Use pipeline configuration and Azure CLI for eval publication
* Fix eval publication edge cases and run regressions in PR CI
* Configure eval dashboard endpoints through pipeline variables
* Remove optional eval publication receipts
* Simplify eval bundling and support Node 24 with pnpm
---------
Co-authored-by: helen229 <gaoh@microsoft.com>
* Add `monitor traces` commands for Azure Monitor Trace Store
Adds four commands for querying distributed traces stored in an Azure
Monitor Workspace: listing trace-enabled workspaces, listing queryable
trace/span fields, running a KQL trace query, and cancelling a running
query.
Trace query uses a hand-built data-plane pipeline rather than a generated
SDK because no Azure SDK client exists for the Trace Store data plane; the
service validates the workspace host suffix and parses the AMW ARM ID
before issuing requests.
These commands are intended for private preview only. Registration is
unconditional, so exclusion from a GA release is a release-branch
coordination decision and is not enforced in code.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Fix Monitor traces review findings
Carry Resource Graph truncation through trace account responses instead of reporting incomplete discovery as complete. Align required account prompts and query option guidance, and split wire models into one-class files.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Align Monitor traces targeting and validation
Resolve workspaces by subscription, resource group, and name; validate query options and endpoints before execution. Separate query submission from resumption and pin refreshed recordings for the new lookup sequence and compatible workspace preview API.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Separate Monitor trace query resume tool
Expose operation-id polling through query resume with its own paging options, leaving query run submission-only. Reuse the existing polling service and pin the recorded resume coverage.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Drain trace query pages within bounded budgets
Preserve consumed rows and metadata across continuation, timeouts, and failures. Deserialize a typed page envelope and use the endpoint top parameter so requested page sizes are honored.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Fix consolidated metadata for trace query resume
Expose resume under its own non-idempotent consolidated tool so advancing result reads retain correct retry hints and consolidated startup passes metadata validation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Address follow-up Traces review comments
Remove the tool-specific consolidated assertion while keeping generic metadata coverage. Clarify public-cloud support and existing bounded pagination in the command documentation.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Grace Wehner <grwehner@microsoft.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* ManagedLustre: Apply documented defaults when creating an autoimport job
CreateAutoimportJobAsync only set ConflictResolutionMode, AutoImportPrefixes,
AdminStatus, and EnableDeletions on AutoImportJobData when the caller
explicitly passed a value, leaving them unset otherwise. The generated
AutoImportJobData model omits the entire 'properties' object from the
PUT request body when none of its fields are set (confirmed via
ModelReaderWriter), and the StorageCache RP then rejects the request
with '400 InvalidParameter: Required parameter properties is missing'.
This has been the behavior since the autoimport commands were first
added (#1401) - not a regression from a later change. The defaults
documented on AutoimportJobCreateOptions/AutoimportJobCreateCommand
(ConflictResolutionMode: Skip, AutoImportPrefixes: ['/'], AdminStatus:
Enable, EnableDeletions: false) were never actually applied when the
caller omitted them.
Apply those documented defaults unconditionally instead of leaving the
fields unset, so 'properties' - and its previously-optional sub-fields
that ARM still needs on the wire - are always present in the request.
Verified via reflection against the generated AutoImportJobData model
that this produces the same request body as the known-good recorded
autoimport-job creation request (asset hQT1yXcbm4) for
Should_create_azure_managed_lustre_with_storage_and_cmk.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ce6c37d3-fb5b-4100-8c45-fc8ee31b4170
* ManagedLustre: Fixed deployment zone warning.
amlFilesystems does not support availability zones in all regions
(e.g. westus, api-version 2024-07-01 -> ResourceTypeNotSupportAvailabilityZones).
Remove the hardcoded zones:['1'] so the test resource deploys regionally.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ce6c37d3-fb5b-4100-8c45-fc8ee31b4170
* ManagedLustre: Apply documented defaults when creating an autoexport job
Same root cause as the autoimport job fix: CreateAutoexportJobAsync only
set AdminStatus/AutoExportPrefixes when the caller explicitly passed a
value, leaving AutoExportJobData's properties entirely unset otherwise.
The StorageCache REST API omits the 'properties' object from the PUT
body in that case, and ARM rejects it with
'400 InvalidParameter: Required parameter properties is missing'.
Apply the defaults documented on AutoexportJobCreateOptions
(AdminStatus: Enable, AutoexportPrefix: '/') unconditionally, matching
the fix already applied to CreateAutoimportJobAsync.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ce6c37d3-fb5b-4100-8c45-fc8ee31b4170
* ManagedLustre: Fix Enum.Parse crash on extensible enum AutoExportJobAdminStatus
AutoExportJobAdminStatus is an extensible-enum struct (not a true
System.Enum), so Enum.Parse<T> throws 'Type provided must be an Enum'
at runtime regardless of the string value passed in. Replace with the
same switch-based mapping already used for the equivalent
AutoImportJobPropertiesAdminStatus in CreateAutoimportJobAsync, and
drop the now-redundant separate string validation block.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ce6c37d3-fb5b-4100-8c45-fc8ee31b4170
* ManagedLustre: Poll filesystem health before creating an expansion job
ARM rejects expansion-job creation with '400 BadRequest: ExpansionJobs
cannot be created while the amlfilesystem is still finalizing capacity
reservations after initial deployment' even after the filesystem's own
create/update LRO has completed - this finalization isn't reflected in
ProvisioningState, only in AmlFileSystemData.Health.State.
Add a bounded poll (15s interval, 5 minute timeout) in
CreateExpansionJobAsync that waits for the filesystem to report
Health.State == Available before submitting the expansion job, instead
of failing immediately on this known-transient condition. Throws a
clear, bounded-timeout error (reporting the last observed health
state) if the filesystem never becomes available in time.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ce6c37d3-fb5b-4100-8c45-fc8ee31b4170
* Add spelling fixes
* ManagedLustre: Retry expansion job creation on capacity-reservation finalization error
The previous fix polled AmlFileSystemData.Health.State for 'Available'
before submitting the expansion job, on the assumption that Health.State
reflects whether ARM has finished finalizing capacity reservations after
initial deployment. Empirically this is wrong: Health.State reports
Available while ARM still rejects expansion-job creation with
'400 BadRequest: ExpansionJobs cannot be created while the amlfilesystem
is still finalizing capacity reservations after initial deployment.'
Replace the health-state pre-check with a direct bounded retry on the
actual error: catch RequestFailedException matching this specific
message/status and retry (15s interval, 5 minute timeout) instead of
polling an unreliable proxy signal. Rethrows if the condition persists
past the timeout, or immediately for any other error.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ce6c37d3-fb5b-4100-8c45-fc8ee31b4170
* Increase expansion-job retry timeout to 15 minutes
Observed 'finalizing capacity reservations' 400 still occurring after
the bounded 5-minute retry exhausted during a full-suite re-recording.
ARM gives no guaranteed SLA for this transient state to clear, so
widen the retry window to reduce flakiness.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ce6c37d3-fb5b-4100-8c45-fc8ee31b4170
* Add missing sanitizers and update assets
* Add changelog
* Apply CR changes
* Revert 400 change
* Fix spelling errors
* Address CR
* Fix formattign
* Dynamically choose zone.
* Update assets
* Skip delay in playback mode.
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: ce6c37d3-fb5b-4100-8c45-fc8ee31b4170
* Complete Azure Backup IaaS VM policy update support
* Address policy-update review feedback and CI validation failures
* [AzureBackup] Anchor create-path schedule times to deterministic 2000-01-01 baseline
The RSV policy create path built schedule/retention/window datetimes from today's date, so recorded playback request bodies drifted daily and failed CI. Anchor them to the same canonical 2000-01-01 baseline the update path and service use (the date component is ignored by Azure Backup), and update recordings accordingly.
* Fix: de-conflate async operation id from backup job id in protect/update/undelete
Protect, update-protection, and undelete returned the async control-plane operation id in the 'jobId' field when no genuine backup job was available (jobId ??= operationId). That value 404s against 'azurebackup job get'. Now the operation id is surfaced in a new 'OperationId' field, 'JobId' is populated only from a real ConfigureBackup job, and messages point to 'azurebackup protecteditem get' when no job exists (avoiding a wasted 12-minute poll of a non-existent job). Verified live: protect returned distinct jobId (resolves) and operationId (does not resolve as a job).
* test: add service-level async-operation-id regression coverage for RSV protect and DPP undelete
* Fix spelling: deconfliation -> deconflation
* Fix spelling: de-conflation in operation-id extraction test comment