Skip to content

Commit

Permalink
feat: Update PE implementation in alignment to latest schema (2) (#1089)
Browse files Browse the repository at this point in the history
## Description


Follow up to #1070
- Applied latest PE schema accross all modules
- Ensured that all modules deploy at least 2 PEs to wnsure there is no
concurrency issue
- Removed several dedicated `private-endpoint` tests cases if already
implemented in max

## Pipeline Reference
| Pipeline |
| - |

[![avm.res.desktop-virtualization.host-pool](https://github.com/Azure/bicep-registry-modules/actions/workflows/avm.res.desktop-virtualization.host-pool.yml/badge.svg?branch=feat%2Fpe-adjustments-962-946-1042&event=workflow_dispatch)](https://github.com/Azure/bicep-registry-modules/actions/workflows/avm.res.desktop-virtualization.host-pool.yml)

[![avm.res.desktop-virtualization.workspace](https://github.com/Azure/bicep-registry-modules/actions/workflows/avm.res.desktop-virtualization.workspace.yml/badge.svg?branch=feat%2Fpe-adjustments-962-946-1042&event=workflow_dispatch)](https://github.com/Azure/bicep-registry-modules/actions/workflows/avm.res.desktop-virtualization.workspace.yml)

[![avm.res.document-db.database-account](https://github.com/Azure/bicep-registry-modules/actions/workflows/avm.res.document-db.database-account.yml/badge.svg?branch=feat%2Fpe-adjustments-962-946-1042&event=workflow_dispatch)](https://github.com/Azure/bicep-registry-modules/actions/workflows/avm.res.document-db.database-account.yml)

[![avm.res.event-grid.domain](https://github.com/Azure/bicep-registry-modules/actions/workflows/avm.res.event-grid.domain.yml/badge.svg?branch=feat%2Fpe-adjustments-962-946-1042&event=workflow_dispatch)](https://github.com/Azure/bicep-registry-modules/actions/workflows/avm.res.event-grid.domain.yml)

[![avm.res.event-grid.topic](https://github.com/Azure/bicep-registry-modules/actions/workflows/avm.res.event-grid.topic.yml/badge.svg?branch=feat%2Fpe-adjustments-962-946-1042&event=workflow_dispatch)](https://github.com/Azure/bicep-registry-modules/actions/workflows/avm.res.event-grid.topic.yml)

## Type of Change

<!-- Use the check-boxes [x] on the options that are relevant. -->

- [ ] Update to CI Environment or utlities (Non-module effecting
changes)
- [x] Azure Verified Module updates:
- [x] Bugfix containing backwards compatible bug fixes, and I have NOT
bumped the MAJOR or MINOR version in `version.json`:
- [ ] Someone has opened a bug report issue, and I have included "Closes
#{bug_report_issue_number}" in the PR description.
- [ ] The bug was found by the module author, and no one has opened an
issue to report it yet.
- [ ] Feature update backwards compatible feature updates, and I have
bumped the MINOR version in `version.json`.
- [ ] Breaking changes and I have bumped the MAJOR version in
`version.json`.
  - [x] Update to documentation

---------

Co-authored-by: Sebastian Gräf <[email protected]>
Co-authored-by: Kris Baranek <[email protected]>
  • Loading branch information
3 people authored Mar 7, 2024
1 parent 4a85c7d commit 4719a59
Show file tree
Hide file tree
Showing 43 changed files with 1,404 additions and 1,455 deletions.
109 changes: 29 additions & 80 deletions avm/res/desktop-virtualization/host-pool/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@ The following section provides usage examples for the module, which were used to
- [Using only defaults](#example-1-using-only-defaults)
- [Using large parameter set](#example-2-using-large-parameter-set)
- [Using Private Endpoints](#example-3-using-private-endpoints)
- [WAF-aligned](#example-4-waf-aligned)
- [WAF-aligned](#example-3-waf-aligned)

### Example 1: _Using only defaults_

Expand Down Expand Up @@ -148,6 +147,12 @@ module hostPool 'br/public:avm/res/desktop-virtualization/host-pool:<version>' =
]
subnetResourceId: '<subnetResourceId>'
}
{
privateDnsZoneResourceIds: [
'<privateDNSZoneResourceId>'
]
subnetResourceId: '<subnetResourceId>'
}
]
publicNetworkAccess: 'Disabled'
roleAssignments: [
Expand Down Expand Up @@ -278,6 +283,12 @@ module hostPool 'br/public:avm/res/desktop-virtualization/host-pool:<version>' =
},
"privateEndpoints": {
"value": [
{
"privateDnsZoneResourceIds": [
"<privateDNSZoneResourceId>"
],
"subnetResourceId": "<subnetResourceId>"
},
{
"privateDnsZoneResourceIds": [
"<privateDNSZoneResourceId>"
Expand Down Expand Up @@ -341,77 +352,7 @@ module hostPool 'br/public:avm/res/desktop-virtualization/host-pool:<version>' =
</details>
<p>

### Example 3: _Using Private Endpoints_

This instance deploys the module with Private Endpoints.


<details>

<summary>via Bicep module</summary>

```bicep
module hostPool 'br/public:avm/res/desktop-virtualization/host-pool:<version>' = {
name: '${uniqueString(deployment().name, resourceLocation)}-test-dvhppe'
params: {
// Required parameters
name: 'dvhppe001'
// Non-required parameters
location: '<location>'
privateEndpoints: [
{
privateDnsZoneResourceIds: [
'<privateDNSZoneResourceId>'
]
subnetResourceId: '<subnetResourceId>'
}
]
publicNetworkAccess: 'Disabled'
}
}
```

</details>
<p>

<details>

<summary>via JSON Parameter file</summary>

```json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
// Required parameters
"name": {
"value": "dvhppe001"
},
// Non-required parameters
"location": {
"value": "<location>"
},
"privateEndpoints": {
"value": [
{
"privateDnsZoneResourceIds": [
"<privateDNSZoneResourceId>"
],
"subnetResourceId": "<subnetResourceId>"
}
]
},
"publicNetworkAccess": {
"value": "Disabled"
}
}
}
```

</details>
<p>

### Example 4: _WAF-aligned_
### Example 3: _WAF-aligned_

This instance deploys the module in alignment with the best-practices of the Azure Well-Architected Framework.

Expand Down Expand Up @@ -836,14 +777,15 @@ Configuration details for private endpoints.
| [`customNetworkInterfaceName`](#parameter-privateendpointscustomnetworkinterfacename) | string | The custom name of the network interface attached to the private endpoint. |
| [`enableTelemetry`](#parameter-privateendpointsenabletelemetry) | bool | Enable/Disable usage telemetry for module. |
| [`ipConfigurations`](#parameter-privateendpointsipconfigurations) | array | A list of IP configurations of the private endpoint. This will be used to map to the First Party Service endpoints. |
| [`isManualConnection`](#parameter-privateendpointsismanualconnection) | bool | If Manual Private Link Connection is required. |
| [`location`](#parameter-privateendpointslocation) | string | The location to deploy the private endpoint to. |
| [`lock`](#parameter-privateendpointslock) | object | Specify the type of lock. |
| [`manualPrivateLinkServiceConnections`](#parameter-privateendpointsmanualprivatelinkserviceconnections) | array | Manual PrivateLink Service Connections. |
| [`manualConnectionRequestMessage`](#parameter-privateendpointsmanualconnectionrequestmessage) | string | A message passed to the owner of the remote resource with the manual connection request. |
| [`name`](#parameter-privateendpointsname) | string | The name of the private endpoint. |
| [`privateDnsZoneGroupName`](#parameter-privateendpointsprivatednszonegroupname) | string | The name of the private DNS zone group to create if `privateDnsZoneResourceIds` were provided. |
| [`privateDnsZoneResourceIds`](#parameter-privateendpointsprivatednszoneresourceids) | array | The private DNS zone groups to associate the private endpoint with. A DNS zone group can support up to 5 DNS zones. |
| [`roleAssignments`](#parameter-privateendpointsroleassignments) | array | Array of role assignments to create. |
| [`service`](#parameter-privateendpointsservice) | string | The service (sub-) type to deploy the private endpoint for. For example "connection". |
| [`service`](#parameter-privateendpointsservice) | string | The subresource to deploy the private endpoint for. For example "vault", "mysqlServer" or "dataFactory". |
| [`tags`](#parameter-privateendpointstags) | object | Tags to be applied on all resources/resource groups in this deployment. |

### Parameter: `privateEndpoints.subnetResourceId`
Expand Down Expand Up @@ -959,6 +901,13 @@ A private IP address obtained from the private endpoint's subnet.
- Required: Yes
- Type: string

### Parameter: `privateEndpoints.isManualConnection`

If Manual Private Link Connection is required.

- Required: No
- Type: bool

### Parameter: `privateEndpoints.location`

The location to deploy the private endpoint to.
Expand Down Expand Up @@ -1002,12 +951,12 @@ Specify the name of lock.
- Required: No
- Type: string

### Parameter: `privateEndpoints.manualPrivateLinkServiceConnections`
### Parameter: `privateEndpoints.manualConnectionRequestMessage`

Manual PrivateLink Service Connections.
A message passed to the owner of the remote resource with the manual connection request.

- Required: No
- Type: array
- Type: string

### Parameter: `privateEndpoints.name`

Expand Down Expand Up @@ -1121,7 +1070,7 @@ The principal type of the assigned principal ID.

### Parameter: `privateEndpoints.service`

The service (sub-) type to deploy the private endpoint for. For example "connection".
The subresource to deploy the private endpoint for. For example "vault", "mysqlServer" or "dataFactory".

- Required: No
- Type: string
Expand Down Expand Up @@ -1352,7 +1301,7 @@ This section gives you an overview of all local-referenced module files (i.e., o

| Reference | Type |
| :-- | :-- |
| `br/public:avm-res-network-privateendpoint:0.1.1` | Remote reference |
| `br/public:avm/res/network/private-endpoint:0.4.0` | Remote reference |

## Data Collection

Expand Down
46 changes: 34 additions & 12 deletions avm/res/desktop-virtualization/host-pool/main.bicep
Original file line number Diff line number Diff line change
Expand Up @@ -196,22 +196,41 @@ resource hostPool 'Microsoft.DesktopVirtualization/hostPools@2023-09-05' = {
}
}

module hostPool_privateEndpoints 'br/public:avm-res-network-privateendpoint:0.1.1' = [for (privateEndpoint, index) in (privateEndpoints ?? []): {
module hostPool_privateEndpoints 'br/public:avm/res/network/private-endpoint:0.4.0' = [for (privateEndpoint, index) in (privateEndpoints ?? []): {
name: '${uniqueString(deployment().name, location)}-HostPool-PrivateEndpoint-${index}'
params: {
groupIds: [
privateEndpoint.?service ?? 'connection'
]
name: privateEndpoint.?name ?? 'pep-${last(split(hostPool.id, '/'))}-${privateEndpoint.?service ?? 'connection'}-${index}'
serviceResourceId: hostPool.id
privateLinkServiceConnections: [
{
name: privateEndpoint.?privateLinkServiceConnectionName ?? '${last(split(hostPool.id, '/'))}-${privateEndpoint.?service ?? 'connection'}-${index}'
properties: {
privateLinkServiceId: hostPool.id
groupIds: [
privateEndpoint.?service ?? 'connection'
]
}
}
]
manualPrivateLinkServiceConnections: privateEndpoint.?manualPrivateLinkServiceConnections == true ? [
{
name: privateEndpoint.?privateLinkServiceConnectionName ?? '${last(split(hostPool.id, '/'))}-${privateEndpoint.?service ?? 'connection'}-${index}'
properties: {
privateLinkServiceId: hostPool.id
groupIds: [
privateEndpoint.?service ?? 'connection'
]
requestMessage: privateEndpoint.?manualConnectionRequestMessage ?? 'Manual approval required.'
}
}
] : null
subnetResourceId: privateEndpoint.subnetResourceId
enableTelemetry: privateEndpoint.?enableTelemetry ?? enableTelemetry
location: privateEndpoint.?location ?? reference(split(privateEndpoint.subnetResourceId, '/subnets/')[0], '2020-06-01', 'Full').location
lock: privateEndpoint.?lock ?? lock
enableTelemetry: privateEndpoint.?enableTelemetry ?? enableTelemetry
privateDnsZoneGroupName: privateEndpoint.?privateDnsZoneGroupName
privateDnsZoneResourceIds: privateEndpoint.?privateDnsZoneResourceIds
roleAssignments: privateEndpoint.?roleAssignments
tags: privateEndpoint.?tags ?? tags
manualPrivateLinkServiceConnections: privateEndpoint.?manualPrivateLinkServiceConnections
customDnsConfigs: privateEndpoint.?customDnsConfigs
ipConfigurations: privateEndpoint.?ipConfigurations
applicationSecurityGroupResourceIds: privateEndpoint.?applicationSecurityGroupResourceIds
Expand Down Expand Up @@ -335,14 +354,13 @@ type roleAssignmentType = {
}[]?

type privateEndpointType = {

@sys.description('Optional. The name of the private endpoint.')
name: string?

@sys.description('Optional. The location to deploy the private endpoint to.')
location: string?

@sys.description('Optional. The service (sub-) type to deploy the private endpoint for. For example "connection".')
@sys.description('Optional. The subresource to deploy the private endpoint for. For example "vault", "mysqlServer" or "dataFactory".')
service: string?

@sys.description('Required. Resource ID of the subnet where the endpoint needs to be created.')
Expand All @@ -354,6 +372,13 @@ type privateEndpointType = {
@sys.description('Optional. The private DNS zone groups to associate the private endpoint with. A DNS zone group can support up to 5 DNS zones.')
privateDnsZoneResourceIds: string[]?

@sys.description('Optional. If Manual Private Link Connection is required.')
isManualConnection: bool?

@sys.description('Optional. A message passed to the owner of the remote resource with the manual connection request.')
@maxLength(140)
manualConnectionRequestMessage: string?

@sys.description('Optional. Custom DNS configurations.')
customDnsConfigs: {
@sys.description('Required. Fqdn that resolves to private endpoint IP address.')
Expand Down Expand Up @@ -396,9 +421,6 @@ type privateEndpointType = {
@sys.description('Optional. Tags to be applied on all resources/resource groups in this deployment.')
tags: object?

@sys.description('Optional. Manual PrivateLink Service Connections.')
manualPrivateLinkServiceConnections: array?

@sys.description('Optional. Enable/Disable usage telemetry for module.')
enableTelemetry: bool?
}[]?
Expand Down
Loading

0 comments on commit 4719a59

Please sign in to comment.