Repository navigation
Add Azure Virtual Desktop personal and pooled workspace services - #5075
Marcus Robinson (marrobi) wants to merge 10 commits into
Conversation
…t user resource Co-authored-by: marrobi <17089773+marrobi@users.noreply.github.com>
…fault Co-authored-by: marrobi <17089773+marrobi@users.noreply.github.com>
Co-authored-by: marrobi <17089773+marrobi@users.noreply.github.com>
There was a problem hiding this comment.
🔵 Needs a closer look
Deployment integration and DNS prerequisites have unresolved issues, and several live acceptance checks remain incomplete.
Pull request overview
Adds Azure Virtual Desktop workspace services supporting personal and pooled desktops, with secure networking, Entra authentication, access controls, and operational documentation.
Changes:
- Adds AVD host pools, session hosts, private endpoints, diagnostics, registration, and SSO pre-consent.
- Adds personal desktop user resources with VM-specific connections and clipboard controls.
- Updates workspace networking, DNS, versions, and documentation.
File summaries
| File | Description |
|---|---|
templates/workspaces/base/terraform/network/security.tf |
Adds AVD and activation egress rules. |
templates/workspaces/base/porter.yaml |
Bumps base workspace version. |
templates/workspace_services/avd/user_resources/README.md |
Documents personal session hosts. |
.../avd-personal-sessionhost/terraform/variables.tf |
Defines user-resource inputs. |
.../avd-personal-sessionhost/terraform/providers.tf |
Configures Terraform providers. |
.../avd-personal-sessionhost/terraform/prepare_session_host.ps1.tftpl |
Applies clipboard policy before restart. |
.../avd-personal-sessionhost/terraform/outputs.tf |
Exposes VM and connection details. |
.../avd-personal-sessionhost/terraform/main.tf |
Provisions and assigns personal desktops. |
.../avd-personal-sessionhost/terraform/locals.tf |
Defines naming and configuration values. |
.../avd-personal-sessionhost/terraform/ensure_registration.sh |
Renews registration credentials. |
.../avd-personal-sessionhost/terraform/data.tf |
Resolves parent AVD resources. |
.../avd-personal-sessionhost/terraform/configure_session_host.ps1.tftpl |
Registers and configures the VM. |
.../avd-personal-sessionhost/terraform/.terraform.lock.hcl |
Locks provider versions. |
.../avd-personal-sessionhost/template_schema.json |
Defines personal desktop options. |
.../avd-personal-sessionhost/porter.yaml |
Defines the personal desktop bundle. |
.../avd-personal-sessionhost/parameters.json |
Maps bundle environment parameters. |
.../avd-personal-sessionhost/Dockerfile.tmpl |
Builds the personal bundle image. |
.../avd-personal-sessionhost/Configuration.zip.sha256 |
Pins the bootstrap artifact checksum. |
.../avd-personal-sessionhost/.env.sample |
Adds sample deployment settings. |
.../avd-personal-sessionhost/.dockerignore |
Configures bundle build exclusions. |
templates/workspace_services/avd/terraform/variables.tf |
Defines AVD service inputs. |
templates/workspace_services/avd/terraform/providers.tf |
Configures Azure providers. |
templates/workspace_services/avd/terraform/prepare_session_host.ps1.tftpl |
Applies pooled-host policy. |
templates/workspace_services/avd/terraform/pooled_session_hosts.tf |
Provisions pooled session hosts. |
templates/workspace_services/avd/terraform/outputs.tf |
Exposes service connection outputs. |
templates/workspace_services/avd/terraform/network.tf |
Creates AVD private endpoints. |
templates/workspace_services/avd/terraform/main.tf |
Provisions core AVD resources. |
templates/workspace_services/avd/terraform/locals.tf |
Defines service naming and policies. |
templates/workspace_services/avd/terraform/ensure_registration.sh |
Manages registration tokens. |
templates/workspace_services/avd/terraform/data.tf |
Resolves supporting Azure resources. |
templates/workspace_services/avd/terraform/consent.tf |
Implements optional SSO pre-consent. |
templates/workspace_services/avd/terraform/configure_session_host.ps1.tftpl |
Configures pooled session hosts. |
templates/workspace_services/avd/terraform/.terraform.lock.hcl |
Locks service provider versions. |
templates/workspace_services/avd/template_schema.json |
Defines service configuration and pipelines. |
templates/workspace_services/avd/porter.yaml |
Defines the AVD service bundle. |
templates/workspace_services/avd/parameters.json |
Maps service environment parameters. |
templates/workspace_services/avd/Dockerfile.tmpl |
Builds the AVD bundle image. |
templates/workspace_services/avd/Configuration.zip.sha256 |
Pins the bootstrap artifact checksum. |
templates/workspace_services/avd/.env.sample |
Adds sample service settings. |
templates/workspace_services/avd/.dockerignore |
Configures bundle exclusions. |
mkdocs.yml |
Adds AVD documentation navigation. |
docs/tre-templates/workspace-services/azure-virtual-desktop.md |
Documents deployment and operation. |
core/version.txt |
Bumps the core version. |
core/terraform/allowed-dns.json |
Allows Windows App DNS suffixes. |
CHANGELOG.md |
Records the AVD enhancement. |
Review details
Files not reviewed (2)
- templates/workspace_services/avd/terraform/.terraform.lock.hcl: Generated file
- templates/workspace_services/avd/user_resources/avd-personal-sessionhost/terraform/.terraform.lock.hcl: Generated file
- Files reviewed: 43/45 changed files
- Comments generated: 6
- Review effort level: Balanced
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
🟡 Changes recommended
Pooled scaling remains blocked, sensitive credentials were exposed in diagnostics, and deployment prerequisites and automated test execution remain incomplete.
Get a fresh assessment by requesting another Copilot review.
Review details
Files not reviewed (2)
- templates/workspace_services/avd/terraform/.terraform.lock.hcl: Generated file
- templates/workspace_services/avd/user_resources/avd-personal-sessionhost/terraform/.terraform.lock.hcl: Generated file
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
templates/workspace_services/avd/terraform/network.tf:2
- AVD Private Link requires
Microsoft.DesktopVirtualizationto be re-registered on each target subscription before private endpoints are used, but the repository's provider-registration bootstrap does not include it and the AVD prerequisites do not mention this step. Existing subscriptions can therefore fail while creating these endpoints; add the re-registration/preflight for the workspace subscription or make it an explicit prerequisite.
- Files reviewed: 52/54 changed files
- Comments generated: 4
- Review effort level: Balanced
| | `host_pool_type` | `Personal`/`Pooled` (Default: `Personal`) | Select personal child VMs or workspace-managed pooled VMs | | ||
| | `enable_sso_preconsent` | `true`/`false` (Default: `false`) | Automate a service-owned dynamic device group for pre-consent; consider licensing and optional Graph write permissions | | ||
| | `maximum_sessions` | 1-50 (Default: 10) | Maximum concurrent sessions on each pooled host | | ||
| | `pooled_session_host_count` | 1-10 (Default: 1) | Updateable number of multi-session hosts in a pooled deployment | |
There was a problem hiding this comment.
🟡 Changes recommended
Conditional PATCH validation still prevents the advertised pooled host-count update workflow, and the draft acceptance checks remain incomplete.
Get a fresh assessment by requesting another Copilot review.
Review details
Files not reviewed (2)
- templates/workspace_services/avd/terraform/.terraform.lock.hcl: Generated file
- templates/workspace_services/avd/user_resources/avd-personal-sessionhost/terraform/.terraform.lock.hcl: Generated file
- Files reviewed: 51/53 changed files
- Comments generated: 0 new
- Review effort level: Balanced
…osoft#5075) Add a schema-only count fallback and generic API conditional-PATCH tests. Run isolated, locked AVD schema and registration suites in Build Validation; exclude test dependencies from the bundle image. Bump AVD, API and DevOps patch versions and distinguish local validation from pending live scaling acceptance. Validation: 30 resource repository tests, 11 Node checks, 10 registration scenarios and clean npm ci for the isolated suite passed. Flake8 passed; stalled yaspeller hook skipped for this commit with explicit approval. Additional follow-ups: live scale-out/scale-in and remaining client/deployment acceptance; separate shared diagnostic security remediation and operational credential/record handling. The experiment and local validation report are excluded. Existing UI dependency/lockfile inconsistencies are not changed.
…soft#5075) Remove implementation history and test-status commentary from the service guide while retaining operational prerequisites and precautions. Yaspeller skipped with explicit approval after its external API returned HTTP 307 with an empty response.
There was a problem hiding this comment.
🔵 Needs a closer look
The PR remains a draft with critical interactive access, scaling, cross-subscription, workflow, activation, and authorization checks still pending.
Review details
Files not reviewed (3)
- templates/workspace_services/avd/terraform/.terraform.lock.hcl: Generated file
- templates/workspace_services/avd/tests/package-lock.json: Generated file
- templates/workspace_services/avd/user_resources/avd-personal-sessionhost/terraform/.terraform.lock.hcl: Generated file
- Files reviewed: 55/58 changed files
- Comments generated: 0 new
- Review effort level: Balanced
Resolves #517 and #1014
Closes #517
Closes #1014
What is being addressed
Provide Azure Virtual Desktop within a TRE workspace, with personal desktops assigned to individual researchers and workspace-managed pooled desktops. Support multiple personal desktops per user with VM-specific connection links, meaningful desktop names, and workspace-group authorization.
This PR remains a draft until the outstanding acceptance checks below are completed. Both host-pool types use Standard management; the separate Session Host Configuration experiment is not included.
How is this addressed
Validation completed
Pending before ready for review / merge
pooled_session_host_countcurrently fails because validation lacks the existinghost_pool_type; the updateable flag alone is insufficient.Deployment notes
Deploy the required core/base prerequisites before AVD. This is the initial v1 release; no migration compatibility for the pre-release naming is provided. The activation IP list targets Azure public cloud; sovereign clouds require their corresponding endpoints. No shared firewall DNS-proxy cleanup is included. In development environments where DNS proxy was enabled during testing, replace FQDN network rules and check for other dependencies before disabling it. Do not remove temporary direct user entitlements until workspace-group access is established and verified.