Migrate FrontDoor provisioning generation#60575
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Migrates Azure.Provisioning.FrontDoor from the legacy reflection-based provisioning generator to the TypeSpec-based provisioning generator, updating the generated resource/model layer and aligning docs/tests/API listings with the new output.
Changes:
- Added TypeSpec provisioning generation configuration (
tsp-location.yaml,metadata.json). - Regenerated FrontDoor provisioning resources/models with the TypeSpec provisioning emitter (including the
FrontendEndpointData→FrontendEndpointAPI rename). - Updated changelog, README samples, tests, and API listing files to match the new generated surface.
Reviewed changes
Copilot reviewed 8 out of 121 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| sdk/frontdoor/Azure.Provisioning.FrontDoor/tsp-location.yaml | Adds TypeSpec spec location and emitter config for provisioning generation. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/metadata.json | Pins provisioning API version metadata for Microsoft.Network. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/CHANGELOG.md | Documents breaking changes and generator migration. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/README.md | Updates samples to new API surface (e.g., FrontendEndpoint). |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/api/Azure.Provisioning.FrontDoor.netstandard2.0.cs | Updates public API listing for regenerated surface. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/api/Azure.Provisioning.FrontDoor.net8.0.cs | Updates public API listing for regenerated surface. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/api/Azure.Provisioning.FrontDoor.net10.0.cs | Updates public API listing for regenerated surface. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/tests/BasicFrontDoorTests.cs | Updates tests to compile/validate the new generated surface. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/tests/BasicLiveFrontDoorTests.cs | Updates live-test scaffolding to the new generated surface. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/FrontDoorResource.cs | Regenerated FrontDoorResource and related helpers for TypeSpec provisioning. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/FrontendEndpoint.cs | Regenerated FrontendEndpoint as a ProvisionableResource (replacing FrontendEndpointData). |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/FrontDoorWebApplicationFirewallPolicy.cs | Regenerated WAF policy resource for TypeSpec provisioning. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/FrontDoorRulesEngine.cs | Regenerated rules engine resource/types for TypeSpec provisioning. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/FrontDoorExperiment.cs | Regenerated experiment resource/types for TypeSpec provisioning. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/FrontDoorNetworkExperimentProfile.cs | Regenerated network experiment profile resource/types. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Internal/CodeGenTypeAttribute.cs | Adds generator internal customization attributes (generated). |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Internal/CodeGenMemberAttribute.cs | Adds generator internal customization attributes (generated). |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Internal/CodeGenSerializationAttribute.cs | Adds generator internal customization attributes (generated). |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Internal/CodeGenSuppressAttribute.cs | Adds generator internal customization attributes (generated). |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/FrontDoorRequiredMinimumTlsVersion.cs | Regenerated enum used by HTTPS configuration. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/FrontendEndpointCustomHttpsProvisioningState.cs | Regenerated model enum for provisioning status. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/FrontendEndpointCustomHttpsProvisioningSubstate.cs | Regenerated model enum for provisioning substate. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/FrontendEndpointProperties.cs | Regenerated internal properties model for FrontendEndpoint. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/RoutingRuleProperties.cs | Regenerated internal properties model for routing rules. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/RoutingRuleUpdateParametersWebApplicationFirewallPolicyLink.cs | Regenerated internal link model for routing rule WAF linkage. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/FrontendEndpointUpdateParametersWebApplicationFirewallPolicyLink.cs | Regenerated internal link model for frontend endpoint WAF linkage. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/FrontDoorSubResource.cs | Regenerated shared internal subresource reference model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/ForwardingConfiguration.cs | Regenerated route configuration derived type. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/RouteConfiguration.cs | Regenerated route configuration base type. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/FrontDoorCacheConfiguration.cs | Regenerated cache configuration model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/ManagedRuleSet.cs | Regenerated WAF managed rule set model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/ManagedRuleOverride.cs | Regenerated WAF managed rule override model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/ManagedRuleGroupOverride.cs | Regenerated WAF managed rule group override model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/ManagedRuleExclusion.cs | Regenerated WAF managed rule exclusion model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/ManagedRuleSetList.cs | Regenerated internal wrapper list model for managed rule sets/exceptions. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/ManagedRuleSetExceptionList.cs | Regenerated internal wrapper list model for rule set exceptions. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/FrontDoorManagedRuleSetException.cs | Regenerated managed rule set exception model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/FrontDoorManagedRuleSetScope.cs | Regenerated managed rule scope model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/FrontDoorRuleGroupScope.cs | Regenerated rule group scope model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/FrontDoorRuleScope.cs | Regenerated rule scope model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/WebApplicationRuleMatchCondition.cs | Regenerated WAF match condition model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/WebApplicationFirewallPolicyProperties.cs | Regenerated internal WAF policy properties model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/WebApplicationFirewallScrubbingRules.cs | Regenerated WAF log scrubbing rule model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/PolicySettingsLogScrubbing.cs | Regenerated WAF policy log scrubbing settings model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/RulesEngineAction.cs | Regenerated rules engine action model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/RulesEngineHeaderAction.cs | Regenerated rules engine header action model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/RulesEngineRule.cs | Regenerated rules engine rule model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/RulesEngineProperties.cs | Regenerated internal rules engine properties model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/BackendPoolsSettings.cs | Regenerated backend pools settings model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/BackendPoolProperties.cs | Regenerated internal backend pool properties model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/HealthProbeSettingsProperties.cs | Regenerated internal health probe settings properties model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/LoadBalancingSettingsProperties.cs | Regenerated internal load balancing settings properties model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/KeyVaultCertificateSourceParameters.cs | Regenerated Key Vault certificate source parameters model. |
| sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated/Models/KeyVaultCertificateSourceParametersVault.cs | Regenerated Key Vault reference model. |
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Provisioning schema extractor outputPackage: Schema extracted from generated and custom source# Provisioning Resource Schema
Package: `sdk/frontdoor/Azure.Provisioning.FrontDoor`
Source: `sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated`
## FrontDoorExperiment
- Resource type: `Microsoft.Network/NetworkExperimentProfiles/Experiments`
- Default API version: `2025-11-01`
- Source file: `src/Generated/FrontDoorExperiment.cs`
- API versions: `2025-11-01`, `2025-10-01`
| Property | Path | Kind | Type | Required | Output | Metadata |
| --- | --- | --- | --- | --- | --- | --- |
| `Id` | `id` | Property | `BicepValue<ResourceIdentifier>` | False | True | False |
| `Name` | `name` | Property | `BicepValue<string>` | True | False | False |
| `Location` | `location` | Property | `BicepValue<AzureLocation>` | False | False | False |
| `Tags` | `tags` | DictionaryProperty | `BicepDictionary<string>` | False | False | False |
| `Properties` | `properties` | ModelProperty | `ExperimentProperties` | False | False | False |
| `Parent` | `parent` | Resource | `FrontDoorNetworkExperimentProfile` | True | False | True |
## FrontDoorNetworkExperimentProfile
- Resource type: `Microsoft.Network/NetworkExperimentProfiles`
- Default API version: `2025-11-01`
- Source file: `src/Generated/FrontDoorNetworkExperimentProfile.cs`
- API versions: `2025-11-01`, `2025-10-01`
| Property | Path | Kind | Type | Required | Output | Metadata |
| --- | --- | --- | --- | --- | --- | --- |
| `Id` | `id` | Property | `BicepValue<ResourceIdentifier>` | False | True | False |
| `Name` | `name` | Property | `BicepValue<string>` | True | False | False |
| `Location` | `location` | Property | `BicepValue<AzureLocation>` | False | False | False |
| `Tags` | `tags` | DictionaryProperty | `BicepDictionary<string>` | False | False | False |
| `Properties` | `properties` | ModelProperty | `ProfileProperties` | False | False | False |
| `ETag` | `etag` | Property | `BicepValue<ETag>` | False | False | False |
## FrontDoorResource
- Resource type: `Microsoft.Network/frontDoors`
- Default API version: `2025-11-01`
- Source file: `src/Generated/FrontDoorResource.cs`
- Additional source files: `src/Custom/FrontDoorResource.cs`
- API versions: `2025-11-01`, `2025-10-01`
| Property | Path | Kind | Type | Required | Output | Metadata |
| --- | --- | --- | --- | --- | --- | --- |
| `Id` | `id` | Property | `BicepValue<ResourceIdentifier>` | False | True | False |
| `Name` | `name` | Property | `BicepValue<string>` | True | False | False |
| `Location` | `location` | Property | `BicepValue<AzureLocation>` | False | False | False |
| `Tags` | `tags` | DictionaryProperty | `BicepDictionary<string>` | False | False | False |
| `Properties` | `properties` | ModelProperty | `FrontDoorProperties` | False | False | False |
## FrontDoorRulesEngine
- Resource type: `Microsoft.Network/frontDoors/rulesEngines`
- Default API version: `2025-11-01`
- Source file: `src/Generated/FrontDoorRulesEngine.cs`
- API versions: `2025-11-01`, `2025-10-01`
| Property | Path | Kind | Type | Required | Output | Metadata |
| --- | --- | --- | --- | --- | --- | --- |
| `Id` | `id` | Property | `BicepValue<ResourceIdentifier>` | False | True | False |
| `Name` | `name` | Property | `BicepValue<string>` | True | False | False |
| `Properties` | `properties` | ModelProperty | `RulesEngineProperties` | False | False | False |
| `Parent` | `parent` | Resource | `FrontDoorResource` | True | False | True |
## FrontDoorWebApplicationFirewallPolicy
- Resource type: `Microsoft.Network/FrontDoorWebApplicationFirewallPolicies`
- Default API version: `2025-11-01`
- Source file: `src/Generated/FrontDoorWebApplicationFirewallPolicy.cs`
- API versions: `2025-11-01`, `2025-10-01`
| Property | Path | Kind | Type | Required | Output | Metadata |
| --- | --- | --- | --- | --- | --- | --- |
| `Id` | `id` | Property | `BicepValue<ResourceIdentifier>` | False | True | False |
| `Name` | `name` | Property | `BicepValue<string>` | True | False | False |
| `Location` | `location` | Property | `BicepValue<AzureLocation>` | False | False | False |
| `Tags` | `tags` | DictionaryProperty | `BicepDictionary<string>` | False | False | False |
| `Properties` | `properties` | ModelProperty | `WebApplicationFirewallPolicyProperties` | False | False | False |
| `ETag` | `etag` | Property | `BicepValue<ETag>` | False | False | False |
| `Sku` | `sku` | ModelProperty | `FrontDoorSku` | False | False | False |
## FrontendEndpoint ⚠️
- Resource type: `Microsoft.Network/frontDoors/frontendEndpoints`
- Default API version: `2025-11-01`
- Source file: `src/Generated/FrontendEndpoint.cs`
- API versions: `2025-11-01`, `2025-10-01`
| Property | Path | Kind | Type | Required | Output | Metadata |
| --- | --- | --- | --- | --- | --- | --- |
| `Id` | `id` | Property | `BicepValue<ResourceIdentifier>` | False | True | False |
| `Name` | `name` | Property | `BicepValue<string>` | True | False | False |
| `Properties` | `properties` | ModelProperty | `FrontendEndpointProperties` | False | False | False |
| `Parent` | `parent` | Resource | `FrontDoorResource` | True | False | True |
⚠️ **`Name` is Required=True, Output=False** but `Name` property has no public setter.
⚠️ **`HostName`, `SessionAffinityEnabledState`, `SessionAffinityTtlInSeconds`, `WebApplicationFirewallPolicyLinkId`** are writable in `FrontendEndpointProperties` but exposed as getters-only in `FrontendEndpoint`.Analyzed by provisioning-review workflow.
|
There was a problem hiding this comment.
Provisioning SDK Review Summary
- Scope:
sdk/frontdoor/Azure.Provisioning.FrontDoor - Classification: Regeneration (reflection-based → TypeSpec provisioning generator migration)
- CI: pass (all check runs succeeded)
- Schema and metadata: fail —
FrontendEndpointis missing public setters for all writable properties;FrontDoorWebApplicationFirewallPolicyname requirements regressed - Compatibility: not applicable (beta package, breaking changes documented in CHANGELOG)
- Tests/snippets/docs: pass (snippet regions and
Trycep.Compare()pattern present; README references snippet regions)
Two blocking issues require fixes before merge.
1. FrontendEndpoint writable properties have no public setters (blocking)
FrontendEndpoint is a ProvisionableResource for Microsoft.Network/frontDoors/frontendEndpoints. Its provisioning definition marks name as isRequired: true, isOutput: false, and the underlying FrontendEndpointProperties exposes setters for HostName, SessionAffinityEnabledState, SessionAffinityTtlInSeconds, and WebApplicationFirewallPolicyLinkId. However, none of these properties have public setters on the FrontendEndpoint class itself:
Name— required, getter-only (inline comment on line 41)HostName,SessionAffinityEnabledState,SessionAffinityTtlInSeconds,WebApplicationFirewallPolicyLinkId— writable per Bicep spec + doc comments say "Gets or sets", but getter-only in practice (inline comment on line 112)
The result is that FrontendEndpoint cannot be configured either as a standalone child resource or as an embedded item in FrontDoorResource.FrontendEndpoints. The tests work around this by never populating FrontDoorResource.FrontendEndpoints and referencing endpoints only by raw resourceId() strings — but that leaves the primary usage path broken.
Root cause is likely in the TypeSpec spec or emitter; the fix must be confirmed in a re-generation cycle.
2. FrontDoorWebApplicationFirewallPolicy.GetResourceNameRequirements() regression (blocking)
The newly generated code returns ResourceNameCharacters.LowercaseLetters only (line 315), replacing the previous LowercaseLetters | UppercaseLetters | Numbers | Hyphen | Underscore | Period | Parentheses. The Bicep reference for Microsoft.Network/FrontDoorWebApplicationFirewallPolicies allows mixed-case letters, digits, and hyphens. Names like "MyWafPolicy1" or "waf-policy-prod" — valid before — would now fail SDK name validation. This needs to be fixed in the spec or emitter before shipping.
Analyzed by provisioning-review workflow: run 28777825134
Analyzed by Azure .NET Provisioning SDK PR Review: https://github.com/Azure/azure-sdk-for-net/actions/runs/28777825134
| } | ||
|
|
||
| /// <summary> Gets the Name. </summary> | ||
| public BicepValue<string> Name |
There was a problem hiding this comment.
[Provisioning schema] Name is defined as isRequired: true, isOutput: false in DefineProvisionableProperties (line 152), meaning it is a required writable property. However the public Name property only exposes a getter — there is no setter. The doc-comment correctly says "Gets the Name", but that means users have no way to set the name of a FrontendEndpoint resource.
Every other non-singleton ProvisionableResource in this package (FrontDoorResource, FrontDoorRulesEngine, FrontDoorExperiment, FrontDoorNetworkExperimentProfile, FrontDoorWebApplicationFirewallPolicy) exposes Name with a public setter. This one is missing it.
Required fix: add a public setter:
public BicepValue<string> Name
{
get { Initialize(); return _name; }
set { Initialize(); _name.Assign(value); }
}| } | ||
|
|
||
| /// <summary> Gets or sets the HostName. </summary> | ||
| public BicepValue<string> HostName |
There was a problem hiding this comment.
[Provisioning schema] The doc comments for HostName (line 111), SessionAffinityEnabledState (line 120), SessionAffinityTtlInSeconds (line 129), and WebApplicationFirewallPolicyLinkId (line 138) all say "Gets or sets", but all four properties are getter-only — the underlying FrontendEndpointProperties object has setters for all of them, but they are not tunnelled through here.
This makes FrontendEndpoint unusable in two ways:
- As a standalone child resource —
hostNameis required by the ARM/Bicep spec forMicrosoft.Network/frontDoors/frontendEndpoints; without a setter it can never be configured. - As an embedded model in
FrontDoorResource.FrontendEndpoints— users who trynew FrontendEndpoint { HostName = "...", Name = "..." }will get a compiler error.
The tests avoid using FrontDoorResource.FrontendEndpoints entirely because of this gap, and the generated Bicep examples therefore produce incomplete FrontDoor configurations.
Required fix: add setters that delegate to the underlying Properties object, following the same pattern used for FriendlyName, RoutingRules, etc. on FrontDoorResource:
public BicepValue<string> HostName
{
get { return Properties.HostName; }
set { if (Properties is null) { Properties = new FrontendEndpointProperties(); } Properties.HostName = value; }
}The Properties field will also need an internal setter (currently it only has a getter).
| /// <summary> Get the requirements for naming this resource. </summary> | ||
| /// <returns> Naming requirements. </returns> | ||
| [EditorBrowsable(EditorBrowsableState.Never)] | ||
| public override ResourceNameRequirements GetResourceNameRequirements() => new ResourceNameRequirements(1, 128, ResourceNameCharacters.LowercaseLetters); |
There was a problem hiding this comment.
[Provisioning schema] GetResourceNameRequirements() now returns ResourceNameCharacters.LowercaseLetters only. This is a regression: the code that was deleted below (lines ~326–328 in the old file) used LowercaseLetters | UppercaseLetters | Numbers | Hyphen | Underscore | Period | Parentheses.
According to the Azure Bicep reference for Microsoft.Network/FrontDoorWebApplicationFirewallPolicies, the policy name allows letters (upper and lower case), digits, hyphens, and underscores. Restricting to lowercase letters only will cause the SDK to reject valid policy names like "MyWafPolicy1" or "waf-policy-prod".
The fix should restore at minimum: ResourceNameCharacters.LowercaseLetters | ResourceNameCharacters.UppercaseLetters | ResourceNameCharacters.Numbers | ResourceNameCharacters.Hyphen | ResourceNameCharacters.Underscore. This should be corrected in the TypeSpec spec or emitter configuration.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Provisioning schema extractor outputPackage: Schema extracted from generated and custom source# Provisioning Resource Schema
Package: `sdk/frontdoor/Azure.Provisioning.FrontDoor`
Source: `sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Generated`
## FrontDoorExperiment
- Resource type: `Microsoft.Network/NetworkExperimentProfiles/Experiments`
- Default API version: `2025-11-01`
- Source file: `src/Generated/FrontDoorExperiment.cs`
| Property | Path | Kind | Type | Required | Output | Metadata |
| --- | --- | --- | --- | --- | --- | --- |
| `Id` | `id` | Property | `BicepValue<ResourceIdentifier>` | False | True | False |
| `Name` | `name` | Property | `BicepValue<string>` | True | False | False |
| `Location` | `location` | Property | `BicepValue<AzureLocation>` | False | False | False |
| `Tags` | `tags` | DictionaryProperty | `BicepDictionary<string>` | False | False | False |
| `Properties` | `properties` | ModelProperty | `ExperimentProperties` | False | False | False |
| `Parent` | `parent` | Resource | `FrontDoorNetworkExperimentProfile` | True | False | True |
## FrontDoorNetworkExperimentProfile
- Resource type: `Microsoft.Network/NetworkExperimentProfiles`
- Default API version: `2025-11-01`
- Source file: `src/Generated/FrontDoorNetworkExperimentProfile.cs`
| Property | Path | Kind | Type | Required | Output | Metadata |
| --- | --- | --- | --- | --- | --- | --- |
| `Id` | `id` | Property | `BicepValue<ResourceIdentifier>` | False | True | False |
| `Name` | `name` | Property | `BicepValue<string>` | True | False | False |
| `Location` | `location` | Property | `BicepValue<AzureLocation>` | False | False | False |
| `Tags` | `tags` | DictionaryProperty | `BicepDictionary<string>` | False | False | False |
| `Properties` | `properties` | ModelProperty | `ProfileProperties` | False | False | False |
| `ETag` | `etag` | Property | `BicepValue<ETag>` | False | False | False |
## FrontDoorResource
- Resource type: `Microsoft.Network/frontDoors`
- Default API version: `2025-11-01`
- Source file: `src/Generated/FrontDoorResource.cs`
- Additional source files: `src/Custom/FrontDoorResource.cs`
| Property | Path | Kind | Type | Required | Output | Metadata |
| --- | --- | --- | --- | --- | --- | --- |
| `Id` | `id` | Property | `BicepValue<ResourceIdentifier>` | False | True | False |
| `Name` | `name` | Property | `BicepValue<string>` | True | False | False |
| `Location` | `location` | Property | `BicepValue<AzureLocation>` | False | False | False |
| `Tags` | `tags` | DictionaryProperty | `BicepDictionary<string>` | False | False | False |
| `Properties` | `properties` | ModelProperty | `FrontDoorProperties` | False | False | False |
## FrontDoorRulesEngine
- Resource type: `Microsoft.Network/frontDoors/rulesEngines`
- Default API version: `2025-11-01`
- Source file: `src/Generated/FrontDoorRulesEngine.cs`
| Property | Path | Kind | Type | Required | Output | Metadata |
| --- | --- | --- | --- | --- | --- | --- |
| `Id` | `id` | Property | `BicepValue<ResourceIdentifier>` | False | True | False |
| `Name` | `name` | Property | `BicepValue<string>` | True | False | False |
| `Properties` | `properties` | ModelProperty | `RulesEngineProperties` | False | False | False |
| `Parent` | `parent` | Resource | `FrontDoorResource` | True | False | True |
## FrontDoorWebApplicationFirewallPolicy
- Resource type: `Microsoft.Network/FrontDoorWebApplicationFirewallPolicies`
- Default API version: `2025-11-01`
- Source file: `src/Generated/FrontDoorWebApplicationFirewallPolicy.cs`
| Property | Path | Kind | Type | Required | Output | Metadata |
| --- | --- | --- | --- | --- | --- | --- |
| `Id` | `id` | Property | `BicepValue<ResourceIdentifier>` | False | True | False |
| `Name` | `name` | Property | `BicepValue<string>` | True | False | False |
| `Location` | `location` | Property | `BicepValue<AzureLocation>` | False | False | False |
| `Tags` | `tags` | DictionaryProperty | `BicepDictionary<string>` | False | False | False |
| `Properties` | `properties` | ModelProperty | `WebApplicationFirewallPolicyProperties` | False | False | False |
| `ETag` | `etag` | Property | `BicepValue<ETag>` | False | False | False |
| `Sku` | `sku` | ModelProperty | `FrontDoorSku` | False | False | False |
## FrontendEndpoint
- Resource type: `Microsoft.Network/frontDoors/frontendEndpoints`
- Default API version: `2025-11-01`
- Source file: `src/Generated/FrontendEndpoint.cs`
| Property | Path | Kind | Type | Required | Output | Metadata |
| --- | --- | --- | --- | --- | --- | --- |
| `Id` | `id` | Property | `BicepValue<ResourceIdentifier>` | False | True | False |
| `Name` | `name` | Property | `BicepValue<string>` | True | False | False |
| `Properties` | `properties` | ModelProperty | `FrontendEndpointProperties` | False | False | False |
| `Parent` | `parent` | Resource | `FrontDoorResource` | True | False | True |
|
There was a problem hiding this comment.
Provisioning SDK Review Summary
- Scope:
sdk/frontdoor/Azure.Provisioning.FrontDoor - Classification: Regeneration (reflection-based → TypeSpec provisioning generator migration)
- CI: pass (all check runs succeeded on the latest head commit)
- Schema and metadata: fail — the two blocking issues from the previous workflow review persist unchanged in this head commit
- Compatibility: not applicable (beta package, breaking changes documented in CHANGELOG)
- Tests/snippets/docs: pass
The latest commit (fc80f4151905) only updated tsp-location.yaml to switch from a personal fork to the upstream Azure/azure-rest-api-specs repo — a correct and welcome change. However, the generated C# code was not re-regenerated with this commit, so the two blocking issues flagged in the previous workflow review remain present in the generated source:
-
FrontendEndpoint.Namehas no public setter (see open inline thread onFrontendEndpoint.csline 41):_nameis defined withisRequired: true, isOutput: false, meaning it is a writable required property, but theNameproperty onFrontendEndpointonly exposes a getter. Every other resource in this package exposesNamewith a setter. This prevents object-initializer assignment and is inconsistent with the SDK pattern. -
FrontendEndpointwritable propertiesHostName,SessionAffinityEnabledState,SessionAffinityTtlInSeconds,WebApplicationFirewallPolicyLinkIdhave no public setters (see open inline thread onFrontendEndpoint.csline 112): The underlyingFrontendEndpointPropertieshas setters for all four, but they are not tunnelled through the publicFrontendEndpointsurface. The doc comments say "Gets or sets" but only a getter is provided, making it impossible to configure these properties via object initializer or assignment syntax. -
FrontDoorWebApplicationFirewallPolicy.GetResourceNameRequirements()regression (see open inline thread onFrontDoorWebApplicationFirewallPolicy.csline 315): The method returnsResourceNameCharacters.LowercaseLettersonly. Per the Azure Bicep reference forMicrosoft.Network/FrontDoorWebApplicationFirewallPolicies, valid policy names include uppercase letters, digits, hyphens, and underscores. This restriction will cause the SDK to reject valid names like"MyWafPolicy1"or"waf-policy-prod". The fix should restore at minimum:LowercaseLetters | UppercaseLetters | Numbers | Hyphen | Underscore.
All three issues are rooted in the TypeSpec spec or emitter configuration and require a regeneration pass after the upstream spec fix is in place. Please address them before merging.
Analyzed by Azure .NET Provisioning SDK PR Review: https://github.com/Azure/azure-sdk-for-net/actions/runs/28783271077
Analyzed by Azure .NET Provisioning SDK PR Review: https://github.com/Azure/azure-sdk-for-net/actions/runs/28783271077
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Provisioning SDK Review Summary
- Scope:
sdk/frontdoor/Azure.Provisioning.FrontDoor - Classification: Regeneration (reflection-based → TypeSpec provisioning generator migration)
- CI: pass (all 23 check runs succeeded on head commit
a255dd6999c38d48bab51a30bdf7a2df9bc79ca7) - Schema and metadata: fail — three blocking issues from prior workflow reviews persist after the generator-update regeneration
- Compatibility: not applicable (beta package; breaking changes documented in CHANGELOG)
- Tests/snippets/docs: pass
The latest commit ("Regenerate FrontDoor provisioning after generator update") merged generator prerelease 1.0.0-alpha.20260706.4 and re-ran generation. However, all three blocking issues flagged in the prior two workflow reviews remain in the new generated output, confirmed by direct inspection of the current source files.
Existing open review threads (not outdated, not resolved) that remain blocking:
-
FrontendEndpoint.Namehas no public setter —DefineProvisionablePropertiesregisters_namewithisRequired: true(writable), but theNameproperty only exposes a getter. Users cannot assign a name to aFrontendEndpointresource. Open thread: #discussion_r3527456257 onFrontendEndpoint.csline 41. -
FrontendEndpointwritable properties have no setters —HostName,SessionAffinityEnabledState,SessionAffinityTtlInSeconds, andWebApplicationFirewallPolicyLinkIddoc-comment as "Gets or sets" but each only exposes a getter, even thoughFrontendEndpointPropertieshas setters for all four. This makes it impossible to configure aFrontendEndpointas either a standalone child resource or an embedded item inFrontDoorResource.FrontendEndpoints. Open thread: #discussion_r3527456269 onFrontendEndpoint.csline 112. -
FrontDoorWebApplicationFirewallPolicy.GetResourceNameRequirements()returnsLowercaseLettersonly — valid WAF policy names contain uppercase letters, digits, hyphens, and underscores (e.g.,"MyWafPolicy1","waf-policy-prod"), but the current implementation rejects all of these. The fix should restore at minimumLowercaseLetters | UppercaseLetters | Numbers | Hyphen | Underscore. Open thread: #discussion_r3527456271 onFrontDoorWebApplicationFirewallPolicy.csline 315.
All three issues are rooted in the TypeSpec spec or emitter configuration and require a fix in the spec/emitter followed by regeneration. The generator update in this round did not address them.
Note: Schema extraction via Get-ProvisioningSchema.ps1 could not be run in this environment due to a PowerShell module availability issue (filesystem cmdlets unavailable).
Analyzed by Azure .NET Provisioning SDK PR Review: https://github.com/Azure/azure-sdk-for-net/actions/runs/28844439485
Analyzed by Azure .NET Provisioning SDK PR Review: https://github.com/Azure/azure-sdk-for-net/actions/runs/28844439485
Migrates
Azure.Provisioning.FrontDoorfrom the reflection-based generator to the TypeSpec provisioning generator.Spec PRs:
Milestone issue: #57387
Tracking issue: #58753
Changes:
tsp-location.yamlandmetadata.jsonfor TypeSpec provisioning generation.FrontDoorResourcevia SDK-sideCodeGenType("FrontDoor")customization.FrontendEndpointData->FrontendEndpointAPI rename and removal of older historical resource-version constants.FrontDoorRequiredMinimumTlsVersion.Tls1_0/Tls1_2names through the follow-up exact-name spec customization.Validation:
dotnet build sdk/frontdoor/Azure.Provisioning.FrontDoor/src/Azure.Provisioning.FrontDoor.csproj --no-restoredotnet build /t:GenerateCodeinsdk/frontdoor/Azure.Provisioning.FrontDoor/srcdotnet formatsrc/test projectseng/scripts/Export-API.ps1 frontdooreng/scripts/Update-Snippets.ps1 frontdoordotnet test sdk/frontdoor/Azure.Provisioning.FrontDoor/tests/Azure.Provisioning.FrontDoor.Tests.csproj --filter TestCategory!=Live