diff --git a/docs/dev_guide.md b/docs/dev_guide.md index c3b09f36..90ff9c1a 100644 --- a/docs/dev_guide.md +++ b/docs/dev_guide.md @@ -46,4 +46,30 @@ Here's an example of how you can run the CLI tool: src/TemplateRefGenerator/bin/Debug/net10.0/TemplateRefGenerator --source-folder ../bicep-types-az/generated --output-folder ./generated ``` -To get detailed logging, use the `--verbose` flag. \ No newline at end of file +To get detailed logging, use the `--verbose` flag. + +## Read-only resources + +Read-only rendering is determined by the source resource type metadata. When +`ResourceType.WritableScopes` is `ScopeType.None`, the generated Bicep, ARM template, +and Terraform sections describe the resource as read-only, retain property reference +tables, and omit deployment syntax and usage examples. No provider-specific remarks +configuration is required. Incorrect writability metadata should be corrected +upstream in the API specifications or type generation. + +## Versioning code samples + +Reference pages are generated for every available API version of included providers. +To restrict a curated code sample to compatible API versions, set its optional +`ApiVersion` property in the provider's remarks configuration: + +```json +"ApiVersion": { + "Minimum": "2026-10-01-preview" +} +``` + +`Minimum` and `Maximum` are inclusive, optional bounds. A minimum-only requirement +includes that version and later versions, not just the latest version. Omit +`ApiVersion` to show the sample on all versions. These filters apply to Bicep, +ARM template, and Terraform samples without removing older reference pages. diff --git a/settings/remarks/microsoft.horizondb/remarks.json b/settings/remarks/microsoft.horizondb/remarks.json index 41624cce..7c83324a 100644 --- a/settings/remarks/microsoft.horizondb/remarks.json +++ b/settings/remarks/microsoft.horizondb/remarks.json @@ -1,129 +1,689 @@ { "$schema": "../../schemas/remarks.schema.json", + "ResourceRemarks": [ + { + "ResourceTypes": [ + "Microsoft.HorizonDb/clusters/logFiles" + ], + "Description": "Log file resources are created and managed by HorizonDB when log capture is enabled through the Microsoft.HorizonDb/clusters/logCaptureConfigurations resource." + } + ], "TerraformSamples": [ { - "ResourceType": "Microsoft.HorizonDB/clusters", + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCapture", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapture/enable.tf", + "Description": "Enable the cluster change data capture capability." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCapture", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapture/update.tf", + "Description": "Update the cluster change data capture capability." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureConfigurations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacaptureconfigurations/enroll-database.tf", + "Description": "Enroll a database for Microsoft Fabric Mirroring." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureConfigurations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacaptureconfigurations/disable.tf", + "Description": "Disable a Microsoft Fabric Mirroring configuration." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapturedestinations/create-fabric.tf", + "Description": "Create a Microsoft Fabric change data capture destination." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapturedestinations/disable.tf", + "Description": "Disable a Microsoft Fabric change data capture destination." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, "Path": "samples/clusters/create.tf", - "Description": "Create a cluster." + "Description": "Create or replace a HorizonDB cluster." }, { - "ResourceType": "Microsoft.HorizonDB/clusters", - "Path": "samples/clusters/update-administrator-login-password.tf", - "Description": "Update a cluster's administrator login password." + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/restore-cross-region.tf", + "Description": "Restore a HorizonDB cluster across Azure regions from the latest available backup." }, { - "ResourceType": "Microsoft.HorizonDB/clusters", - "Path": "samples/clusters/scale-cluster-vertically.tf", - "Description": "Scale a cluster vertically." + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/create-minimum-defaults.tf", + "Description": "Create a PostgreSQL 18 HorizonDB cluster with minimum configuration and service defaults." }, { - "ResourceType": "Microsoft.HorizonDB/clusters", - "Path": "samples/clusters/connect-parameter-group-to-cluster.tf", - "Description": "Connect a parameter group to a cluster." + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/restore-point-in-time.tf", + "Description": "Restore a HorizonDB cluster to a point in time." }, { - "ResourceType": "Microsoft.HorizonDB/parameterGroups", - "Path": "samples/parametergroups/create.tf", - "Description": "Create a parameter group." + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/create-with-data-encryption.tf", + "Description": "Create a HorizonDB cluster with customer-managed key data encryption." }, { - "ResourceType": "Microsoft.HorizonDB/clusters/pools/firewallRules", + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/update.tf", + "Description": "Update a HorizonDB cluster." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/rotate-data-encryption-key.tf", + "Description": "Rotate the customer-managed key used by a HorizonDB cluster." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools/firewallRules", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, "Path": "samples/clusters/pools/firewallrules/create.tf", - "Description": "Create a firewall rule on a cluster." + "Description": "Create or replace a firewall rule on a HorizonDB pool." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations/identityAssignments", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapturedestinations/identityassignments/create.tf", + "Description": "Create a change data capture identity assignment for a UAMI attached to the parent cluster." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/logCaptureConfigurations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/logcaptureconfigurations/disable.tf", + "Description": "Disable PostgreSQL server log capture." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/microsoftEntraAdministrators", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/microsoftentraadministrators/create.tf", + "Description": "Create or replace a Microsoft Entra administrator for a HorizonDB cluster." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/authentications", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/authentications/create-microsoft-entra-disabled.tf", + "Description": "Disable Microsoft Entra authentication declaratively." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/authentications", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/authentications/create-microsoft-entra-enabled.tf", + "Description": "Enable Microsoft Entra authentication declaratively." + }, + { + "ResourceType": "Microsoft.HorizonDb/parameterGroups", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/parametergroups/create.tf", + "Description": "Create or replace a HorizonDB parameter group for a PostgreSQL version." }, { - "ResourceType": "Microsoft.HorizonDB/clusters/pools/replicas", - "Path": "samples/clusters/pools/replicas/add-no-specific-availability-zone.tf", - "Description": "Add a replica without a specific availability zone to a pool." + "ResourceType": "Microsoft.HorizonDb/parameterGroups", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/parametergroups/update.tf", + "Description": "Update a HorizonDB parameter group." }, { - "ResourceType": "Microsoft.HorizonDB/clusters/pools/replicas", - "Path": "samples/clusters/pools/replicas/add-specific-availability-zone.tf", - "Description": "Add a replica in a specific availability zone to a pool." + "ResourceType": "Microsoft.HorizonDb/clusters/authentications", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/authentications/enable-password.tf", + "Description": "Enable password authentication and set the administrator login and password during initial setup." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/create.tf", + "Description": "Create a minimum provisioned HorizonDB pool." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/update-compute.tf", + "Description": "Update a single HorizonDB pool compute property." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/update-high-availability.tf", + "Description": "Require zone-redundant placement for a HorizonDB pool." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/use-default-parameter-group.tf", + "Description": "Switch a HorizonDB pool back to its corresponding default parameter group." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/use-parameter-group-immediately.tf", + "Description": "Associate a HorizonDB pool with a parameter group immediately." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/use-parameter-group-after-reboot.tf", + "Description": "Associate a HorizonDB pool with a parameter group pending reboot." } ], "BicepSamples": [ { - "ResourceType": "Microsoft.HorizonDB/clusters", + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCapture", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapture/enable.bicep", + "Description": "Enable the cluster change data capture capability." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCapture", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapture/update.bicep", + "Description": "Update the cluster change data capture capability." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureConfigurations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacaptureconfigurations/enroll-database.bicep", + "Description": "Enroll a database for Microsoft Fabric Mirroring." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureConfigurations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacaptureconfigurations/disable.bicep", + "Description": "Disable a Microsoft Fabric Mirroring configuration." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapturedestinations/create-fabric.bicep", + "Description": "Create a Microsoft Fabric change data capture destination." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapturedestinations/disable.bicep", + "Description": "Disable a Microsoft Fabric change data capture destination." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, "Path": "samples/clusters/create.bicep", - "Description": "Create a cluster." + "Description": "Create or replace a HorizonDB cluster." }, { - "ResourceType": "Microsoft.HorizonDB/clusters", - "Path": "samples/clusters/update-administrator-login-password.bicep", - "Description": "Update a cluster's administrator login password." + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/restore-cross-region.bicep", + "Description": "Restore a HorizonDB cluster across Azure regions from the latest available backup." }, { - "ResourceType": "Microsoft.HorizonDB/clusters", - "Path": "samples/clusters/scale-cluster-vertically.bicep", - "Description": "Scale a cluster vertically." + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/create-minimum-defaults.bicep", + "Description": "Create a PostgreSQL 18 HorizonDB cluster with minimum configuration and service defaults." }, { - "ResourceType": "Microsoft.HorizonDB/clusters", - "Path": "samples/clusters/connect-parameter-group-to-cluster.bicep", - "Description": "Connect a parameter group to a cluster." + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/restore-point-in-time.bicep", + "Description": "Restore a HorizonDB cluster to a point in time." }, { - "ResourceType": "Microsoft.HorizonDB/parameterGroups", - "Path": "samples/parametergroups/create.bicep", - "Description": "Create a parameter group." + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/create-with-data-encryption.bicep", + "Description": "Create a HorizonDB cluster with customer-managed key data encryption." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/update.bicep", + "Description": "Update a HorizonDB cluster." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/rotate-data-encryption-key.bicep", + "Description": "Rotate the customer-managed key used by a HorizonDB cluster." }, { - "ResourceType": "Microsoft.HorizonDB/clusters/pools/firewallRules", + "ResourceType": "Microsoft.HorizonDb/clusters/pools/firewallRules", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, "Path": "samples/clusters/pools/firewallrules/create.bicep", - "Description": "Create a firewall rule on a cluster." + "Description": "Create or replace a firewall rule on a HorizonDB pool." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations/identityAssignments", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapturedestinations/identityassignments/create.bicep", + "Description": "Create a change data capture identity assignment for a UAMI attached to the parent cluster." }, { - "ResourceType": "Microsoft.HorizonDB/clusters/pools/replicas", - "Path": "samples/clusters/pools/replicas/add-no-specific-availability-zone.bicep", - "Description": "Add a replica without a specific availability zone to a pool." + "ResourceType": "Microsoft.HorizonDb/clusters/logCaptureConfigurations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/logcaptureconfigurations/disable.bicep", + "Description": "Disable PostgreSQL server log capture." }, { - "ResourceType": "Microsoft.HorizonDB/clusters/pools/replicas", - "Path": "samples/clusters/pools/replicas/add-specific-availability-zone.bicep", - "Description": "Add a replica in a specific availability zone to a pool." + "ResourceType": "Microsoft.HorizonDb/clusters/microsoftEntraAdministrators", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/microsoftentraadministrators/create.bicep", + "Description": "Create or replace a Microsoft Entra administrator for a HorizonDB cluster." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/authentications", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/authentications/create-microsoft-entra-disabled.bicep", + "Description": "Disable Microsoft Entra authentication declaratively." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/authentications", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/authentications/create-microsoft-entra-enabled.bicep", + "Description": "Enable Microsoft Entra authentication declaratively." + }, + { + "ResourceType": "Microsoft.HorizonDb/parameterGroups", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/parametergroups/create.bicep", + "Description": "Create or replace a HorizonDB parameter group for a PostgreSQL version." + }, + { + "ResourceType": "Microsoft.HorizonDb/parameterGroups", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/parametergroups/update.bicep", + "Description": "Update a HorizonDB parameter group." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/authentications", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/authentications/enable-password.bicep", + "Description": "Enable password authentication and set the administrator login and password during initial setup." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/create.bicep", + "Description": "Create a minimum provisioned HorizonDB pool." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/update-compute.bicep", + "Description": "Update a single HorizonDB pool compute property." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/update-high-availability.bicep", + "Description": "Require zone-redundant placement for a HorizonDB pool." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/use-default-parameter-group.bicep", + "Description": "Switch a HorizonDB pool back to its corresponding default parameter group." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/use-parameter-group-immediately.bicep", + "Description": "Associate a HorizonDB pool with a parameter group immediately." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/use-parameter-group-after-reboot.bicep", + "Description": "Associate a HorizonDB pool with a parameter group pending reboot." } ], "ArmTemplateSamples": [ { - "ResourceType": "Microsoft.HorizonDB/clusters", + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCapture", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapture/enable.json", + "Description": "Enable the cluster change data capture capability." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCapture", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapture/update.json", + "Description": "Update the cluster change data capture capability." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureConfigurations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacaptureconfigurations/enroll-database.json", + "Description": "Enroll a database for Microsoft Fabric Mirroring." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureConfigurations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacaptureconfigurations/disable.json", + "Description": "Disable a Microsoft Fabric Mirroring configuration." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapturedestinations/create-fabric.json", + "Description": "Create a Microsoft Fabric change data capture destination." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapturedestinations/disable.json", + "Description": "Disable a Microsoft Fabric change data capture destination." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, "Path": "samples/clusters/create.json", - "Description": "Create a cluster." + "Description": "Create or replace a HorizonDB cluster." }, { - "ResourceType": "Microsoft.HorizonDB/clusters", - "Path": "samples/clusters/update-administrator-login-password.json", - "Description": "Update a cluster's administrator login password." + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/restore-cross-region.json", + "Description": "Restore a HorizonDB cluster across Azure regions from the latest available backup." }, { - "ResourceType": "Microsoft.HorizonDB/clusters", - "Path": "samples/clusters/scale-cluster-vertically.json", - "Description": "Scale a cluster vertically." + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/create-minimum-defaults.json", + "Description": "Create a PostgreSQL 18 HorizonDB cluster with minimum configuration and service defaults." }, { - "ResourceType": "Microsoft.HorizonDB/clusters", - "Path": "samples/clusters/connect-parameter-group-to-cluster.json", - "Description": "Connect a parameter group to a cluster." + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/restore-point-in-time.json", + "Description": "Restore a HorizonDB cluster to a point in time." }, { - "ResourceType": "Microsoft.HorizonDB/parameterGroups", - "Path": "samples/parametergroups/create.json", - "Description": "Create a parameter group." + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/create-with-data-encryption.json", + "Description": "Create a HorizonDB cluster with customer-managed key data encryption." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/update.json", + "Description": "Update a HorizonDB cluster." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/rotate-data-encryption-key.json", + "Description": "Rotate the customer-managed key used by a HorizonDB cluster." }, { - "ResourceType": "Microsoft.HorizonDB/clusters/pools/firewallRules", + "ResourceType": "Microsoft.HorizonDb/clusters/pools/firewallRules", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, "Path": "samples/clusters/pools/firewallrules/create.json", - "Description": "Create a firewall rule on a cluster." + "Description": "Create or replace a firewall rule on a HorizonDB pool." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations/identityAssignments", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/changedatacapturedestinations/identityassignments/create.json", + "Description": "Create a change data capture identity assignment for a UAMI attached to the parent cluster." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/logCaptureConfigurations", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/logcaptureconfigurations/disable.json", + "Description": "Disable PostgreSQL server log capture." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/microsoftEntraAdministrators", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/microsoftentraadministrators/create.json", + "Description": "Create or replace a Microsoft Entra administrator for a HorizonDB cluster." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/authentications", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/authentications/create-microsoft-entra-disabled.json", + "Description": "Disable Microsoft Entra authentication declaratively." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/authentications", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/authentications/create-microsoft-entra-enabled.json", + "Description": "Enable Microsoft Entra authentication declaratively." + }, + { + "ResourceType": "Microsoft.HorizonDb/parameterGroups", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/parametergroups/create.json", + "Description": "Create or replace a HorizonDB parameter group for a PostgreSQL version." + }, + { + "ResourceType": "Microsoft.HorizonDb/parameterGroups", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/parametergroups/update.json", + "Description": "Update a HorizonDB parameter group." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/authentications", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/authentications/enable-password.json", + "Description": "Enable password authentication and set the administrator login and password during initial setup." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/create.json", + "Description": "Create a minimum provisioned HorizonDB pool." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/update-compute.json", + "Description": "Update a single HorizonDB pool compute property." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/update-high-availability.json", + "Description": "Require zone-redundant placement for a HorizonDB pool." + }, + { + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/use-default-parameter-group.json", + "Description": "Switch a HorizonDB pool back to its corresponding default parameter group." }, { - "ResourceType": "Microsoft.HorizonDB/clusters/pools/replicas", - "Path": "samples/clusters/pools/replicas/add-no-specific-availability-zone.json", - "Description": "Add a replica without a specific availability zone to a pool." + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/use-parameter-group-immediately.json", + "Description": "Associate a HorizonDB pool with a parameter group immediately." }, { - "ResourceType": "Microsoft.HorizonDB/clusters/pools/replicas", - "Path": "samples/clusters/pools/replicas/add-specific-availability-zone.json", - "Description": "Add a replica in a specific availability zone to a pool." + "ResourceType": "Microsoft.HorizonDb/clusters/pools", + "ApiVersion": { + "Minimum": "2026-10-01-preview" + }, + "Path": "samples/clusters/pools/use-parameter-group-after-reboot.json", + "Description": "Associate a HorizonDB pool with a parameter group pending reboot." } ] -} \ No newline at end of file +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-disabled.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-disabled.bicep new file mode 100644 index 00000000..28abba5e --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-disabled.bicep @@ -0,0 +1,9 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/authentications@2026-10-01-preview' = { + name: '${clusterName}/microsoftEntra' + properties: { + state: 'Disabled' + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-disabled.json b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-disabled.json new file mode 100644 index 00000000..fc542beb --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-disabled.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/authentications", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), 'microsoftEntra')]", + "properties": { + "state": "Disabled" + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-disabled.tf b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-disabled.tf new file mode 100644 index 00000000..014a274b --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-disabled.tf @@ -0,0 +1,35 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "authentications" { + type = "Microsoft.HorizonDb/clusters/authentications@2026-10-01-preview" + name = "microsoftEntra" + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + state = "Disabled" + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-enabled.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-enabled.bicep new file mode 100644 index 00000000..9a119750 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-enabled.bicep @@ -0,0 +1,9 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/authentications@2026-10-01-preview' = { + name: '${clusterName}/microsoftEntra' + properties: { + state: 'Enabled' + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-enabled.json b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-enabled.json new file mode 100644 index 00000000..b27f4675 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-enabled.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/authentications", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), 'microsoftEntra')]", + "properties": { + "state": "Enabled" + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-enabled.tf b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-enabled.tf new file mode 100644 index 00000000..344b6cc5 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/create-microsoft-entra-enabled.tf @@ -0,0 +1,35 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "authentications" { + type = "Microsoft.HorizonDb/clusters/authentications@2026-10-01-preview" + name = "microsoftEntra" + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + state = "Enabled" + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/authentications/enable-password.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/enable-password.bicep new file mode 100644 index 00000000..174a9121 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/enable-password.bicep @@ -0,0 +1,14 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@secure() +@description('The administrator login password') +param administratorLoginPassword string + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/authentications@2026-10-01-preview' = { + name: '${clusterName}/passwordMethod' + properties: { + state: 'Enabled' + administratorLogin: 'adminlogin1' + administratorLoginPassword: administratorLoginPassword + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/authentications/enable-password.json b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/enable-password.json new file mode 100644 index 00000000..a46206fa --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/enable-password.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + }, + "administratorLoginPassword": { + "type": "secureString", + "metadata": { + "description": "The administrator login password" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/authentications", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), 'passwordMethod')]", + "properties": { + "state": "Enabled", + "administratorLogin": "adminlogin1", + "administratorLoginPassword": "[parameters('administratorLoginPassword')]" + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/update-administrator-login-password.tf b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/enable-password.tf similarity index 52% rename from settings/remarks/microsoft.horizondb/samples/clusters/update-administrator-login-password.tf rename to settings/remarks/microsoft.horizondb/samples/clusters/authentications/enable-password.tf index 4ee973be..ce6c6db6 100644 --- a/settings/remarks/microsoft.horizondb/samples/clusters/update-administrator-login-password.tf +++ b/settings/remarks/microsoft.horizondb/samples/clusters/authentications/enable-password.tf @@ -10,38 +10,30 @@ provider "azapi" { skip_provider_registration = false } -variable "location" { - type = string - default = "eastus" - description = "The location for the cluster" -} - variable "cluster_name" { type = string - description = "The name for the cluster" -} - -variable "create_mode" { - type = string - default = "Update" - description = "The create mode for cluster" + default = "example-cluster" + description = "The name of the HorizonDB cluster" } variable "administrator_login_password" { type = string - description = "The administrator login password for cluster" + description = "The administrator login password" sensitive = true } -resource "azapi_resource" "cluster" { - type = "Microsoft.HorizonDB/clusters@2026-01-20-preview" - name = var.cluster_name - location = var.location - parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}" +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "authentications" { + type = "Microsoft.HorizonDb/clusters/authentications@2026-10-01-preview" + name = "passwordMethod" + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" body = { properties = { - createMode = var.create_mode + state = "Enabled" + administratorLogin = "adminlogin1" administratorLoginPassword = var.administrator_login_password } } @@ -49,6 +41,3 @@ resource "azapi_resource" "cluster" { schema_validation_enabled = false response_export_values = ["*"] } - -data "azapi_client_config" "current" { -} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/enable.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/enable.bicep new file mode 100644 index 00000000..5737065c --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/enable.bicep @@ -0,0 +1,10 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/changeDataCapture@2026-10-01-preview' = { + name: '${clusterName}/default' + properties: { + desiredState: 'Enabled' + autoUpgradeExtension: true + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/enable.json b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/enable.json new file mode 100644 index 00000000..4b6e2074 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/enable.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/changeDataCapture", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), 'default')]", + "properties": { + "desiredState": "Enabled", + "autoUpgradeExtension": true + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/enable.tf b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/enable.tf new file mode 100644 index 00000000..9be899f4 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/enable.tf @@ -0,0 +1,36 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "change_data_capture" { + type = "Microsoft.HorizonDb/clusters/changeDataCapture@2026-10-01-preview" + name = "default" + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + desiredState = "Enabled" + autoUpgradeExtension = true + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/update.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/update.bicep new file mode 100644 index 00000000..18cac0d6 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/update.bicep @@ -0,0 +1,9 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/changeDataCapture@2026-10-01-preview' = { + name: '${clusterName}/default' + properties: { + autoUpgradeExtension: false + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/update.json b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/update.json new file mode 100644 index 00000000..821545f1 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/update.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/changeDataCapture", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), 'default')]", + "properties": { + "autoUpgradeExtension": false + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/update.tf b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/update.tf new file mode 100644 index 00000000..3f092d37 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapture/update.tf @@ -0,0 +1,35 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_update_resource" "change_data_capture" { + type = "Microsoft.HorizonDb/clusters/changeDataCapture@2026-10-01-preview" + name = "default" + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + autoUpgradeExtension = false + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/disable.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/disable.bicep new file mode 100644 index 00000000..b3fbdaee --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/disable.bicep @@ -0,0 +1,11 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@description('The name of the change data capture configuration') +param configurationName string = 'sales-database' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/changeDataCaptureConfigurations@2026-10-01-preview' = { + name: '${clusterName}/${configurationName}' + properties: { + desiredState: 'Disabled' + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/disable.json b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/disable.json new file mode 100644 index 00000000..62cdacb2 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/disable.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + }, + "configurationName": { + "type": "string", + "defaultValue": "sales-database", + "metadata": { + "description": "The name of the change data capture configuration" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/changeDataCaptureConfigurations", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), parameters('configurationName'))]", + "properties": { + "desiredState": "Disabled" + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/disable.tf b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/disable.tf new file mode 100644 index 00000000..78ac23d1 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/disable.tf @@ -0,0 +1,41 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +variable "configuration_name" { + type = string + default = "sales-database" + description = "The name of the change data capture configuration" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_update_resource" "change_data_capture_configurations" { + type = "Microsoft.HorizonDb/clusters/changeDataCaptureConfigurations@2026-10-01-preview" + name = var.configuration_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + desiredState = "Disabled" + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/enroll-database.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/enroll-database.bicep new file mode 100644 index 00000000..d99d2951 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/enroll-database.bicep @@ -0,0 +1,14 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@description('The name of the change data capture configuration') +param configurationName string = 'sales-database' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/changeDataCaptureConfigurations@2026-10-01-preview' = { + name: '${clusterName}/${configurationName}' + properties: { + databaseName: 'sales' + usageProfile: 'Mirroring' + destinationResourceId: '/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/clusters/example-cluster/changeDataCaptureDestinations/fabric-mirroring' + desiredState: 'Enabled' + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/enroll-database.json b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/enroll-database.json new file mode 100644 index 00000000..e48ac361 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/enroll-database.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + }, + "configurationName": { + "type": "string", + "defaultValue": "sales-database", + "metadata": { + "description": "The name of the change data capture configuration" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/changeDataCaptureConfigurations", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), parameters('configurationName'))]", + "properties": { + "databaseName": "sales", + "usageProfile": "Mirroring", + "destinationResourceId": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/clusters/example-cluster/changeDataCaptureDestinations/fabric-mirroring", + "desiredState": "Enabled" + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/enroll-database.tf b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/enroll-database.tf new file mode 100644 index 00000000..f52fa1e0 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacaptureconfigurations/enroll-database.tf @@ -0,0 +1,44 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +variable "configuration_name" { + type = string + default = "sales-database" + description = "The name of the change data capture configuration" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "change_data_capture_configurations" { + type = "Microsoft.HorizonDb/clusters/changeDataCaptureConfigurations@2026-10-01-preview" + name = var.configuration_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + databaseName = "sales" + usageProfile = "Mirroring" + destinationResourceId = "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/clusters/example-cluster/changeDataCaptureDestinations/fabric-mirroring" + desiredState = "Enabled" + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/create-fabric.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/create-fabric.bicep new file mode 100644 index 00000000..d7585e32 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/create-fabric.bicep @@ -0,0 +1,16 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@description('The name of the change data capture destination') +param destinationName string = 'fabric-mirroring' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/changeDataCaptureDestinations@2026-10-01-preview' = { + name: '${clusterName}/${destinationName}' + properties: { + destination: { + destinationType: 'Fabric' + protocol: 'Native' + workspaceId: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee' + } + desiredState: 'Enabled' + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/create-fabric.json b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/create-fabric.json new file mode 100644 index 00000000..4165da74 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/create-fabric.json @@ -0,0 +1,35 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + }, + "destinationName": { + "type": "string", + "defaultValue": "fabric-mirroring", + "metadata": { + "description": "The name of the change data capture destination" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), parameters('destinationName'))]", + "properties": { + "destination": { + "destinationType": "Fabric", + "protocol": "Native", + "workspaceId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" + }, + "desiredState": "Enabled" + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/create-fabric.tf b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/create-fabric.tf new file mode 100644 index 00000000..501d9794 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/create-fabric.tf @@ -0,0 +1,46 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +variable "destination_name" { + type = string + default = "fabric-mirroring" + description = "The name of the change data capture destination" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "change_data_capture_destinations" { + type = "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations@2026-10-01-preview" + name = var.destination_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + destination = { + destinationType = "Fabric" + protocol = "Native" + workspaceId = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" + } + desiredState = "Enabled" + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/disable.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/disable.bicep new file mode 100644 index 00000000..060181e9 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/disable.bicep @@ -0,0 +1,11 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@description('The name of the change data capture destination') +param destinationName string = 'fabric-mirroring' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/changeDataCaptureDestinations@2026-10-01-preview' = { + name: '${clusterName}/${destinationName}' + properties: { + desiredState: 'Disabled' + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/disable.json b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/disable.json new file mode 100644 index 00000000..29cea84f --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/disable.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + }, + "destinationName": { + "type": "string", + "defaultValue": "fabric-mirroring", + "metadata": { + "description": "The name of the change data capture destination" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), parameters('destinationName'))]", + "properties": { + "desiredState": "Disabled" + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/disable.tf b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/disable.tf new file mode 100644 index 00000000..26112b35 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/disable.tf @@ -0,0 +1,41 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +variable "destination_name" { + type = string + default = "fabric-mirroring" + description = "The name of the change data capture destination" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_update_resource" "change_data_capture_destinations" { + type = "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations@2026-10-01-preview" + name = var.destination_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + desiredState = "Disabled" + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/identityassignments/create.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/identityassignments/create.bicep new file mode 100644 index 00000000..e94993a9 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/identityassignments/create.bicep @@ -0,0 +1,13 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@description('The name of the change data capture destination') +param destinationName string = 'fabric-mirroring' +@description('The name of the identity assignment') +param assignmentName string = 'fabric-writer' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/changeDataCaptureDestinations/identityAssignments@2026-10-01-preview' = { + name: '${clusterName}/${destinationName}/${assignmentName}' + properties: { + identityResourceId: '/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/identity-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/fabric-writer' + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/identityassignments/create.json b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/identityassignments/create.json new file mode 100644 index 00000000..21777a03 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/identityassignments/create.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + }, + "destinationName": { + "type": "string", + "defaultValue": "fabric-mirroring", + "metadata": { + "description": "The name of the change data capture destination" + } + }, + "assignmentName": { + "type": "string", + "defaultValue": "fabric-writer", + "metadata": { + "description": "The name of the identity assignment" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations/identityAssignments", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}/{2}', parameters('clusterName'), parameters('destinationName'), parameters('assignmentName'))]", + "properties": { + "identityResourceId": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/identity-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/fabric-writer" + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/identityassignments/create.tf b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/identityassignments/create.tf new file mode 100644 index 00000000..9bceffc2 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/changedatacapturedestinations/identityassignments/create.tf @@ -0,0 +1,47 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +variable "destination_name" { + type = string + default = "fabric-mirroring" + description = "The name of the change data capture destination" +} + +variable "assignment_name" { + type = string + default = "fabric-writer" + description = "The name of the identity assignment" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "identity_assignments" { + type = "Microsoft.HorizonDb/clusters/changeDataCaptureDestinations/identityAssignments@2026-10-01-preview" + name = var.assignment_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}/changeDataCaptureDestinations/${var.destination_name}" + + body = { + properties = { + identityResourceId = "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/identity-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/fabric-writer" + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/connect-parameter-group-to-cluster.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/connect-parameter-group-to-cluster.bicep deleted file mode 100644 index 825bf38d..00000000 --- a/settings/remarks/microsoft.horizondb/samples/clusters/connect-parameter-group-to-cluster.bicep +++ /dev/null @@ -1,18 +0,0 @@ -@description('The location for the cluster') -param location string = 'eastus' -@description('The name for the cluster') -param clusterName string -@description('The create mode for cluster') -param createMode string = 'Update' -@description('The identifier of the parameter group to connect to the cluster') -param parameterGroupId string -resource flexibleServer 'Microsoft.HorizonDB/clusters@2026-01-20-preview' = { - name: clusterName - location: location - properties: { - createMode: createMode - parameterGroup: { - id: parameterGroupId - } - } -} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/connect-parameter-group-to-cluster.json b/settings/remarks/microsoft.horizondb/samples/clusters/connect-parameter-group-to-cluster.json deleted file mode 100644 index 837e0ed0..00000000 --- a/settings/remarks/microsoft.horizondb/samples/clusters/connect-parameter-group-to-cluster.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "location": { - "type": "string", - "defaultValue": "eastus", - "metadata": { - "description": "The location for the cluster" - } - }, - "clusterName": { - "type": "string", - "metadata": { - "description": "The name for the cluster" - } - }, - "createMode": { - "type": "string", - "defaultValue": "Update", - "metadata": { - "description": "The create mode for cluster" - } - }, - "parameterGroupId": { - "type": "string", - "metadata": { - "description": "The identifier of the parameter group to connect to the cluster" - } - } - }, - "resources": [ - { - "type": "Microsoft.HorizonDB/clusters", - "apiVersion": "2026-01-20-preview", - "name": "[parameters('clusterName')]", - "location": "[parameters('location')]", - "properties": { - "createMode": "[parameters('createMode')]", - "parameterGroup": { - "id": "[parameters('parameterGroupId')]" - } - } - } - ] -} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/connect-parameter-group-to-cluster.tf b/settings/remarks/microsoft.horizondb/samples/clusters/connect-parameter-group-to-cluster.tf deleted file mode 100644 index 6769c9c3..00000000 --- a/settings/remarks/microsoft.horizondb/samples/clusters/connect-parameter-group-to-cluster.tf +++ /dev/null @@ -1,55 +0,0 @@ -terraform { - required_providers { - azapi = { - source = "Azure/azapi" - } - } -} - -provider "azapi" { - skip_provider_registration = false -} - -variable "location" { - type = string - default = "eastus" - description = "The location for the cluster" -} - -variable "cluster_name" { - type = string - description = "The name for the cluster" -} - -variable "create_mode" { - type = string - default = "Update" - description = "The create mode for cluster" -} - -variable "parameter_group_id" { - type = string - description = "The identifier of the parameter group to connect to the cluster" -} - -resource "azapi_resource" "cluster" { - type = "Microsoft.HorizonDB/clusters@2026-01-20-preview" - name = var.cluster_name - location = var.location - parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}" - - body = { - properties = { - createMode = var.create_mode - parameterGroup = { - id = var.parameter_group_id - } - } - } - - schema_validation_enabled = false - response_export_values = ["*"] -} - -data "azapi_client_config" "current" { -} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/create-minimum-defaults.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/create-minimum-defaults.bicep new file mode 100644 index 00000000..b513058c --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/create-minimum-defaults.bicep @@ -0,0 +1,13 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'minimum-defaults' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters@2026-10-01-preview' = { + name: clusterName + location: 'eastus2' + properties: { + postgreSqlVersion: '18' + backup: { + geoRedundancy: 'Disabled' + } + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/create-minimum-defaults.json b/settings/remarks/microsoft.horizondb/samples/clusters/create-minimum-defaults.json new file mode 100644 index 00000000..3eb14db5 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/create-minimum-defaults.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "minimum-defaults", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters", + "apiVersion": "2026-10-01-preview", + "name": "[parameters('clusterName')]", + "location": "eastus2", + "properties": { + "postgreSqlVersion": "18", + "backup": { + "geoRedundancy": "Disabled" + } + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/create-minimum-defaults.tf b/settings/remarks/microsoft.horizondb/samples/clusters/create-minimum-defaults.tf new file mode 100644 index 00000000..c8e0f1f7 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/create-minimum-defaults.tf @@ -0,0 +1,39 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "minimum-defaults" + description = "The name of the HorizonDB cluster" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "clusters" { + type = "Microsoft.HorizonDb/clusters@2026-10-01-preview" + name = var.cluster_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb" + location = "eastus2" + + body = { + properties = { + postgreSqlVersion = "18" + backup = { + geoRedundancy = "Disabled" + } + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/create-with-data-encryption.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/create-with-data-encryption.bicep new file mode 100644 index 00000000..db4494c2 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/create-with-data-encryption.bicep @@ -0,0 +1,26 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters@2026-10-01-preview' = { + name: clusterName + location: 'eastus2' + identity: { + type: 'UserAssigned' + userAssignedIdentities: { + '/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/identity-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/primary-encryption-identity': { + } + } + } + properties: { + postgreSqlVersion: '17' + backup: { + geoRedundancy: 'Disabled' + retentionDays: 14 + } + dataEncryption: { + type: 'AzureKeyVault' + primaryKeyUri: 'https://primary-key-vault.vault.azure.net/keys/horizondb-primary-key' + primaryUserAssignedIdentityId: '/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/identity-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/primary-encryption-identity' + } + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/create-with-data-encryption.json b/settings/remarks/microsoft.horizondb/samples/clusters/create-with-data-encryption.json new file mode 100644 index 00000000..c637e908 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/create-with-data-encryption.json @@ -0,0 +1,39 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters", + "apiVersion": "2026-10-01-preview", + "name": "[parameters('clusterName')]", + "location": "eastus2", + "identity": { + "type": "UserAssigned", + "userAssignedIdentities": { + "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/identity-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/primary-encryption-identity": {} + } + }, + "properties": { + "postgreSqlVersion": "17", + "backup": { + "geoRedundancy": "Disabled", + "retentionDays": 14 + }, + "dataEncryption": { + "type": "AzureKeyVault", + "primaryKeyUri": "https://primary-key-vault.vault.azure.net/keys/horizondb-primary-key", + "primaryUserAssignedIdentityId": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/identity-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/primary-encryption-identity" + } + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/create-with-data-encryption.tf b/settings/remarks/microsoft.horizondb/samples/clusters/create-with-data-encryption.tf new file mode 100644 index 00000000..fbc47b75 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/create-with-data-encryption.tf @@ -0,0 +1,52 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "clusters" { + type = "Microsoft.HorizonDb/clusters@2026-10-01-preview" + name = var.cluster_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb" + location = "eastus2" + + body = { + identity = { + type = "UserAssigned" + userAssignedIdentities = { + "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/identity-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/primary-encryption-identity" = { + } + } + } + properties = { + postgreSqlVersion = "17" + backup = { + geoRedundancy = "Disabled" + retentionDays = 14 + } + dataEncryption = { + type = "AzureKeyVault" + primaryKeyUri = "https://primary-key-vault.vault.azure.net/keys/horizondb-primary-key" + primaryUserAssignedIdentityId = "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/identity-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/primary-encryption-identity" + } + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/create.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/create.bicep index 64c30bfb..86b80f79 100644 --- a/settings/remarks/microsoft.horizondb/samples/clusters/create.bicep +++ b/settings/remarks/microsoft.horizondb/samples/clusters/create.bicep @@ -1,37 +1,27 @@ -@description('The location for the cluster') -param location string = 'eastus' -@description('The name for the cluster') -param clusterName string -@description('The tags for the cluster') -param tags object = { - env: 'dev' -} -@description('The create mode for cluster') -param createMode string = 'Create' -@description('The major version of server') -param version int = 17 -@description('The administrator login name for cluster') -param administratorLogin string -@secure() -@description('The administrator login password for cluster') -param administratorLoginPassword string -@description('The number of vCores for each replica of the cluster') -param vCores int = 4 -@description('The number of replicas for the cluster, including the primary replica, which is the only one in which writes are allowed. The other replicas are read-only.') -param replicaCount int = 2 -@description('The name of the SKU for cluster') -param zonePlacementPolicy string = 'BestEffort' -resource flexibleServer 'Microsoft.HorizonDB/clusters@2026-01-20-preview' = { +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters@2026-10-01-preview' = { name: clusterName - location: location - tags: tags + location: 'eastus2' + tags: { + environment: 'production' + } + identity: { + type: 'UserAssigned' + userAssignedIdentities: { + '/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/identity-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/fabric-writer': { + } + } + } properties: { - createMode: createMode - version: version - administratorLogin: administratorLogin - administratorLoginPassword: administratorLoginPassword - vCores: vCores - replicaCount: replicaCount - zonePlacementPolicy: zonePlacementPolicy + postgreSqlVersion: '17' + network: { + publicAccess: 'Enabled' + } + backup: { + geoRedundancy: 'Enabled' + retentionDays: 14 + } } } diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/create.json b/settings/remarks/microsoft.horizondb/samples/clusters/create.json index 64d266e8..3de6ae8b 100644 --- a/settings/remarks/microsoft.horizondb/samples/clusters/create.json +++ b/settings/remarks/microsoft.horizondb/samples/clusters/create.json @@ -2,91 +2,38 @@ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { - "location": { - "type": "string", - "defaultValue": "eastus", - "metadata": { - "description": "The location for the cluster" - } - }, "clusterName": { "type": "string", + "defaultValue": "example-cluster", "metadata": { - "description": "The name for the cluster" - } - }, - "tags": { - "type": "object", - "defaultValue": { - "env": "dev" - }, - "metadata": { - "description": "The tags for the cluster" - } - }, - "createMode": { - "type": "string", - "defaultValue": "Create", - "metadata": { - "description": "The create mode for cluster" - } - }, - "version": { - "type": "int", - "defaultValue": 17, - "metadata": { - "description": "The major version of server" - } - }, - "administratorLogin": { - "type": "string", - "metadata": { - "description": "The administrator login name for cluster" - } - }, - "administratorLoginPassword": { - "type": "secureString", - "metadata": { - "description": "The administrator login password for cluster" - } - }, - "vCores": { - "type": "int", - "defaultValue": 4, - "metadata": { - "description": "The number of vCores for each replica of the cluster" - } - }, - "replicaCount": { - "type": "int", - "defaultValue": 2, - "metadata": { - "description": "The number of replicas for the cluster, including the primary replica, which is the only one in which writes are allowed. The other replicas are read-only." - } - }, - "zonePlacementPolicy": { - "type": "string", - "defaultValue": "BestEffort", - "metadata": { - "description": "The name of the SKU for cluster" + "description": "The name of the HorizonDB cluster" } } }, "resources": [ { - "type": "Microsoft.HorizonDB/clusters", - "apiVersion": "2026-01-20-preview", + "type": "Microsoft.HorizonDb/clusters", + "apiVersion": "2026-10-01-preview", "name": "[parameters('clusterName')]", - "location": "[parameters('location')]", - "tags": "[parameters('tags')]", + "location": "eastus2", + "tags": { + "environment": "production" + }, + "identity": { + "type": "UserAssigned", + "userAssignedIdentities": { + "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/identity-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/fabric-writer": {} + } + }, "properties": { - "createMode": "[parameters('createMode')]", - "version": "[parameters('version')]", - "administratorLogin": "[parameters('administratorLogin')]", - "administratorLoginPassword": "[parameters('administratorLoginPassword')]", - "vCores": "[parameters('vCores')]", - "replicaCount": "[parameters('replicaCount')]", - "zonePlacementPolicy": "[parameters('zonePlacementPolicy')]" + "postgreSqlVersion": "17", + "network": { + "publicAccess": "Enabled" + }, + "backup": { + "geoRedundancy": "Enabled", + "retentionDays": 14 + } } } ] diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/create.tf b/settings/remarks/microsoft.horizondb/samples/clusters/create.tf index 7c37fc5d..0a37f8da 100644 --- a/settings/remarks/microsoft.horizondb/samples/clusters/create.tf +++ b/settings/remarks/microsoft.horizondb/samples/clusters/create.tf @@ -12,88 +12,42 @@ provider "azapi" { variable "cluster_name" { type = string - description = "The name for the cluster" + default = "example-cluster" + description = "The name of the HorizonDB cluster" } -variable "location" { - type = string - default = "eastus" - description = "The location for the cluster" -} - -variable "administrator_login" { - type = string - description = "The administrator login name for cluster" -} - -variable "administrator_login_password" { - type = string - description = "The administrator login password for cluster" - sensitive = true -} - -variable "create_mode" { - type = string - default = "Create" - description = "The create mode for cluster" -} - -variable "version" { - type = number - default = 17 - description = "The major version of server" -} - -variable "v_cores" { - type = number - default = 4 - description = "The number of vCores for each replica of the cluster" -} - -variable "replica_count" { - type = number - default = 2 - description = "The number of replicas for the cluster, including the primary replica, which is the only one in which writes are allowed. The other replicas are read-only." -} - -variable "zone_placement_policy" { - type = string - default = "BestEffort" - description = "The name of the SKU for cluster" -} - -variable "tags" { - type = object({ - env = optional(string) - }) - default = { - env = "dev" - } - description = "The tags for the cluster" +data "azapi_client_config" "current" { } -resource "azapi_resource" "cluster" { - type = "Microsoft.HorizonDB/clusters@2026-01-20-preview" +resource "azapi_resource" "clusters" { + type = "Microsoft.HorizonDb/clusters@2026-10-01-preview" name = var.cluster_name - location = var.location - parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}" + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb" + location = "eastus2" body = { - tags = var.tags + tags = { + environment = "production" + } + identity = { + type = "UserAssigned" + userAssignedIdentities = { + "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/identity-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/fabric-writer" = { + } + } + } properties = { - createMode = var.create_mode - version = var.version - administratorLogin = var.administrator_login - administratorLoginPassword = var.administrator_login_password - vCores = var.v_cores - replicaCount = var.replica_count - zonePlacementPolicy = var.zone_placement_policy + postgreSqlVersion = "17" + network = { + publicAccess = "Enabled" + } + backup = { + geoRedundancy = "Enabled" + retentionDays = 14 + } } } schema_validation_enabled = false response_export_values = ["*"] } - -data "azapi_client_config" "current" { -} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/logcaptureconfigurations/disable.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/logcaptureconfigurations/disable.bicep new file mode 100644 index 00000000..933cce4e --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/logcaptureconfigurations/disable.bicep @@ -0,0 +1,11 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@description('The name of the log capture configuration') +param logCaptureConfigurationName string = 'PostgreSqlServer' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/logCaptureConfigurations@2026-10-01-preview' = { + name: '${clusterName}/${logCaptureConfigurationName}' + properties: { + state: 'Disabled' + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/logcaptureconfigurations/disable.json b/settings/remarks/microsoft.horizondb/samples/clusters/logcaptureconfigurations/disable.json new file mode 100644 index 00000000..440a465b --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/logcaptureconfigurations/disable.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + }, + "logCaptureConfigurationName": { + "type": "string", + "defaultValue": "PostgreSqlServer", + "metadata": { + "description": "The name of the log capture configuration" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/logCaptureConfigurations", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), parameters('logCaptureConfigurationName'))]", + "properties": { + "state": "Disabled" + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/logcaptureconfigurations/disable.tf b/settings/remarks/microsoft.horizondb/samples/clusters/logcaptureconfigurations/disable.tf new file mode 100644 index 00000000..2b459b4a --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/logcaptureconfigurations/disable.tf @@ -0,0 +1,41 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +variable "log_capture_configuration_name" { + type = string + default = "PostgreSqlServer" + description = "The name of the log capture configuration" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_update_resource" "log_capture_configurations" { + type = "Microsoft.HorizonDb/clusters/logCaptureConfigurations@2026-10-01-preview" + name = var.log_capture_configuration_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + state = "Disabled" + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/microsoftentraadministrators/create.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/microsoftentraadministrators/create.bicep new file mode 100644 index 00000000..2207bf93 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/microsoftentraadministrators/create.bicep @@ -0,0 +1,13 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@description('The object ID of the Microsoft Entra administrator') +param objectId string = '11111111-1111-1111-1111-111111111111' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/microsoftEntraAdministrators@2026-10-01-preview' = { + name: '${clusterName}/${objectId}' + properties: { + principalName: 'database.administrators@contoso.com' + principalType: 'Group' + tenantId: '22222222-2222-2222-2222-222222222222' + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/microsoftentraadministrators/create.json b/settings/remarks/microsoft.horizondb/samples/clusters/microsoftentraadministrators/create.json new file mode 100644 index 00000000..a2d426e5 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/microsoftentraadministrators/create.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + }, + "objectId": { + "type": "string", + "defaultValue": "11111111-1111-1111-1111-111111111111", + "metadata": { + "description": "The object ID of the Microsoft Entra administrator" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/microsoftEntraAdministrators", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), parameters('objectId'))]", + "properties": { + "principalName": "database.administrators@contoso.com", + "principalType": "Group", + "tenantId": "22222222-2222-2222-2222-222222222222" + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/microsoftentraadministrators/create.tf b/settings/remarks/microsoft.horizondb/samples/clusters/microsoftentraadministrators/create.tf new file mode 100644 index 00000000..694d3f06 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/microsoftentraadministrators/create.tf @@ -0,0 +1,43 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +variable "object_id" { + type = string + default = "11111111-1111-1111-1111-111111111111" + description = "The object ID of the Microsoft Entra administrator" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "microsoft_entra_administrators" { + type = "Microsoft.HorizonDb/clusters/microsoftEntraAdministrators@2026-10-01-preview" + name = var.object_id + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + principalName = "database.administrators@contoso.com" + principalType = "Group" + tenantId = "22222222-2222-2222-2222-222222222222" + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/create.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/pools/create.bicep new file mode 100644 index 00000000..aa9c0b73 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/create.bicep @@ -0,0 +1,27 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@description('The name of the HorizonDB pool') +param poolName string = 'example-pool-01' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/pools@2026-10-01-preview' = { + name: '${clusterName}/${poolName}' + properties: { + computeModel: { + type: 'Provisioned' + computeProcessor: 'AMD' + computeGeneration: 3 + vCores: 2 + } + parameterGroup: { + parameterGroupResourceId: '/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/providers/Microsoft.HorizonDb/locations/eastus2/parameterGroups/default-postgresql-17-provisioned' + applyMethod: 'Immediate' + } + scheduledMaintenance: { + maintenanceManagementType: 'System' + } + nodeCount: 1 + highAvailability: { + mode: 'Disabled' + } + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/create.json b/settings/remarks/microsoft.horizondb/samples/clusters/pools/create.json new file mode 100644 index 00000000..286e8d3a --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/create.json @@ -0,0 +1,46 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + }, + "poolName": { + "type": "string", + "defaultValue": "example-pool-01", + "metadata": { + "description": "The name of the HorizonDB pool" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/pools", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), parameters('poolName'))]", + "properties": { + "computeModel": { + "type": "Provisioned", + "computeProcessor": "AMD", + "computeGeneration": 3, + "vCores": 2 + }, + "parameterGroup": { + "parameterGroupResourceId": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/providers/Microsoft.HorizonDb/locations/eastus2/parameterGroups/default-postgresql-17-provisioned", + "applyMethod": "Immediate" + }, + "scheduledMaintenance": { + "maintenanceManagementType": "System" + }, + "nodeCount": 1, + "highAvailability": { + "mode": "Disabled" + } + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/create.tf b/settings/remarks/microsoft.horizondb/samples/clusters/pools/create.tf new file mode 100644 index 00000000..13619e9f --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/create.tf @@ -0,0 +1,57 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +variable "pool_name" { + type = string + default = "example-pool-01" + description = "The name of the HorizonDB pool" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "pools" { + type = "Microsoft.HorizonDb/clusters/pools@2026-10-01-preview" + name = var.pool_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + computeModel = { + type = "Provisioned" + computeProcessor = "AMD" + computeGeneration = 3 + vCores = 2 + } + parameterGroup = { + parameterGroupResourceId = "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/providers/Microsoft.HorizonDb/locations/eastus2/parameterGroups/default-postgresql-17-provisioned" + applyMethod = "Immediate" + } + scheduledMaintenance = { + maintenanceManagementType = "System" + } + nodeCount = 1 + highAvailability = { + mode = "Disabled" + } + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/firewallrules/create.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/pools/firewallrules/create.bicep index 9cd062c3..5af6ca54 100644 --- a/settings/remarks/microsoft.horizondb/samples/clusters/pools/firewallrules/create.bicep +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/firewallrules/create.bicep @@ -1,35 +1,15 @@ -@description('The name for the cluster') -param clusterName string -@description('The name for the pool') -param poolName string = 'DefaultPool' -@description('The name for the firewall rule') -param firewallRuleName string = 'DataAnalyticsDepartment' -@description('The start IP address for the firewall rule') -param firewallRuleStartIp string = '10.0.0.1' -@description('The end IP address for the firewall rule') -param firewallRuleEndIp string = '10.0.0.10' -@description('The description for the firewall rule') -param firewallRuleDescription string = 'Allow all IP addresses from the Data Analytics department' -@description('The create mode for cluster') -param createMode string = 'Create' -@description('The major version of server') -param version int = 17 -@description('The administrator login name for cluster') -param administratorLogin string -@secure() -@description('The administrator login password for cluster') -param administratorLoginPassword string -@description('The number of vCores for each replica of the cluster') -param vCores int = 4 -@description('The number of replicas for the cluster, including the primary replica, which is the only one in which writes are allowed. The other replicas are read-only.') -param replicaCount int = 2 -@description('The name of the SKU for cluster') -param zonePlacementPolicy string = 'BestEffort' -resource flexibleServer 'Microsoft.HorizonDB/clusters/pools/firewallRules@2026-01-20-preview' = { +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@description('The name of the HorizonDB pool') +param poolName string = 'example-pool-01' +@description('The name of the firewall rule') +param firewallRuleName string = 'example-firewall-rule-01' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/pools/firewallRules@2026-10-01-preview' = { name: '${clusterName}/${poolName}/${firewallRuleName}' properties: { - startIp: firewallRuleStartIp - endIp: firewallRuleEndIp - description: firewallRuleDescription + startIpAddress: '10.0.0.1' + endIpAddress: '10.0.0.254' + description: 'Allow access from the corporate network' } } diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/firewallrules/create.json b/settings/remarks/microsoft.horizondb/samples/clusters/pools/firewallrules/create.json index e58d8226..1659ab57 100644 --- a/settings/remarks/microsoft.horizondb/samples/clusters/pools/firewallrules/create.json +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/firewallrules/create.json @@ -4,102 +4,35 @@ "parameters": { "clusterName": { "type": "string", + "defaultValue": "example-cluster", "metadata": { - "description": "The name for the cluster" + "description": "The name of the HorizonDB cluster" } }, "poolName": { "type": "string", - "defaultValue": "DefaultPool", + "defaultValue": "example-pool-01", "metadata": { - "description": "The name for the pool" + "description": "The name of the HorizonDB pool" } }, "firewallRuleName": { "type": "string", - "defaultValue": "DataAnalyticsDepartment", + "defaultValue": "example-firewall-rule-01", "metadata": { - "description": "The name for the firewall rule" - } - }, - "firewallRuleStartIp": { - "type": "string", - "defaultValue": "10.0.0.1", - "metadata": { - "description": "The start IP address for the firewall rule" - } - }, - "firewallRuleEndIp": { - "type": "string", - "defaultValue": "10.0.0.10", - "metadata": { - "description": "The end IP address for the firewall rule" - } - }, - "firewallRuleDescription": { - "type": "string", - "defaultValue": "Allow all IP addresses from the Data Analytics department", - "metadata": { - "description": "The description for the firewall rule" - } - }, - "createMode": { - "type": "string", - "defaultValue": "Create", - "metadata": { - "description": "The create mode for cluster" - } - }, - "version": { - "type": "int", - "defaultValue": 17, - "metadata": { - "description": "The major version of server" - } - }, - "administratorLogin": { - "type": "string", - "metadata": { - "description": "The administrator login name for cluster" - } - }, - "administratorLoginPassword": { - "type": "secureString", - "metadata": { - "description": "The administrator login password for cluster" - } - }, - "vCores": { - "type": "int", - "defaultValue": 4, - "metadata": { - "description": "The number of vCores for each replica of the cluster" - } - }, - "replicaCount": { - "type": "int", - "defaultValue": 2, - "metadata": { - "description": "The number of replicas for the cluster, including the primary replica, which is the only one in which writes are allowed. The other replicas are read-only." - } - }, - "zonePlacementPolicy": { - "type": "string", - "defaultValue": "BestEffort", - "metadata": { - "description": "The name of the SKU for cluster" + "description": "The name of the firewall rule" } } }, "resources": [ { - "type": "Microsoft.HorizonDB/clusters/pools/firewallRules", - "apiVersion": "2026-01-20-preview", + "type": "Microsoft.HorizonDb/clusters/pools/firewallRules", + "apiVersion": "2026-10-01-preview", "name": "[format('{0}/{1}/{2}', parameters('clusterName'), parameters('poolName'), parameters('firewallRuleName'))]", "properties": { - "startIp": "[parameters('firewallRuleStartIp')]", - "endIp": "[parameters('firewallRuleEndIp')]", - "description": "[parameters('firewallRuleDescription')]" + "startIpAddress": "10.0.0.1", + "endIpAddress": "10.0.0.254", + "description": "Allow access from the corporate network" } } ] diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/firewallrules/create.tf b/settings/remarks/microsoft.horizondb/samples/clusters/pools/firewallrules/create.tf index 7d1e3004..b274bdbe 100644 --- a/settings/remarks/microsoft.horizondb/samples/clusters/pools/firewallrules/create.tf +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/firewallrules/create.tf @@ -12,118 +12,38 @@ provider "azapi" { variable "cluster_name" { type = string - description = "The name for the cluster" + default = "example-cluster" + description = "The name of the HorizonDB cluster" } variable "pool_name" { type = string - default = "DefaultPool" - description = "The name for the pool" + default = "example-pool-01" + description = "The name of the HorizonDB pool" } variable "firewall_rule_name" { type = string - default = "DataAnalyticsDepartment" - description = "The name for the firewall rule" -} - -variable "firewall_rule_start_ip" { - type = string - default = "10.0.0.1" - description = "The start IP address for the firewall rule" -} - -variable "firewall_rule_end_ip" { - type = string - default = "10.0.0.10" - description = "The end IP address for the firewall rule" -} - -variable "firewall_rule_description" { - type = string - default = "Allow all IP addresses from the Data Analytics department" - description = "The description for the firewall rule" -} - -variable "administrator_login" { - type = string - description = "The administrator login name for cluster" -} - -variable "administrator_login_password" { - type = string - description = "The administrator login password for cluster" - sensitive = true -} - -variable "create_mode" { - type = string - default = "Create" - description = "The create mode for cluster" -} - -variable "version" { - type = number - default = 17 - description = "The major version of server" -} - -variable "v_cores" { - type = number - default = 4 - description = "The number of vCores for each replica of the cluster" -} - -variable "replica_count" { - type = number - default = 2 - description = "The number of replicas for the cluster, including the primary replica, which is the only one in which writes are allowed. The other replicas are read-only." -} - -variable "zone_placement_policy" { - type = string - default = "BestEffort" - description = "The name of the SKU for cluster" + default = "example-firewall-rule-01" + description = "The name of the firewall rule" } data "azapi_client_config" "current" { } -resource "azapi_resource" "cluster" { - type = "Microsoft.HorizonDB/clusters@2026-01-20-preview" - name = var.cluster_name - parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}" - - body = { - properties = { - createMode = var.create_mode - version = var.version - administratorLogin = var.administrator_login - administratorLoginPassword = var.administrator_login_password - vCores = var.v_cores - replicaCount = var.replica_count - zonePlacementPolicy = var.zone_placement_policy - } - } - - schema_validation_enabled = false - response_export_values = ["*"] -} - -resource "azapi_resource" "firewall_rule" { - type = "Microsoft.HorizonDB/clusters/pools/firewallRules@2026-01-20-preview" - parent_id = "${azapi_resource.cluster.id}/pools/${var.pool_name}" +resource "azapi_resource" "firewall_rules" { + type = "Microsoft.HorizonDb/clusters/pools/firewallRules@2026-10-01-preview" name = var.firewall_rule_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}/pools/${var.pool_name}" body = { properties = { - startIp = var.firewall_rule_start_ip - endIp = var.firewall_rule_end_ip - description = var.firewall_rule_description + startIpAddress = "10.0.0.1" + endIpAddress = "10.0.0.254" + description = "Allow access from the corporate network" } } schema_validation_enabled = false response_export_values = ["*"] } - diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-no-specific-availability-zone.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-no-specific-availability-zone.bicep deleted file mode 100644 index 5c220421..00000000 --- a/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-no-specific-availability-zone.bicep +++ /dev/null @@ -1,17 +0,0 @@ -@description('The name for the cluster') -param clusterName string -@description('The name for the pool') -param poolName string = 'DefaultPool' -@description('The name for the replica') -param replicaName string -@description('The role for the replica') -param role string = 'Read' -@description('The availability zone for the replica') -param availabilityZone string = '1' -resource replica 'Microsoft.HorizonDB/clusters/pools/replicas@2026-01-20-preview' = { - name: '${clusterName}/${poolName}/${replicaName}' - properties: { - role: role - availabilityZone: availabilityZone - } -} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-no-specific-availability-zone.json b/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-no-specific-availability-zone.json deleted file mode 100644 index 6ceca951..00000000 --- a/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-no-specific-availability-zone.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "clusterName": { - "type": "string", - "metadata": { - "description": "The name for the cluster" - } - }, - "poolName": { - "type": "string", - "defaultValue": "DefaultPool", - "metadata": { - "description": "The name for the pool" - } - }, - "replicaName": { - "type": "string", - "metadata": { - "description": "The name for the replica" - } - }, - "role": { - "type": "string", - "defaultValue": "Read", - "metadata": { - "description": "The role for the replica" - } - }, - "availabilityZone": { - "type": "string", - "defaultValue": "1", - "metadata": { - "description": "The availability zone for the replica" - } - } - }, - "resources": [ - { - "type": "Microsoft.HorizonDB/clusters/pools/replicas", - "apiVersion": "2026-01-20-preview", - "name": "[format('{0}/{1}/{2}', parameters('clusterName'), parameters('poolName'), parameters('replicaName'))]", - "properties": { - "role": "[parameters('role')]", - "availabilityZone": "[parameters('availabilityZone')]" - } - } - ] -} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-no-specific-availability-zone.tf b/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-no-specific-availability-zone.tf deleted file mode 100644 index 92c686a2..00000000 --- a/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-no-specific-availability-zone.tf +++ /dev/null @@ -1,170 +0,0 @@ -terraform { - required_providers { - azapi = { - source = "Azure/azapi" - } - } -} - -provider "azapi" { - skip_provider_registration = false -} - -variable "cluster_name" { - type = string - description = "The name for the cluster" -} - -variable "pool_name" { - type = string - default = "DefaultPool" - description = "The name for the pool" -} - -variable "replica_name" { - type = string - description = "The name for the replica" -} - -variable "role" { - type = string - default = "Read" - description = "The role for the replica" -} - -data "azapi_client_config" "current" { -} - -resource "azapi_resource" "replica" { - type = "Microsoft.HorizonDB/clusters/pools/replicas@2026-01-20-preview" - name = var.replica_name - parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDB/clusters/${var.cluster_name}/pools/${var.pool_name}" - - body = { - properties = { - role = var.role - } - } - - schema_validation_enabled = false - response_export_values = ["*"] -} - - -variable "cluster_name" { - type = string - description = "The name for the cluster" -} - -variable "pool_name" { - type = string - default = "DefaultPool" - description = "The name for the pool" -} - -variable "firewall_rule_name" { - type = string - default = "DataAnalyticsDepartment" - description = "The name for the firewall rule" -} - -variable "firewall_rule_start_ip" { - type = string - default = "10.0.0.1" - description = "The start IP address for the firewall rule" -} - -variable "firewall_rule_end_ip" { - type = string - default = "10.0.0.10" - description = "The end IP address for the firewall rule" -} - -variable "firewall_rule_description" { - type = string - default = "Allow all IP addresses from the Data Analytics department" - description = "The description for the firewall rule" -} - -variable "administrator_login" { - type = string - description = "The administrator login name for cluster" -} - -variable "administrator_login_password" { - type = string - description = "The administrator login password for cluster" - sensitive = true -} - -variable "create_mode" { - type = string - default = "Create" - description = "The create mode for cluster" -} - -variable "version" { - type = number - default = 17 - description = "The major version of server" -} - -variable "v_cores" { - type = number - default = 4 - description = "The number of vCores for each replica of the cluster" -} - -variable "replica_count" { - type = number - default = 2 - description = "The number of replicas for the cluster, including the primary replica, which is the only one in which writes are allowed. The other replicas are read-only." -} - -variable "zone_placement_policy" { - type = string - default = "BestEffort" - description = "The name of the SKU for cluster" -} - -data "azapi_client_config" "current" { -} - -resource "azapi_resource" "cluster" { - type = "Microsoft.HorizonDB/clusters@2026-01-20-preview" - name = var.cluster_name - parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}" - - body = { - properties = { - createMode = var.create_mode - version = var.version - administratorLogin = var.administrator_login - administratorLoginPassword = var.administrator_login_password - vCores = var.v_cores - replicaCount = var.replica_count - zonePlacementPolicy = var.zone_placement_policy - } - } - - schema_validation_enabled = false - response_export_values = ["*"] -} - -resource "azapi_resource" "firewall_rule" { - type = "Microsoft.HorizonDB/clusters/pools/firewallRules@2026-01-20-preview" - parent_id = "${azapi_resource.cluster.id}/pools/${var.pool_name}" - name = var.firewall_rule_name - - body = { - properties = { - startIp = var.firewall_rule_start_ip - endIp = var.firewall_rule_end_ip - description = var.firewall_rule_description - } - } - - schema_validation_enabled = false - response_export_values = ["*"] -} - diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-specific-availability-zone.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-specific-availability-zone.bicep deleted file mode 100644 index b4f7bfd9..00000000 --- a/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-specific-availability-zone.bicep +++ /dev/null @@ -1,14 +0,0 @@ -@description('The name for the cluster') -param clusterName string -@description('The name for the pool') -param poolName string = 'DefaultPool' -@description('The name for the replica') -param replicaName string -@description('The role for the replica') -param role string = 'Read' -resource replica 'Microsoft.HorizonDB/clusters/pools/replicas@2026-01-20-preview' = { - name: '${clusterName}/${poolName}/${replicaName}' - properties: { - role: role - } -} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-specific-availability-zone.json b/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-specific-availability-zone.json deleted file mode 100644 index 35019c91..00000000 --- a/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-specific-availability-zone.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "clusterName": { - "type": "string", - "metadata": { - "description": "The name for the cluster" - } - }, - "poolName": { - "type": "string", - "defaultValue": "DefaultPool", - "metadata": { - "description": "The name for the pool" - } - }, - "replicaName": { - "type": "string", - "metadata": { - "description": "The name for the replica" - } - }, - "role": { - "type": "string", - "defaultValue": "Read", - "metadata": { - "description": "The role for the replica" - } - } - }, - "resources": [ - { - "type": "Microsoft.HorizonDB/clusters/pools/replicas", - "apiVersion": "2026-01-20-preview", - "name": "[format('{0}/{1}/{2}', parameters('clusterName'), parameters('poolName'), parameters('replicaName'))]", - "properties": { - "role": "[parameters('role')]" - } - } - ] -} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-specific-availability-zone.tf b/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-specific-availability-zone.tf deleted file mode 100644 index 34f04b78..00000000 --- a/settings/remarks/microsoft.horizondb/samples/clusters/pools/replicas/add-specific-availability-zone.tf +++ /dev/null @@ -1,177 +0,0 @@ -terraform { - required_providers { - azapi = { - source = "Azure/azapi" - } - } -} - -provider "azapi" { - skip_provider_registration = false -} - -variable "cluster_name" { - type = string - description = "The name for the cluster" -} - -variable "pool_name" { - type = string - default = "DefaultPool" - description = "The name for the pool" -} - -variable "replica_name" { - type = string - description = "The name for the replica" -} - -variable "role" { - type = string - default = "Read" - description = "The role for the replica" -} - -variable "availability_zone" { - type = string - default = "1" - description = "The availability zone for the replica" -} - -data "azapi_client_config" "current" { -} - -resource "azapi_resource" "replica" { - type = "Microsoft.HorizonDB/clusters/pools/replicas@2026-01-20-preview" - name = var.replica_name - parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDB/clusters/${var.cluster_name}/pools/${var.pool_name}" - - body = { - properties = { - role = var.role - availabilityZone = var.availability_zone - } - } - - schema_validation_enabled = false - response_export_values = ["*"] -} - - -variable "cluster_name" { - type = string - description = "The name for the cluster" -} - -variable "pool_name" { - type = string - default = "DefaultPool" - description = "The name for the pool" -} - -variable "firewall_rule_name" { - type = string - default = "DataAnalyticsDepartment" - description = "The name for the firewall rule" -} - -variable "firewall_rule_start_ip" { - type = string - default = "10.0.0.1" - description = "The start IP address for the firewall rule" -} - -variable "firewall_rule_end_ip" { - type = string - default = "10.0.0.10" - description = "The end IP address for the firewall rule" -} - -variable "firewall_rule_description" { - type = string - default = "Allow all IP addresses from the Data Analytics department" - description = "The description for the firewall rule" -} - -variable "administrator_login" { - type = string - description = "The administrator login name for cluster" -} - -variable "administrator_login_password" { - type = string - description = "The administrator login password for cluster" - sensitive = true -} - -variable "create_mode" { - type = string - default = "Create" - description = "The create mode for cluster" -} - -variable "version" { - type = number - default = 17 - description = "The major version of server" -} - -variable "v_cores" { - type = number - default = 4 - description = "The number of vCores for each replica of the cluster" -} - -variable "replica_count" { - type = number - default = 2 - description = "The number of replicas for the cluster, including the primary replica, which is the only one in which writes are allowed. The other replicas are read-only." -} - -variable "zone_placement_policy" { - type = string - default = "BestEffort" - description = "The name of the SKU for cluster" -} - -data "azapi_client_config" "current" { -} - -resource "azapi_resource" "cluster" { - type = "Microsoft.HorizonDB/clusters@2026-01-20-preview" - name = var.cluster_name - parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}" - - body = { - properties = { - createMode = var.create_mode - version = var.version - administratorLogin = var.administrator_login - administratorLoginPassword = var.administrator_login_password - vCores = var.v_cores - replicaCount = var.replica_count - zonePlacementPolicy = var.zone_placement_policy - } - } - - schema_validation_enabled = false - response_export_values = ["*"] -} - -resource "azapi_resource" "firewall_rule" { - type = "Microsoft.HorizonDB/clusters/pools/firewallRules@2026-01-20-preview" - parent_id = "${azapi_resource.cluster.id}/pools/${var.pool_name}" - name = var.firewall_rule_name - - body = { - properties = { - startIp = var.firewall_rule_start_ip - endIp = var.firewall_rule_end_ip - description = var.firewall_rule_description - } - } - - schema_validation_enabled = false - response_export_values = ["*"] -} - diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-compute.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-compute.bicep new file mode 100644 index 00000000..ced0dd6b --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-compute.bicep @@ -0,0 +1,16 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@description('The name of the HorizonDB pool') +param poolName string = 'example-pool-01' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/pools@2026-10-01-preview' = { + name: '${clusterName}/${poolName}' + properties: { + computeModel: { + vCores: 16 + } + scheduledMaintenance: { + maintenanceManagementType: 'System' + } + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-compute.json b/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-compute.json new file mode 100644 index 00000000..034b8bff --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-compute.json @@ -0,0 +1,35 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + }, + "poolName": { + "type": "string", + "defaultValue": "example-pool-01", + "metadata": { + "description": "The name of the HorizonDB pool" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/pools", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), parameters('poolName'))]", + "properties": { + "computeModel": { + "vCores": 16 + }, + "scheduledMaintenance": { + "maintenanceManagementType": "System" + } + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-compute.tf b/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-compute.tf new file mode 100644 index 00000000..bb8f59a4 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-compute.tf @@ -0,0 +1,46 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +variable "pool_name" { + type = string + default = "example-pool-01" + description = "The name of the HorizonDB pool" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_update_resource" "pools" { + type = "Microsoft.HorizonDb/clusters/pools@2026-10-01-preview" + name = var.pool_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + computeModel = { + vCores = 16 + } + scheduledMaintenance = { + maintenanceManagementType = "System" + } + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-high-availability.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-high-availability.bicep new file mode 100644 index 00000000..63255837 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-high-availability.bicep @@ -0,0 +1,13 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@description('The name of the HorizonDB pool') +param poolName string = 'example-pool-01' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/pools@2026-10-01-preview' = { + name: '${clusterName}/${poolName}' + properties: { + highAvailability: { + mode: 'ZoneRedundant' + } + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-high-availability.json b/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-high-availability.json new file mode 100644 index 00000000..ea32477c --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-high-availability.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + }, + "poolName": { + "type": "string", + "defaultValue": "example-pool-01", + "metadata": { + "description": "The name of the HorizonDB pool" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/pools", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), parameters('poolName'))]", + "properties": { + "highAvailability": { + "mode": "ZoneRedundant" + } + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-high-availability.tf b/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-high-availability.tf new file mode 100644 index 00000000..c6699be0 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/update-high-availability.tf @@ -0,0 +1,43 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +variable "pool_name" { + type = string + default = "example-pool-01" + description = "The name of the HorizonDB pool" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "pools" { + type = "Microsoft.HorizonDb/clusters/pools@2026-10-01-preview" + name = var.pool_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + highAvailability = { + mode = "ZoneRedundant" + } + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-default-parameter-group.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-default-parameter-group.bicep new file mode 100644 index 00000000..95d6200a --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-default-parameter-group.bicep @@ -0,0 +1,14 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@description('The name of the HorizonDB pool') +param poolName string = 'example-pool-01' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/pools@2026-10-01-preview' = { + name: '${clusterName}/${poolName}' + properties: { + parameterGroup: { + parameterGroupResourceId: '/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/providers/Microsoft.HorizonDb/locations/eastus2/parameterGroups/default-postgresql-17-provisioned' + applyMethod: 'Immediate' + } + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-default-parameter-group.json b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-default-parameter-group.json new file mode 100644 index 00000000..f5c2efb7 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-default-parameter-group.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + }, + "poolName": { + "type": "string", + "defaultValue": "example-pool-01", + "metadata": { + "description": "The name of the HorizonDB pool" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/pools", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), parameters('poolName'))]", + "properties": { + "parameterGroup": { + "parameterGroupResourceId": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/providers/Microsoft.HorizonDb/locations/eastus2/parameterGroups/default-postgresql-17-provisioned", + "applyMethod": "Immediate" + } + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-default-parameter-group.tf b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-default-parameter-group.tf new file mode 100644 index 00000000..e89572c1 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-default-parameter-group.tf @@ -0,0 +1,44 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +variable "pool_name" { + type = string + default = "example-pool-01" + description = "The name of the HorizonDB pool" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "pools" { + type = "Microsoft.HorizonDb/clusters/pools@2026-10-01-preview" + name = var.pool_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + parameterGroup = { + parameterGroupResourceId = "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/providers/Microsoft.HorizonDb/locations/eastus2/parameterGroups/default-postgresql-17-provisioned" + applyMethod = "Immediate" + } + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-after-reboot.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-after-reboot.bicep new file mode 100644 index 00000000..0caa73c5 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-after-reboot.bicep @@ -0,0 +1,14 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@description('The name of the HorizonDB pool') +param poolName string = 'example-pool-01' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/pools@2026-10-01-preview' = { + name: '${clusterName}/${poolName}' + properties: { + parameterGroup: { + parameterGroupResourceId: '/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/parameterGroups/maintenance-window-parameters' + applyMethod: 'PendingReboot' + } + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-after-reboot.json b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-after-reboot.json new file mode 100644 index 00000000..b01df1d1 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-after-reboot.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + }, + "poolName": { + "type": "string", + "defaultValue": "example-pool-01", + "metadata": { + "description": "The name of the HorizonDB pool" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/pools", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), parameters('poolName'))]", + "properties": { + "parameterGroup": { + "parameterGroupResourceId": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/parameterGroups/maintenance-window-parameters", + "applyMethod": "PendingReboot" + } + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-after-reboot.tf b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-after-reboot.tf new file mode 100644 index 00000000..70ba3efd --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-after-reboot.tf @@ -0,0 +1,44 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +variable "pool_name" { + type = string + default = "example-pool-01" + description = "The name of the HorizonDB pool" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "pools" { + type = "Microsoft.HorizonDb/clusters/pools@2026-10-01-preview" + name = var.pool_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + parameterGroup = { + parameterGroupResourceId = "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/parameterGroups/maintenance-window-parameters" + applyMethod = "PendingReboot" + } + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-immediately.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-immediately.bicep new file mode 100644 index 00000000..e9270389 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-immediately.bicep @@ -0,0 +1,14 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' +@description('The name of the HorizonDB pool') +param poolName string = 'example-pool-01' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters/pools@2026-10-01-preview' = { + name: '${clusterName}/${poolName}' + properties: { + parameterGroup: { + parameterGroupResourceId: '/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/parameterGroups/production-parameters' + applyMethod: 'Immediate' + } + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-immediately.json b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-immediately.json new file mode 100644 index 00000000..3749aa8c --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-immediately.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + }, + "poolName": { + "type": "string", + "defaultValue": "example-pool-01", + "metadata": { + "description": "The name of the HorizonDB pool" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters/pools", + "apiVersion": "2026-10-01-preview", + "name": "[format('{0}/{1}', parameters('clusterName'), parameters('poolName'))]", + "properties": { + "parameterGroup": { + "parameterGroupResourceId": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/parameterGroups/production-parameters", + "applyMethod": "Immediate" + } + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-immediately.tf b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-immediately.tf new file mode 100644 index 00000000..6f9e765f --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/pools/use-parameter-group-immediately.tf @@ -0,0 +1,44 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +variable "pool_name" { + type = string + default = "example-pool-01" + description = "The name of the HorizonDB pool" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "pools" { + type = "Microsoft.HorizonDb/clusters/pools@2026-10-01-preview" + name = var.pool_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb/clusters/${var.cluster_name}" + + body = { + properties = { + parameterGroup = { + parameterGroupResourceId = "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/parameterGroups/production-parameters" + applyMethod = "Immediate" + } + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/restore-cross-region.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/restore-cross-region.bicep new file mode 100644 index 00000000..1c3aa8d0 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/restore-cross-region.bicep @@ -0,0 +1,20 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'cross-region-restored-cluster' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters@2026-10-01-preview' = { + name: clusterName + location: 'westus2' + properties: { + creationMode: 'PointInTimeRestore' + pointInTimeUtc: '2026-07-27T12:00:00Z' + creationSourceClusterResourceId: '/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/clusters/source-cluster' + creationSourceClusterLocation: 'eastus2' + network: { + publicAccess: 'Disabled' + } + backup: { + geoRedundancy: 'Enabled' + retentionDays: 14 + } + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/restore-cross-region.json b/settings/remarks/microsoft.horizondb/samples/clusters/restore-cross-region.json new file mode 100644 index 00000000..0b4b401c --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/restore-cross-region.json @@ -0,0 +1,34 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "cross-region-restored-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters", + "apiVersion": "2026-10-01-preview", + "name": "[parameters('clusterName')]", + "location": "westus2", + "properties": { + "creationMode": "PointInTimeRestore", + "pointInTimeUtc": "2026-07-27T12:00:00Z", + "creationSourceClusterResourceId": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/clusters/source-cluster", + "creationSourceClusterLocation": "eastus2", + "network": { + "publicAccess": "Disabled" + }, + "backup": { + "geoRedundancy": "Enabled", + "retentionDays": 14 + } + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/restore-cross-region.tf b/settings/remarks/microsoft.horizondb/samples/clusters/restore-cross-region.tf new file mode 100644 index 00000000..bd502791 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/restore-cross-region.tf @@ -0,0 +1,46 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "cross-region-restored-cluster" + description = "The name of the HorizonDB cluster" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "clusters" { + type = "Microsoft.HorizonDb/clusters@2026-10-01-preview" + name = var.cluster_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb" + location = "westus2" + + body = { + properties = { + creationMode = "PointInTimeRestore" + pointInTimeUtc = "2026-07-27T12:00:00Z" + creationSourceClusterResourceId = "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/clusters/source-cluster" + creationSourceClusterLocation = "eastus2" + network = { + publicAccess = "Disabled" + } + backup = { + geoRedundancy = "Enabled" + retentionDays = 14 + } + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/restore-point-in-time.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/restore-point-in-time.bicep new file mode 100644 index 00000000..e1f40011 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/restore-point-in-time.bicep @@ -0,0 +1,19 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'restored-cluster' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters@2026-10-01-preview' = { + name: clusterName + location: 'eastus2' + properties: { + creationMode: 'PointInTimeRestore' + pointInTimeUtc: '2026-07-27T12:00:00Z' + creationSourceClusterResourceId: '/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/clusters/source-cluster' + network: { + publicAccess: 'Disabled' + } + backup: { + geoRedundancy: 'Enabled' + retentionDays: 14 + } + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/restore-point-in-time.json b/settings/remarks/microsoft.horizondb/samples/clusters/restore-point-in-time.json new file mode 100644 index 00000000..db84298f --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/restore-point-in-time.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "restored-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters", + "apiVersion": "2026-10-01-preview", + "name": "[parameters('clusterName')]", + "location": "eastus2", + "properties": { + "creationMode": "PointInTimeRestore", + "pointInTimeUtc": "2026-07-27T12:00:00Z", + "creationSourceClusterResourceId": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/clusters/source-cluster", + "network": { + "publicAccess": "Disabled" + }, + "backup": { + "geoRedundancy": "Enabled", + "retentionDays": 14 + } + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/restore-point-in-time.tf b/settings/remarks/microsoft.horizondb/samples/clusters/restore-point-in-time.tf new file mode 100644 index 00000000..684cd0e7 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/restore-point-in-time.tf @@ -0,0 +1,45 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "restored-cluster" + description = "The name of the HorizonDB cluster" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "clusters" { + type = "Microsoft.HorizonDb/clusters@2026-10-01-preview" + name = var.cluster_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb" + location = "eastus2" + + body = { + properties = { + creationMode = "PointInTimeRestore" + pointInTimeUtc = "2026-07-27T12:00:00Z" + creationSourceClusterResourceId = "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/example-resource-group/providers/Microsoft.HorizonDb/clusters/source-cluster" + network = { + publicAccess = "Disabled" + } + backup = { + geoRedundancy = "Enabled" + retentionDays = 14 + } + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/rotate-data-encryption-key.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/rotate-data-encryption-key.bicep new file mode 100644 index 00000000..a74b0927 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/rotate-data-encryption-key.bicep @@ -0,0 +1,11 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters@2026-10-01-preview' = { + name: clusterName + properties: { + dataEncryption: { + primaryKeyUri: 'https://primary-key-vault.vault.azure.net/keys/horizondb-primary-key' + } + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/rotate-data-encryption-key.json b/settings/remarks/microsoft.horizondb/samples/clusters/rotate-data-encryption-key.json new file mode 100644 index 00000000..ce6c7751 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/rotate-data-encryption-key.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters", + "apiVersion": "2026-10-01-preview", + "name": "[parameters('clusterName')]", + "properties": { + "dataEncryption": { + "primaryKeyUri": "https://primary-key-vault.vault.azure.net/keys/horizondb-primary-key" + } + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/rotate-data-encryption-key.tf b/settings/remarks/microsoft.horizondb/samples/clusters/rotate-data-encryption-key.tf new file mode 100644 index 00000000..1b23d8dc --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/rotate-data-encryption-key.tf @@ -0,0 +1,37 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_resource" "clusters" { + type = "Microsoft.HorizonDb/clusters@2026-10-01-preview" + name = var.cluster_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb" + + body = { + properties = { + dataEncryption = { + primaryKeyUri = "https://primary-key-vault.vault.azure.net/keys/horizondb-primary-key" + } + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/scale-cluster-vertically.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/scale-cluster-vertically.bicep deleted file mode 100644 index 596777bf..00000000 --- a/settings/remarks/microsoft.horizondb/samples/clusters/scale-cluster-vertically.bicep +++ /dev/null @@ -1,16 +0,0 @@ -@description('The location for the cluster') -param location string = 'eastus' -@description('The name for the cluster') -param clusterName string -@description('The create mode for cluster') -param createMode string = 'Update' -@description('The number of vCores for each replica of the cluster') -param vCores int = 8 -resource flexibleServer 'Microsoft.HorizonDB/clusters@2026-01-20-preview' = { - name: clusterName - location: location - properties: { - createMode: createMode - vCores: vCores - } -} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/scale-cluster-vertically.json b/settings/remarks/microsoft.horizondb/samples/clusters/scale-cluster-vertically.json deleted file mode 100644 index 792df980..00000000 --- a/settings/remarks/microsoft.horizondb/samples/clusters/scale-cluster-vertically.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "location": { - "type": "string", - "defaultValue": "eastus", - "metadata": { - "description": "The location for the cluster" - } - }, - "clusterName": { - "type": "string", - "metadata": { - "description": "The name for the cluster" - } - }, - "createMode": { - "type": "string", - "defaultValue": "Update", - "metadata": { - "description": "The create mode for cluster" - } - }, - "vCores": { - "type": "int", - "defaultValue": 8, - "metadata": { - "description": "The number of vCores for each replica of the cluster" - } - } - }, - "resources": [ - { - "type": "Microsoft.HorizonDB/clusters", - "apiVersion": "2026-01-20-preview", - "name": "[parameters('clusterName')]", - "location": "[parameters('location')]", - "properties": { - "createMode": "[parameters('createMode')]", - "vCores": "[parameters('vCores')]" - } - } - ] -} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/scale-cluster-vertically.tf b/settings/remarks/microsoft.horizondb/samples/clusters/scale-cluster-vertically.tf deleted file mode 100644 index 2206a20d..00000000 --- a/settings/remarks/microsoft.horizondb/samples/clusters/scale-cluster-vertically.tf +++ /dev/null @@ -1,54 +0,0 @@ -terraform { - required_providers { - azapi = { - source = "Azure/azapi" - } - } -} - -provider "azapi" { - skip_provider_registration = false -} - -variable "location" { - type = string - default = "eastus" - description = "The location for the cluster" -} - -variable "cluster_name" { - type = string - description = "The name for the cluster" -} - -variable "create_mode" { - type = string - default = "Update" - description = "The create mode for cluster" -} - -variable "v_cores" { - type = number - default = 8 - description = "The number of vCores for each replica of the cluster" -} - -resource "azapi_resource" "cluster" { - type = "Microsoft.HorizonDB/clusters@2026-01-20-preview" - name = var.cluster_name - location = var.location - parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}" - - body = { - properties = { - createMode = var.create_mode - vCores = var.v_cores - } - } - - schema_validation_enabled = false - response_export_values = ["*"] -} - -data "azapi_client_config" "current" { -} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/update-administrator-login-password.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/update-administrator-login-password.bicep deleted file mode 100644 index e4bac308..00000000 --- a/settings/remarks/microsoft.horizondb/samples/clusters/update-administrator-login-password.bicep +++ /dev/null @@ -1,17 +0,0 @@ -@description('The location for the cluster') -param location string = 'eastus' -@description('The name for the cluster') -param clusterName string -@description('The create mode for cluster') -param createMode string = 'Update' -@secure() -@description('The administrator login password for cluster') -param administratorLoginPassword string -resource flexibleServer 'Microsoft.HorizonDB/clusters@2026-01-20-preview' = { - name: clusterName - location: location - properties: { - createMode: createMode - administratorLoginPassword: administratorLoginPassword - } -} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/update-administrator-login-password.json b/settings/remarks/microsoft.horizondb/samples/clusters/update-administrator-login-password.json deleted file mode 100644 index fff11895..00000000 --- a/settings/remarks/microsoft.horizondb/samples/clusters/update-administrator-login-password.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "location": { - "type": "string", - "defaultValue": "eastus", - "metadata": { - "description": "The location for the cluster" - } - }, - "clusterName": { - "type": "string", - "metadata": { - "description": "The name for the cluster" - } - }, - "createMode": { - "type": "string", - "defaultValue": "Update", - "metadata": { - "description": "The create mode for cluster" - } - }, - "administratorLoginPassword": { - "type": "secureString", - "metadata": { - "description": "The administrator login password for cluster" - } - } - }, - "resources": [ - { - "type": "Microsoft.HorizonDB/clusters", - "apiVersion": "2026-01-20-preview", - "name": "[parameters('clusterName')]", - "location": "[parameters('location')]", - "properties": { - "createMode": "[parameters('createMode')]", - "administratorLoginPassword": "[parameters('administratorLoginPassword')]" - } - } - ] -} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/update.bicep b/settings/remarks/microsoft.horizondb/samples/clusters/update.bicep new file mode 100644 index 00000000..d19352e9 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/update.bicep @@ -0,0 +1,18 @@ +@description('The name of the HorizonDB cluster') +param clusterName string = 'example-cluster' + +resource horizonDbResource 'Microsoft.HorizonDb/clusters@2026-10-01-preview' = { + name: clusterName + tags: { + environment: 'production' + team: 'data-platform' + } + properties: { + network: { + publicAccess: 'Disabled' + } + backup: { + retentionDays: 21 + } + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/update.json b/settings/remarks/microsoft.horizondb/samples/clusters/update.json new file mode 100644 index 00000000..aa943838 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/update.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "type": "string", + "defaultValue": "example-cluster", + "metadata": { + "description": "The name of the HorizonDB cluster" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/clusters", + "apiVersion": "2026-10-01-preview", + "name": "[parameters('clusterName')]", + "tags": { + "environment": "production", + "team": "data-platform" + }, + "properties": { + "network": { + "publicAccess": "Disabled" + }, + "backup": { + "retentionDays": 21 + } + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/clusters/update.tf b/settings/remarks/microsoft.horizondb/samples/clusters/update.tf new file mode 100644 index 00000000..9957034d --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/clusters/update.tf @@ -0,0 +1,44 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "cluster_name" { + type = string + default = "example-cluster" + description = "The name of the HorizonDB cluster" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_update_resource" "clusters" { + type = "Microsoft.HorizonDb/clusters@2026-10-01-preview" + name = var.cluster_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb" + + body = { + tags = { + environment = "production" + team = "data-platform" + } + properties = { + network = { + publicAccess = "Disabled" + } + backup = { + retentionDays = 21 + } + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/remarks/microsoft.horizondb/samples/parametergroups/create.bicep b/settings/remarks/microsoft.horizondb/samples/parametergroups/create.bicep index 92ac3998..d088f271 100644 --- a/settings/remarks/microsoft.horizondb/samples/parametergroups/create.bicep +++ b/settings/remarks/microsoft.horizondb/samples/parametergroups/create.bicep @@ -1,40 +1,36 @@ -@description('The name for the parameter group') -param parameterGroupName string -@description('The location for the parameter group') -param location string = 'eastus' -@description('The tags for the parameter group') -param tags object = { - env: 'dev' -} -@description('The database parameters for the parameter group') -param parameters array = [ - { - name: 'max_connections' - value: '200' - } - { - name: 'log_min_error_statement' - value: 'error' - } - { - name: 'shared_buffers' - value: '2000' - } -] -@description('The description of the parameter group') -param parameterGroupDescription string = 'Parameter group for high-throughput workloads' -@description('The PostgreSQL version for the parameter group') -param pgVersion int = 17 -@description('Whether to apply changes immediately') -param applyImmediately bool = true -resource parameterGroup 'Microsoft.HorizonDB/parameterGroups@2026-01-20-preview' = { +@description('The name of the parameter group') +param parameterGroupName string = 'production-parameters' + +resource horizonDbResource 'Microsoft.HorizonDb/parameterGroups@2026-10-01-preview' = { name: parameterGroupName - location: location - tags: tags + location: 'eastus2' + tags: { + environment: 'production' + } properties: { - parameters: parameters - description: parameterGroupDescription - pgVersion: pgVersion - applyImmediately: applyImmediately + postgreSqlVersion: '17' + parameters: [ + { + name: 'application_name' + value: 'horizondb-production' + } + { + name: 'autovacuum' + value: 'off' + } + { + name: 'wal_receiver_timeout' + value: '45000' + } + { + name: 'work_mem' + value: '8192' + } + { + name: 'xmlbinary' + value: 'base64' + } + ] + description: 'Parameters for production transactional workloads' } } diff --git a/settings/remarks/microsoft.horizondb/samples/parametergroups/create.json b/settings/remarks/microsoft.horizondb/samples/parametergroups/create.json index 2e18c3b4..6bd3e788 100644 --- a/settings/remarks/microsoft.horizondb/samples/parametergroups/create.json +++ b/settings/remarks/microsoft.horizondb/samples/parametergroups/create.json @@ -4,80 +4,46 @@ "parameters": { "parameterGroupName": { "type": "string", + "defaultValue": "production-parameters", "metadata": { - "description": "The name for the parameter group" - } - }, - "location": { - "type": "string", - "defaultValue": "eastus", - "metadata": { - "description": "The location for the parameter group" - } - }, - "tags": { - "type": "object", - "defaultValue": { - "env": "dev" - }, - "metadata": { - "description": "The tags for the parameter group" - } - }, - "parameters": { - "type": "array", - "defaultValue": [ - { - "name": "max_connections", - "value": "200" - }, - { - "name": "log_min_error_statement", - "value": "error" - }, - { - "name": "shared_buffers", - "value": "2000" - } - ], - "metadata": { - "description": "The database parameters for the parameter group" - } - }, - "parameterGroupDescription": { - "type": "string", - "defaultValue": "Parameter group for high-throughput workloads", - "metadata": { - "description": "The description of the parameter group" - } - }, - "pgVersion": { - "type": "int", - "defaultValue": 17, - "metadata": { - "description": "The PostgreSQL version for the parameter group" - } - }, - "applyImmediately": { - "type": "bool", - "defaultValue": true, - "metadata": { - "description": "Whether to apply changes immediately" + "description": "The name of the parameter group" } } }, "resources": [ { - "type": "Microsoft.HorizonDB/parameterGroups", - "apiVersion": "2026-01-20-preview", + "type": "Microsoft.HorizonDb/parameterGroups", + "apiVersion": "2026-10-01-preview", "name": "[parameters('parameterGroupName')]", - "location": "[parameters('location')]", - "tags": "[parameters('tags')]", + "location": "eastus2", + "tags": { + "environment": "production" + }, "properties": { - "parameters": "[parameters('parameters')]", - "description": "[parameters('parameterGroupDescription')]", - "pgVersion": "[parameters('pgVersion')]", - "applyImmediately": "[parameters('applyImmediately')]" + "postgreSqlVersion": "17", + "parameters": [ + { + "name": "application_name", + "value": "horizondb-production" + }, + { + "name": "autovacuum", + "value": "off" + }, + { + "name": "wal_receiver_timeout", + "value": "45000" + }, + { + "name": "work_mem", + "value": "8192" + }, + { + "name": "xmlbinary", + "value": "base64" + } + ], + "description": "Parameters for production transactional workloads" } } ] diff --git a/settings/remarks/microsoft.horizondb/samples/parametergroups/create.tf b/settings/remarks/microsoft.horizondb/samples/parametergroups/create.tf index 468ab9f1..6ef17289 100644 --- a/settings/remarks/microsoft.horizondb/samples/parametergroups/create.tf +++ b/settings/remarks/microsoft.horizondb/samples/parametergroups/create.tf @@ -12,81 +12,48 @@ provider "azapi" { variable "parameter_group_name" { type = string - description = "The name for the parameter group" -} - -variable "location" { - type = string - default = "eastus" - description = "The location for the parameter group" -} - -variable "tags" { - type = object({ - env = optional(string) - }) - default = { - env = "dev" - } - description = "The tags for the parameter group" -} - -variable "pg_version" { - type = number - default = 17 - description = "The PostgreSQL version for the parameter group" -} - -variable "apply_immediately" { - type = bool - default = true - description = "Whether to apply changes immediately" -} - -variable "parameter_group_description" { - type = string - default = "Parameter group for high-throughput workloads" - description = "The description of the parameter group" -} - -variable "parameters" { - type = list(object({ - name = string - value = string - })) - default = [ - { - name = "max_connections" - value = "200" - }, - { - name = "log_min_error_statement" - value = "error" - }, - { - name = "shared_buffers" - value = "2000" - } - ] - description = "The database parameters for the parameter group" + default = "production-parameters" + description = "The name of the parameter group" } data "azapi_client_config" "current" { } -resource "azapi_resource" "parameter_group" { - type = "Microsoft.HorizonDB/parameterGroups@2026-01-20-preview" +resource "azapi_resource" "parameter_groups" { + type = "Microsoft.HorizonDb/parameterGroups@2026-10-01-preview" name = var.parameter_group_name - location = var.location - parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}" + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb" + location = "eastus2" body = { - tags = var.tags + tags = { + environment = "production" + } properties = { - parameters = var.parameters - description = var.parameter_group_description - pgVersion = var.pg_version - applyImmediately = var.apply_immediately + postgreSqlVersion = "17" + parameters = [ + { + name = "application_name" + value = "horizondb-production" + }, + { + name = "autovacuum" + value = "off" + }, + { + name = "wal_receiver_timeout" + value = "45000" + }, + { + name = "work_mem" + value = "8192" + }, + { + name = "xmlbinary" + value = "base64" + }, + ] + description = "Parameters for production transactional workloads" } } diff --git a/settings/remarks/microsoft.horizondb/samples/parametergroups/update.bicep b/settings/remarks/microsoft.horizondb/samples/parametergroups/update.bicep new file mode 100644 index 00000000..4cbfafb3 --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/parametergroups/update.bicep @@ -0,0 +1,35 @@ +@description('The name of the parameter group') +param parameterGroupName string = 'production-parameters' + +resource horizonDbResource 'Microsoft.HorizonDb/parameterGroups@2026-10-01-preview' = { + name: parameterGroupName + tags: { + environment: 'production' + team: 'data-platform' + } + properties: { + parameters: [ + { + name: 'application_name' + value: 'horizondb-production' + } + { + name: 'autovacuum' + value: 'off' + } + { + name: 'wal_receiver_timeout' + value: '45000' + } + { + name: 'work_mem' + value: '8192' + } + { + name: 'xmlbinary' + value: 'base64' + } + ] + description: 'Updated parameters for production transactional workloads' + } +} diff --git a/settings/remarks/microsoft.horizondb/samples/parametergroups/update.json b/settings/remarks/microsoft.horizondb/samples/parametergroups/update.json new file mode 100644 index 00000000..ff0c046a --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/parametergroups/update.json @@ -0,0 +1,49 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "parameterGroupName": { + "type": "string", + "defaultValue": "production-parameters", + "metadata": { + "description": "The name of the parameter group" + } + } + }, + "resources": [ + { + "type": "Microsoft.HorizonDb/parameterGroups", + "apiVersion": "2026-10-01-preview", + "name": "[parameters('parameterGroupName')]", + "tags": { + "environment": "production", + "team": "data-platform" + }, + "properties": { + "parameters": [ + { + "name": "application_name", + "value": "horizondb-production" + }, + { + "name": "autovacuum", + "value": "off" + }, + { + "name": "wal_receiver_timeout", + "value": "45000" + }, + { + "name": "work_mem", + "value": "8192" + }, + { + "name": "xmlbinary", + "value": "base64" + } + ], + "description": "Updated parameters for production transactional workloads" + } + } + ] +} diff --git a/settings/remarks/microsoft.horizondb/samples/parametergroups/update.tf b/settings/remarks/microsoft.horizondb/samples/parametergroups/update.tf new file mode 100644 index 00000000..0f8a2fab --- /dev/null +++ b/settings/remarks/microsoft.horizondb/samples/parametergroups/update.tf @@ -0,0 +1,61 @@ +terraform { + required_providers { + azapi = { + source = "Azure/azapi" + } + } +} + +provider "azapi" { + skip_provider_registration = false +} + +variable "parameter_group_name" { + type = string + default = "production-parameters" + description = "The name of the parameter group" +} + +data "azapi_client_config" "current" { +} + +resource "azapi_update_resource" "parameter_groups" { + type = "Microsoft.HorizonDb/parameterGroups@2026-10-01-preview" + name = var.parameter_group_name + parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}/resourceGroups/${data.azapi_client_config.current.resource_group_name}/providers/Microsoft.HorizonDb" + + body = { + tags = { + environment = "production" + team = "data-platform" + } + properties = { + parameters = [ + { + name = "application_name" + value = "horizondb-production" + }, + { + name = "autovacuum" + value = "off" + }, + { + name = "wal_receiver_timeout" + value = "45000" + }, + { + name = "work_mem" + value = "8192" + }, + { + name = "xmlbinary" + value = "base64" + }, + ] + description = "Updated parameters for production transactional workloads" + } + } + + schema_validation_enabled = false + response_export_values = ["*"] +} diff --git a/settings/schemas/config.schema.json b/settings/schemas/config.schema.json index 5a13beeb..d7ea3578 100644 --- a/settings/schemas/config.schema.json +++ b/settings/schemas/config.schema.json @@ -22,6 +22,5 @@ "TocTitleMapping", "ExcludedProviders" ], - "additionalProperties": false, - "definitions": {} + "additionalProperties": false } \ No newline at end of file diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 5306e326..7d5d73ca 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -15,6 +15,7 @@ - + + diff --git a/src/TemplateRefGenerator.Tests/MarkdownGeneratorTests.cs b/src/TemplateRefGenerator.Tests/MarkdownGeneratorTests.cs index 6567632c..4642add1 100644 --- a/src/TemplateRefGenerator.Tests/MarkdownGeneratorTests.cs +++ b/src/TemplateRefGenerator.Tests/MarkdownGeneratorTests.cs @@ -7,6 +7,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using Azure.Bicep.Types.Az; +using Azure.Bicep.Types.Concrete; using Azure.Deployments.Testing.Utilities; using FluentAssertions; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -44,4 +45,54 @@ public void Markdown_generation_works(EmbeddedFile embeddedFile) markdownFile.WriteToOutputFolder(markdown); markdownFile.ShouldHaveExpectedValue(); } + + [TestMethod] + [DataRow(true, false)] + [DataRow(true, true)] + [DataRow(false, false)] + [DataRow(false, true)] + public void Resource_rendering_uses_writable_scope_metadata(bool isReadOnly, bool isLatestVersionPage) + { + var typeProvider = new ResourceTypeProvider(new AzTypeLoader()); + var resourceType = typeProvider.GetResourceTypes() + .Select(x => typeProvider.Get(x.resourceType, x.apiVersion)) + .First(x => (x.WritableScopes == ScopeType.None) == isReadOnly && + !x.Name.StartsWith("Microsoft.HorizonDb/", StringComparison.OrdinalIgnoreCase)); + + MarkdownGenerator.IsReadOnlyResource(resourceType).Should().Be(isReadOnly); + + var providerNamespace = Utils.GetProviderNamespace(resourceType.Name); + var groupedTypes = new MarkdownGenerator(typeProvider).GetGroupedTypes() + .First(x => StringComparer.OrdinalIgnoreCase.Equals(x.ProviderNamespace, providerNamespace)); + var markdown = MarkdownGenerator.GenerateMarkdown(groupedTypes, resourceType, new(), new(), isLatestVersionPage); + + foreach (var pivot in new[] { "bicep", "arm-template", "terraform" }) + { + markdown.Should().Contain($"::: zone pivot=\"deployment-language-{pivot}\""); + } + + markdown.Should().Contain("## Property Values", Exactly.Times(3)); + + if (isReadOnly) + { + markdown.Should().Contain("reference for retrieving the resource."); + markdown.Should().Contain("is read-only and cannot be deployed.", Exactly.Times(3)); + markdown.Should().NotContain("can be deployed with operations that target:"); + markdown.Should().NotContain("## Resource format"); + markdown.Should().NotContain("## Usage Examples"); + markdown.Should().NotContain("```bicep"); + markdown.Should().NotContain("```json"); + markdown.Should().NotContain("```terraform"); + } + else + { + markdown.Should().Contain("syntax and properties to use in Azure Resource Manager templates for deploying the resource."); + markdown.Should().NotContain("is read-only and cannot be deployed."); + markdown.Should().Contain("can be deployed with operations that target:", Exactly.Times(3)); + markdown.Should().Contain("## Resource format", Exactly.Times(3)); + markdown.Should().Contain("```bicep"); + markdown.Should().Contain("```json"); + markdown.Should().Contain("```terraform"); + } + } } \ No newline at end of file diff --git a/src/TemplateRefGenerator.Tests/RemarksLoaderTests.cs b/src/TemplateRefGenerator.Tests/RemarksLoaderTests.cs new file mode 100644 index 00000000..c5410791 --- /dev/null +++ b/src/TemplateRefGenerator.Tests/RemarksLoaderTests.cs @@ -0,0 +1,86 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + + +using FluentAssertions; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using TemplateRefGenerator; + +namespace TemplateRefGenerator.Tests; +[TestClass] +public class RemarksLoaderTests +{ + [TestMethod] + [DataRow("2026-10-01-preview", null, "2026-01-20-preview", false)] + [DataRow("2026-10-01-preview", null, "2026-10-01-preview", true)] + [DataRow("2026-10-01-preview", null, "2027-01-01", true)] + [DataRow(null, "2026-10-01-preview", "2026-01-20-preview", true)] + [DataRow(null, "2026-10-01-preview", "2026-10-01-preview", true)] + [DataRow(null, "2026-10-01-preview", "2027-01-01", false)] + public void Code_samples_are_filtered_by_api_version_range( + string? minimum, + string? maximum, + string apiVersion, + bool expected) + { + var sample = new RemarksLoader.CodeSample( + "Microsoft.Test/widgets", + new RemarksLoader.ApiVersionRequirement(minimum, maximum), + "samples/widget.bicep", + "Deploy a widget."); + var remarks = new RemarksLoader.RemarksFile(null, null, null, [sample], null, null); + var resource = new MarkdownGenerator.ResourceMetadata( + "Microsoft.Test", + "Microsoft.Test/widgets", + "widgets", + apiVersion, + null!, + false, + false); + + var samples = remarks.GetBicepSamples(resource); + + if (expected) + { + samples.Should().ContainSingle().Which.Should().Be(sample); + } + else + { + samples.Should().BeEmpty(); + } + } + + [TestMethod] + [DataRow("2026-01-20-preview", false)] + [DataRow("2026-05-01-preview", false)] + [DataRow("2026-10-01-preview", true)] + public void HorizonDB_samples_are_only_included_for_compatible_api_versions(string apiVersion, bool expected) + { + var remarks = new RemarksLoader().GetRemarks("Microsoft.HorizonDb"); + var resource = new MarkdownGenerator.ResourceMetadata( + "Microsoft.HorizonDb", + "Microsoft.HorizonDb/clusters", + "clusters", + apiVersion, + null!, + false, + false); + + foreach (var samples in new[] + { + remarks.GetBicepSamples(resource), + remarks.GetArmTemplateSamples(resource), + remarks.GetTerraformSamples(resource), + }) + { + if (expected) + { + samples.Should().NotBeEmpty(); + } + else + { + samples.Should().BeEmpty(); + } + } + } +} diff --git a/src/TemplateRefGenerator/Config/RemarksLoader.cs b/src/TemplateRefGenerator/Config/RemarksLoader.cs index 8cc1aa4c..31e743c6 100644 --- a/src/TemplateRefGenerator/Config/RemarksLoader.cs +++ b/src/TemplateRefGenerator/Config/RemarksLoader.cs @@ -91,8 +91,8 @@ public IEnumerable GetTerraformSamples(MarkdownGenerator.ResourceMet .Where(r => FilterApiVersions(resource, r.ApiVersion)); private static bool FilterApiVersions(MarkdownGenerator.ResourceMetadata resource, ApiVersionRequirement? apiVersionRequirement) - => (apiVersionRequirement?.Minimum is null || ApiVersionComparer.Instance.Compare(apiVersionRequirement.Minimum, resource.ApiVersion) >= 0) && - (apiVersionRequirement?.Maximum is null || ApiVersionComparer.Instance.Compare(apiVersionRequirement.Maximum, resource.ApiVersion) <= 0); + => (apiVersionRequirement?.Minimum is null || ApiVersionComparer.Instance.Compare(apiVersionRequirement.Minimum, resource.ApiVersion) <= 0) && + (apiVersionRequirement?.Maximum is null || ApiVersionComparer.Instance.Compare(apiVersionRequirement.Maximum, resource.ApiVersion) >= 0); } public string GetCodeSample(string providerNamespace, CodeSample sample) diff --git a/src/TemplateRefGenerator/Generators/MarkdownGenerator.cs b/src/TemplateRefGenerator/Generators/MarkdownGenerator.cs index 81d4e6bf..c59cb0d6 100644 --- a/src/TemplateRefGenerator/Generators/MarkdownGenerator.cs +++ b/src/TemplateRefGenerator/Generators/MarkdownGenerator.cs @@ -79,15 +79,18 @@ public static IEnumerable> GetOrderedWr => properties.Where(x => !x.Value.Flags.HasFlag(ObjectTypePropertyFlags.ReadOnly)) .OrderBy(x => x.Key, StringComparer.OrdinalIgnoreCase); - private static string GetHeading(ResourceMetadata resource, bool isLatestVersionPage) + private static string GetHeading(ResourceMetadata resource, bool isLatestVersionPage, bool isReadOnly) { var pageTitle = isLatestVersionPage ? resource.ResourceType : $"{resource.ResourceType} {resource.ApiVersion}"; var apiVersion = isLatestVersionPage ? "latest" : resource.ApiVersion; + var description = isReadOnly + ? $"Azure {resource.ResourceType} reference for retrieving the resource. API version {apiVersion}" + : $"Azure {resource.ResourceType} syntax and properties to use in Azure Resource Manager templates for deploying the resource. API version {apiVersion}"; return $""" --- title: {pageTitle} -description: Azure {resource.ResourceType} syntax and properties to use in Azure Resource Manager templates for deploying the resource. API version {apiVersion} +description: {description} zone_pivot_groups: deployment-languages-reference ms.service: azure-resource-manager ms.topic: reference @@ -95,6 +98,9 @@ private static string GetHeading(ResourceMetadata resource, bool isLatestVersion """; } + public static bool IsReadOnlyResource(ResourceType resourceType) + => Utils.HasWritableScope(resourceType, ScopeType.None); + private static string GetApiVersionLinks(GroupedTypes groupedTypes, ResourceMetadata resource, bool isLatestVersionPage) { var pathDepth = resource.UnqualifiedResourceType.Split('/').Length; @@ -278,7 +284,7 @@ private static string GetJsonQuickstartsSection(SamplesFile samples, ResourceMet return sb.ToString(); } - private static string GetBicepZone(ConfigLoader configLoader, RemarksLoader remarksLoader, ResourceMetadata resource, ImmutableArray namedTypes, RemarksFile remarks, int anchorIndex) + private static string GetBicepZone(ConfigLoader configLoader, RemarksLoader remarksLoader, ResourceMetadata resource, ImmutableArray namedTypes, RemarksFile remarks, int anchorIndex, bool isReadOnly) { var sb = new StringBuilder(); sb.Append($""" @@ -286,37 +292,51 @@ private static string GetBicepZone(ConfigLoader configLoader, RemarksLoader rema ## Bicep resource definition +"""); + sb.AppendLine(); + + if (isReadOnly) + { + sb.Append($""" +The {resource.UnqualifiedResourceType} resource type is read-only and cannot be deployed. Existing instances can be retrieved through resource provider operations. + +"""); + } + else + { + sb.Append($""" The {resource.UnqualifiedResourceType} resource type can be deployed with operations that target: """); - if (Utils.HasWritableScope(resource.Type, ScopeType.Tenant)) - { - sb.Append($""" + if (Utils.HasWritableScope(resource.Type, ScopeType.Tenant)) + { + sb.Append($""" * **Tenant** - See {MarkdownUtils.GetLink("tenant deployment commands", "/azure/azure-resource-manager/bicep/deploy-to-tenant")} """); - } + } - if (Utils.HasWritableScope(resource.Type, ScopeType.ManagementGroup)) - { - sb.Append($""" + if (Utils.HasWritableScope(resource.Type, ScopeType.ManagementGroup)) + { + sb.Append($""" * **Management groups** - See {MarkdownUtils.GetLink("management group deployment commands", "/azure/azure-resource-manager/bicep/deploy-to-management-group")} """); - } + } - if (Utils.HasWritableScope(resource.Type, ScopeType.Subscription)) - { - sb.Append($""" + if (Utils.HasWritableScope(resource.Type, ScopeType.Subscription)) + { + sb.Append($""" * **Subscription** - See {MarkdownUtils.GetLink("subscription deployment commands", "/azure/azure-resource-manager/bicep/deploy-to-subscription")} """); - } + } - if (Utils.HasWritableScope(resource.Type, ScopeType.ResourceGroup)) - { - sb.Append($""" + if (Utils.HasWritableScope(resource.Type, ScopeType.ResourceGroup)) + { + sb.Append($""" * **Resource groups** - See {MarkdownUtils.GetLink("resource group deployment commands", "/azure/azure-resource-manager/bicep/deploy-to-resource-group")} """); + } } sb.Append($""" @@ -324,16 +344,20 @@ private static string GetBicepZone(ConfigLoader configLoader, RemarksLoader rema For a list of changed properties in each API version, see {MarkdownUtils.GetLink("change log", $"~/{resource.Provider.ToLowerInvariant()}/change-log/{resource.UnqualifiedResourceType.ToLowerInvariant()}.md")}. -{GenerateOptionalSection("Usage Examples", [ +"""); + sb.AppendLine(); + + if (!isReadOnly) + { + sb.Append(GenerateOptionalSection("Usage Examples", [ GetBicepSamplesSection(remarksLoader, resource, remarks), GetAvmSection(configLoader.GetSamples(), AvmLinkType.Bicep, resource), GetBicepQuickstartsSection(configLoader.GetSamples(), resource), -])} -"""); +])); - var samples = CodeSampleGenerator.GetExample(resource, namedTypes, CodeSampleGenerator.Flavor.Bicep); + var samples = CodeSampleGenerator.GetExample(resource, namedTypes, CodeSampleGenerator.Flavor.Bicep); - sb.Append($""" + sb.Append($""" ## Resource format @@ -345,11 +369,11 @@ private static string GetBicepZone(ConfigLoader configLoader, RemarksLoader rema """); - sb.Append(GetDeploymentRemarks(resource, remarks, DeploymentType.Bicep)); + sb.Append(GetDeploymentRemarks(resource, remarks, DeploymentType.Bicep)); - foreach (var (discObjectType, discSamples) in samples.DiscrimatedSamples) - { - sb.Append($""" + foreach (var (discObjectType, discSamples) in samples.DiscrimatedSamples) + { + sb.Append($""" ### {discObjectType.Name} objects Set the **{discObjectType.Discriminator}** property to specify the type of object. @@ -357,9 +381,9 @@ Set the **{discObjectType.Discriminator}** property to specify the type of objec """); - foreach (var discSample in discSamples) - { - sb.Append($""" + foreach (var discSample in discSamples) + { + sb.Append($""" For **{discSample.DiscriminatorValue}**, use: ```bicep @@ -368,6 +392,7 @@ Set the **{discObjectType.Discriminator}** property to specify the type of objec """); + } } } @@ -410,7 +435,7 @@ private static string GenerateOptionalSection(string heading, string?[] sections } - private static string GetArmTemplateZone(ConfigLoader configLoader, RemarksLoader remarksLoader, ResourceMetadata resource, ImmutableArray namedTypes, RemarksFile remarks, int anchorIndex) + private static string GetArmTemplateZone(ConfigLoader configLoader, RemarksLoader remarksLoader, ResourceMetadata resource, ImmutableArray namedTypes, RemarksFile remarks, int anchorIndex, bool isReadOnly) { var sb = new StringBuilder(); sb.Append($""" @@ -418,52 +443,70 @@ private static string GetArmTemplateZone(ConfigLoader configLoader, RemarksLoade ## ARM template resource definition +"""); + sb.AppendLine(); + + if (isReadOnly) + { + sb.Append($""" +The {resource.UnqualifiedResourceType} resource type is read-only and cannot be deployed. Existing instances can be retrieved through resource provider operations. + +"""); + } + else + { + sb.Append($""" The {resource.UnqualifiedResourceType} resource type can be deployed with operations that target: """); - if (Utils.HasWritableScope(resource.Type, ScopeType.Tenant)) - { - sb.Append($""" + if (Utils.HasWritableScope(resource.Type, ScopeType.Tenant)) + { + sb.Append($""" * **Tenant** - See {MarkdownUtils.GetLink("tenant deployment commands", "/azure/azure-resource-manager/templates/deploy-to-tenant")} """); - } + } - if (Utils.HasWritableScope(resource.Type, ScopeType.ManagementGroup)) - { - sb.Append($""" + if (Utils.HasWritableScope(resource.Type, ScopeType.ManagementGroup)) + { + sb.Append($""" * **Management groups** - See {MarkdownUtils.GetLink("management group deployment commands", "/azure/azure-resource-manager/templates/deploy-to-management-group")} """); - } + } - if (Utils.HasWritableScope(resource.Type, ScopeType.Subscription)) - { - sb.Append($""" + if (Utils.HasWritableScope(resource.Type, ScopeType.Subscription)) + { + sb.Append($""" * **Subscription** - See {MarkdownUtils.GetLink("subscription deployment commands", "/azure/azure-resource-manager/templates/deploy-to-subscription")} """); - } + } - if (Utils.HasWritableScope(resource.Type, ScopeType.ResourceGroup)) - { - sb.Append($""" + if (Utils.HasWritableScope(resource.Type, ScopeType.ResourceGroup)) + { + sb.Append($""" * **Resource groups** - See {MarkdownUtils.GetLink("resource group deployment commands", "/azure/azure-resource-manager/templates/deploy-to-resource-group")} """); + } } sb.Append($""" For a list of changed properties in each API version, see {MarkdownUtils.GetLink("change log", $"~/{resource.Provider.ToLowerInvariant()}/change-log/{resource.UnqualifiedResourceType.ToLowerInvariant()}.md")}. -{GenerateOptionalSection("Usage Examples", [ +"""); + sb.AppendLine(); + + if (!isReadOnly) + { + sb.Append(GenerateOptionalSection("Usage Examples", [ GetArmTemplateSamplesSection(remarksLoader, resource, remarks), GetJsonQuickstartsSection(configLoader.GetSamples(), resource), -])} -"""); +])); - var samples = CodeSampleGenerator.GetExample(resource, namedTypes, CodeSampleGenerator.Flavor.Json); + var samples = CodeSampleGenerator.GetExample(resource, namedTypes, CodeSampleGenerator.Flavor.Json); - sb.Append($""" + sb.Append($""" ## Resource format @@ -475,11 +518,11 @@ private static string GetArmTemplateZone(ConfigLoader configLoader, RemarksLoade """); - sb.Append(GetDeploymentRemarks(resource, remarks, DeploymentType.Json)); + sb.Append(GetDeploymentRemarks(resource, remarks, DeploymentType.Json)); - foreach (var (discObjectType, discSamples) in samples.DiscrimatedSamples) - { - sb.Append($""" + foreach (var (discObjectType, discSamples) in samples.DiscrimatedSamples) + { + sb.Append($""" ### {discObjectType.Name} objects Set the **{discObjectType.Discriminator}** property to specify the type of object. @@ -487,9 +530,9 @@ Set the **{discObjectType.Discriminator}** property to specify the type of objec """); - foreach (var discSample in discSamples) - { - sb.Append($""" + foreach (var discSample in discSamples) + { + sb.Append($""" For **{discSample.DiscriminatorValue}**, use: ```json @@ -498,6 +541,7 @@ Set the **{discObjectType.Discriminator}** property to specify the type of objec """); + } } } @@ -514,7 +558,7 @@ Set the **{discObjectType.Discriminator}** property to specify the type of objec return sb.ToString(); } - private static string GetTerraformZone(ConfigLoader configLoader, RemarksLoader remarksLoader, ResourceMetadata resource, ImmutableArray namedTypes, RemarksFile remarks, int anchorIndex) + private static string GetTerraformZone(ConfigLoader configLoader, RemarksLoader remarksLoader, ResourceMetadata resource, ImmutableArray namedTypes, RemarksFile remarks, int anchorIndex, bool isReadOnly) { var sb = new StringBuilder(); sb.Append($""" @@ -522,52 +566,70 @@ private static string GetTerraformZone(ConfigLoader configLoader, RemarksLoader ## Terraform (AzAPI provider) resource definition +"""); + sb.AppendLine(); + + if (isReadOnly) + { + sb.Append($""" +The {resource.UnqualifiedResourceType} resource type is read-only and cannot be deployed. Existing instances can be retrieved through resource provider operations. + +"""); + } + else + { + sb.Append($""" The {resource.UnqualifiedResourceType} resource type can be deployed with operations that target: """); - if (Utils.HasWritableScope(resource.Type, ScopeType.Tenant)) - { - sb.Append($""" + if (Utils.HasWritableScope(resource.Type, ScopeType.Tenant)) + { + sb.Append($""" * **Tenant** """); - } + } - if (Utils.HasWritableScope(resource.Type, ScopeType.ManagementGroup)) - { - sb.Append($""" + if (Utils.HasWritableScope(resource.Type, ScopeType.ManagementGroup)) + { + sb.Append($""" * **Management groups** """); - } + } - if (Utils.HasWritableScope(resource.Type, ScopeType.Subscription)) - { - sb.Append($""" + if (Utils.HasWritableScope(resource.Type, ScopeType.Subscription)) + { + sb.Append($""" * **Subscription** """); - } + } - if (Utils.HasWritableScope(resource.Type, ScopeType.ResourceGroup)) - { - sb.Append($""" + if (Utils.HasWritableScope(resource.Type, ScopeType.ResourceGroup)) + { + sb.Append($""" * **Resource groups** """); + } } sb.Append($""" For a list of changed properties in each API version, see {MarkdownUtils.GetLink("change log", $"~/{resource.Provider.ToLowerInvariant()}/change-log/{resource.UnqualifiedResourceType.ToLowerInvariant()}.md")}. -{GenerateOptionalSection("Usage Examples", [ +"""); + sb.AppendLine(); + + if (!isReadOnly) + { + sb.Append(GenerateOptionalSection("Usage Examples", [ GetTerraformSamplesSection(remarksLoader, resource, remarks), GetAvmSection(configLoader.GetSamples(), AvmLinkType.Terraform, resource), -])} -"""); +])); - var samples = CodeSampleGenerator.GetExample(resource, namedTypes, CodeSampleGenerator.Flavor.Terraform); + var samples = CodeSampleGenerator.GetExample(resource, namedTypes, CodeSampleGenerator.Flavor.Terraform); - sb.Append($""" + sb.Append($""" ## Resource format @@ -579,11 +641,11 @@ private static string GetTerraformZone(ConfigLoader configLoader, RemarksLoader """); - sb.Append(GetDeploymentRemarks(resource, remarks, DeploymentType.Terraform)); + sb.Append(GetDeploymentRemarks(resource, remarks, DeploymentType.Terraform)); - foreach (var (discObjectType, discSamples) in samples.DiscrimatedSamples) - { - sb.Append($""" + foreach (var (discObjectType, discSamples) in samples.DiscrimatedSamples) + { + sb.Append($""" ### {discObjectType.Name} objects Set the **{discObjectType.Discriminator}** property to specify the type of object. @@ -591,9 +653,9 @@ Set the **{discObjectType.Discriminator}** property to specify the type of objec """); - foreach (var discSample in discSamples) - { - sb.Append($""" + foreach (var discSample in discSamples) + { + sb.Append($""" For **{discSample.DiscriminatorValue}**, use: ```terraform @@ -602,6 +664,7 @@ Set the **{discObjectType.Discriminator}** property to specify the type of objec """); + } } } @@ -1073,17 +1136,18 @@ public static string GenerateMarkdown(GroupedTypes groupedTypes, ResourceType re var namedTypes = GetNamedTypes(resource); var remarks = remarksLoader.GetRemarks(providerNamespace); + var isReadOnly = IsReadOnlyResource(resource.Type); var pageTitle = isLatestVersionPage ? $"{resource.Provider} {resource.UnqualifiedResourceType}" : $"{resource.Provider} {resource.UnqualifiedResourceType} {resource.ApiVersion}"; return $""" -{GetHeading(resource, isLatestVersionPage)} +{GetHeading(resource, isLatestVersionPage, isReadOnly)} # {pageTitle} {GetApiVersionLinks(groupedTypes, resource, isLatestVersionPage)} {GetResourceRemarks(resource, remarks)} -{GetBicepZone(configLoader, remarksLoader, resource, namedTypes, remarks, 0)} -{GetArmTemplateZone(configLoader, remarksLoader, resource, namedTypes, remarks, 1)} -{GetTerraformZone(configLoader, remarksLoader, resource, namedTypes, remarks, 2)} +{GetBicepZone(configLoader, remarksLoader, resource, namedTypes, remarks, 0, isReadOnly)} +{GetArmTemplateZone(configLoader, remarksLoader, resource, namedTypes, remarks, 1, isReadOnly)} +{GetTerraformZone(configLoader, remarksLoader, resource, namedTypes, remarks, 2, isReadOnly)} """; }