From 8c391b9f0d3a73a0d46c37a93938f781c92c0a1f Mon Sep 17 00:00:00 2001 From: Ahmad Abdalla Date: Fri, 18 Nov 2022 17:00:28 +1100 Subject: [PATCH 1/2] updated modules --- .../.test/common/dependencies.bicep | 66 ++++++++++++++ .../.test/common/deploy.test.bicep | 88 +++++++++++++++++++ .../.test/min.parameters.json | 28 ------ .../.test/min/dependencies.bicep | 55 ++++++++++++ .../.test/min/deploy.test.bicep | 61 +++++++++++++ .../privateLinkServices/.test/parameters.json | 66 -------------- 6 files changed, 270 insertions(+), 94 deletions(-) create mode 100644 modules/Microsoft.Network/privateLinkServices/.test/common/dependencies.bicep create mode 100644 modules/Microsoft.Network/privateLinkServices/.test/common/deploy.test.bicep delete mode 100644 modules/Microsoft.Network/privateLinkServices/.test/min.parameters.json create mode 100644 modules/Microsoft.Network/privateLinkServices/.test/min/dependencies.bicep create mode 100644 modules/Microsoft.Network/privateLinkServices/.test/min/deploy.test.bicep delete mode 100644 modules/Microsoft.Network/privateLinkServices/.test/parameters.json diff --git a/modules/Microsoft.Network/privateLinkServices/.test/common/dependencies.bicep b/modules/Microsoft.Network/privateLinkServices/.test/common/dependencies.bicep new file mode 100644 index 0000000000..971e8062cb --- /dev/null +++ b/modules/Microsoft.Network/privateLinkServices/.test/common/dependencies.bicep @@ -0,0 +1,66 @@ +@description('Optional. The location to deploy to.') +param location string = resourceGroup().location + +@description('Required. The name of the Virtual Network to create.') +param virtualNetworkName string + +@description('Required. The name of the Load Balancer to create.') +param loadBalancerName string + +@description('Required. The name of the Managed Identity to create.') +param managedIdentityName string + +resource virtualNetwork 'Microsoft.Network/virtualNetworks@2022-01-01' = { + name: virtualNetworkName + location: location + properties: { + addressSpace: { + addressPrefixes: [ + '10.0.0.0/24' + ] + } + subnets: [ + { + name: 'defaultSubnet' + properties: { + addressPrefix: '10.0.0.0/24' + privateLinkServiceNetworkPolicies: 'Disabled' + } + } + ] + } +} + +resource loadBalancer 'Microsoft.Network/loadBalancers@2022-01-01' = { + name: loadBalancerName + location: location + sku: { + name: 'Standard' + } + properties: { + frontendIPConfigurations: [ + { + name: 'frontendIPConfiguration' + properties: { + subnet: { + id: virtualNetwork.properties.subnets[0].id + } + } + } + ] + } +} + +resource managedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = { + name: managedIdentityName + location: location +} + +@description('The resource ID of the created Virtual Network Subnet.') +output subnetResourceId string = virtualNetwork.properties.subnets[0].id + +@description('The principal ID of the created Managed Identity.') +output managedIdentityPrincipalId string = managedIdentity.properties.principalId + +@description('The resource ID of the created Load Balancer Frontend IP Configuration.') +output loadBalancerFrontendIpConfigurationResourceId string = loadBalancer.properties.frontendIPConfigurations[0].id diff --git a/modules/Microsoft.Network/privateLinkServices/.test/common/deploy.test.bicep b/modules/Microsoft.Network/privateLinkServices/.test/common/deploy.test.bicep new file mode 100644 index 0000000000..6fb568c3f4 --- /dev/null +++ b/modules/Microsoft.Network/privateLinkServices/.test/common/deploy.test.bicep @@ -0,0 +1,88 @@ +targetScope = 'subscription' + +// ========== // +// Parameters // +// ========== // +@description('Optional. The name of the resource group to deploy for testing purposes.') +@maxLength(90) +param resourceGroupName string = 'ms.network.privatelinkservices-${serviceShort}-rg' + +@description('Optional. The location to deploy resources to.') +param location string = deployment().location + +@description('Optional. A short identifier for the kind of deployment. Should be kept short to not run into resource-name length-constraints.') +param serviceShort string = 'nplscom' + +// =========== // +// Deployments // +// =========== // + +// General resources +// ================= +resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' = { + name: resourceGroupName + location: location +} + +module resourceGroupResources 'dependencies.bicep' = { + scope: resourceGroup + name: '${uniqueString(deployment().name, location)}-paramNested' + params: { + virtualNetworkName: 'dep-<>-vnet-${serviceShort}' + loadBalancerName: 'dep-<>-lb-${serviceShort}' + managedIdentityName: 'dep-<>-msi-${serviceShort}' + } +} + +// ============== // +// Test Execution // +// ============== // + +module testDeployment '../../deploy.bicep' = { + scope: resourceGroup + name: '${uniqueString(deployment().name)}-test-${serviceShort}' + params: { + name: '<>${serviceShort}001' + lock: 'CanNotDelete' + ipConfigurations: [ + { + name: '${serviceShort}01' + properties: { + primary: true + privateIPAllocationMethod: 'Dynamic' + subnet: { + id: resourceGroupResources.outputs.subnetResourceId + } + } + } + ] + loadBalancerFrontendIpConfigurations: [ + { + id: resourceGroupResources.outputs.loadBalancerFrontendIpConfigurationResourceId + } + ] + autoApproval: { + subscriptions: [ + '*' + ] + } + visibility: { + subscriptions: [ + subscription().subscriptionId + ] + } + enableProxyProtocol: true + fqdns: [ + '${serviceShort}.plsfqdn01.azure.privatelinkservice' + '${serviceShort}.plsfqdn02.azure.privatelinkservice' + ] + roleAssignments: [ + { + principalIds: [ + resourceGroupResources.outputs.managedIdentityPrincipalId + ] + roleDefinitionIdOrName: 'Reader' + } + ] + } +} diff --git a/modules/Microsoft.Network/privateLinkServices/.test/min.parameters.json b/modules/Microsoft.Network/privateLinkServices/.test/min.parameters.json deleted file mode 100644 index 95a5a5ccd7..0000000000 --- a/modules/Microsoft.Network/privateLinkServices/.test/min.parameters.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "name": { - "value": "<>-az-pls-min-001" - }, - "ipConfigurations": { - "value": [ - { - "name": "minpls01", - "properties": { - "subnet": { - "id": "/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.Network/virtualNetworks/adp-<>-az-vnet-x-001/subnets/<>-az-subnet-x-009" - } - } - } - ] - }, - "loadBalancerFrontendIpConfigurations": { - "value": [ - { - "id": "/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.Network/loadBalancers/adp-<>-az-lb-pls-001/frontendIPConfigurations/frontend-pls-min" - } - ] - } - } -} diff --git a/modules/Microsoft.Network/privateLinkServices/.test/min/dependencies.bicep b/modules/Microsoft.Network/privateLinkServices/.test/min/dependencies.bicep new file mode 100644 index 0000000000..f1294291f9 --- /dev/null +++ b/modules/Microsoft.Network/privateLinkServices/.test/min/dependencies.bicep @@ -0,0 +1,55 @@ +@description('Optional. The location to deploy to.') +param location string = resourceGroup().location + +@description('Required. The name of the Virtual Network to create.') +param virtualNetworkName string + +@description('Required. The name of the Load Balancer to create.') +param loadBalancerName string + +resource virtualNetwork 'Microsoft.Network/virtualNetworks@2022-01-01' = { + name: virtualNetworkName + location: location + properties: { + addressSpace: { + addressPrefixes: [ + '10.0.0.0/24' + ] + } + subnets: [ + { + name: 'defaultSubnet' + properties: { + addressPrefix: '10.0.0.0/24' + privateLinkServiceNetworkPolicies: 'Disabled' + } + } + ] + } +} + +resource loadBalancer 'Microsoft.Network/loadBalancers@2022-01-01' = { + name: loadBalancerName + location: location + sku: { + name: 'Standard' + } + properties: { + frontendIPConfigurations: [ + { + name: 'frontendIPConfiguration' + properties: { + subnet: { + id: virtualNetwork.properties.subnets[0].id + } + } + } + ] + } +} + +@description('The resource ID of the created Virtual Network Subnet.') +output subnetResourceId string = virtualNetwork.properties.subnets[0].id + +@description('The resource ID of the created Load Balancer Frontend IP Configuration.') +output loadBalancerFrontendIpConfigurationResourceId string = loadBalancer.properties.frontendIPConfigurations[0].id diff --git a/modules/Microsoft.Network/privateLinkServices/.test/min/deploy.test.bicep b/modules/Microsoft.Network/privateLinkServices/.test/min/deploy.test.bicep new file mode 100644 index 0000000000..75d593af63 --- /dev/null +++ b/modules/Microsoft.Network/privateLinkServices/.test/min/deploy.test.bicep @@ -0,0 +1,61 @@ +targetScope = 'subscription' + +// ========== // +// Parameters // +// ========== // +@description('Optional. The name of the resource group to deploy for testing purposes.') +@maxLength(90) +param resourceGroupName string = 'ms.network.privatelinkservices-${serviceShort}-rg' + +@description('Optional. The location to deploy resources to.') +param location string = deployment().location + +@description('Optional. A short identifier for the kind of deployment. Should be kept short to not run into resource-name length-constraints.') +param serviceShort string = 'nplsmin' + +// =========== // +// Deployments // +// =========== // + +// General resources +// ================= +resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01' = { + name: resourceGroupName + location: location +} + +module resourceGroupResources 'dependencies.bicep' = { + scope: resourceGroup + name: '${uniqueString(deployment().name, location)}-paramNested' + params: { + virtualNetworkName: 'dep-<>-vnet-${serviceShort}' + loadBalancerName: 'dep-<>-lb-${serviceShort}' + } +} + +// ============== // +// Test Execution // +// ============== // + +module testDeployment '../../deploy.bicep' = { + scope: resourceGroup + name: '${uniqueString(deployment().name)}-test-${serviceShort}' + params: { + name: '<>${serviceShort}001' + ipConfigurations: [ + { + name: '${serviceShort}01' + properties: { + subnet: { + id: resourceGroupResources.outputs.subnetResourceId + } + } + } + ] + loadBalancerFrontendIpConfigurations: [ + { + id: resourceGroupResources.outputs.loadBalancerFrontendIpConfigurationResourceId + } + ] + } +} diff --git a/modules/Microsoft.Network/privateLinkServices/.test/parameters.json b/modules/Microsoft.Network/privateLinkServices/.test/parameters.json deleted file mode 100644 index 8390d3e28c..0000000000 --- a/modules/Microsoft.Network/privateLinkServices/.test/parameters.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "name": { - "value": "<>-az-pls-001" - }, - "lock": { - "value": "CanNotDelete" - }, - "ipConfigurations": { - "value": [ - { - "name": "pls01", - "properties": { - "primary": true, - "privateIPAllocationMethod": "Dynamic", - "subnet": { - "id": "/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.Network/virtualNetworks/adp-<>-az-vnet-x-001/subnets/<>-az-subnet-x-009" - } - } - } - ] - }, - "loadBalancerFrontendIpConfigurations": { - "value": [ - { - "id": "/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.Network/loadBalancers/adp-<>-az-lb-pls-001/frontendIPConfigurations/frontend-pls" - } - ] - }, - "autoApproval": { - "value": { - "subscriptions": [ - "*" - ] - } - }, - "visibility": { - "value": { - "subscriptions": [ - "<>" - ] - } - }, - "enableProxyProtocol": { - "value": true - }, - "fqdns": { - "value": [ - "<>.plsfqdn01.azure.privatelinkservice", - "<>.plsfqdn02.azure.privatelinkserivce" - ] - }, - "roleAssignments": { - "value": [ - { - "roleDefinitionIdOrName": "Reader", - "principalIds": [ - "<>" - ] - } - ] - } - } -} From ffc115952a7ba6d0c2fefc301ac733a245d26eea Mon Sep 17 00:00:00 2001 From: Ahmad Abdalla <28486158+ahmadabdalla@users.noreply.github.com> Date: Fri, 18 Nov 2022 17:06:14 +1100 Subject: [PATCH 2/2] ugit commit --amend --reset-authorpdated pipeline and readme --- .../ms.network.privatelinkservices.yml | 3 +- .../privateLinkServices/readme.md | 168 +++++++++--------- 2 files changed, 85 insertions(+), 86 deletions(-) diff --git a/.github/workflows/ms.network.privatelinkservices.yml b/.github/workflows/ms.network.privatelinkservices.yml index e95d4622ac..f46c7a8b62 100644 --- a/.github/workflows/ms.network.privatelinkservices.yml +++ b/.github/workflows/ms.network.privatelinkservices.yml @@ -106,8 +106,7 @@ jobs: - name: 'Using parameter file [${{ matrix.moduleTestFilePaths }}]' uses: ./.github/actions/templates/validateModuleDeployment with: - templateFilePath: '${{ env.modulePath }}/deploy.bicep' - parameterFilePath: '${{ env.modulePath }}/${{ matrix.moduleTestFilePaths }}' + templateFilePath: '${{ env.modulePath }}/${{ matrix.moduleTestFilePaths }}' location: '${{ env.location }}' resourceGroupName: '${{ env.resourceGroupName }}' subscriptionId: '${{ secrets.ARM_SUBSCRIPTION_ID }}' diff --git a/modules/Microsoft.Network/privateLinkServices/readme.md b/modules/Microsoft.Network/privateLinkServices/readme.md index 71c0f2c6b0..f157a530af 100644 --- a/modules/Microsoft.Network/privateLinkServices/readme.md +++ b/modules/Microsoft.Network/privateLinkServices/readme.md @@ -433,7 +433,7 @@ The following module usage examples are retrieved from the content of the files >**Note**: Each example lists all the required parameters first, followed by the rest - each in alphabetical order. -

Example 1: Min

+

Example 1: Common

@@ -441,26 +441,52 @@ The following module usage examples are retrieved from the content of the files ```bicep module privateLinkServices './Microsoft.Network/privateLinkServices/deploy.bicep' = { - name: '${uniqueString(deployment().name)}-PrivateLinkServices' + name: '${uniqueString(deployment().name)}-test-nplscom' params: { // Required parameters - name: '<>-az-pls-min-001' + name: '<>nplscom001' // Non-required parameters + autoApproval: { + subscriptions: [ + '*' + ] + } + enableProxyProtocol: true + fqdns: [ + 'nplscom.plsfqdn01.azure.privatelinkservice' + 'nplscom.plsfqdn02.azure.privatelinkservice' + ] ipConfigurations: [ { - name: 'minpls01' + name: 'nplscom01' properties: { + primary: true + privateIPAllocationMethod: 'Dynamic' subnet: { - id: '/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.Network/virtualNetworks/adp-<>-az-vnet-x-001/subnets/<>-az-subnet-x-009' + id: '' } } } ] loadBalancerFrontendIpConfigurations: [ { - id: '/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.Network/loadBalancers/adp-<>-az-lb-pls-001/frontendIPConfigurations/frontend-pls-min' + id: '' + } + ] + lock: 'CanNotDelete' + roleAssignments: [ + { + principalIds: [ + '' + ] + roleDefinitionIdOrName: 'Reader' } ] + visibility: { + subscriptions: [ + '' + ] + } } } ``` @@ -479,16 +505,34 @@ module privateLinkServices './Microsoft.Network/privateLinkServices/deploy.bicep "parameters": { // Required parameters "name": { - "value": "<>-az-pls-min-001" + "value": "<>nplscom001" }, // Non-required parameters + "autoApproval": { + "value": { + "subscriptions": [ + "*" + ] + } + }, + "enableProxyProtocol": { + "value": true + }, + "fqdns": { + "value": [ + "nplscom.plsfqdn01.azure.privatelinkservice", + "nplscom.plsfqdn02.azure.privatelinkservice" + ] + }, "ipConfigurations": { "value": [ { - "name": "minpls01", + "name": "nplscom01", "properties": { + "primary": true, + "privateIPAllocationMethod": "Dynamic", "subnet": { - "id": "/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.Network/virtualNetworks/adp-<>-az-vnet-x-001/subnets/<>-az-subnet-x-009" + "id": "" } } } @@ -497,9 +541,29 @@ module privateLinkServices './Microsoft.Network/privateLinkServices/deploy.bicep "loadBalancerFrontendIpConfigurations": { "value": [ { - "id": "/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.Network/loadBalancers/adp-<>-az-lb-pls-001/frontendIPConfigurations/frontend-pls-min" + "id": "" + } + ] + }, + "lock": { + "value": "CanNotDelete" + }, + "roleAssignments": { + "value": [ + { + "principalIds": [ + "" + ], + "roleDefinitionIdOrName": "Reader" } ] + }, + "visibility": { + "value": { + "subscriptions": [ + "" + ] + } } } } @@ -508,7 +572,7 @@ module privateLinkServices './Microsoft.Network/privateLinkServices/deploy.bicep

-

Example 2: Parameters

+

Example 2: Min

@@ -516,52 +580,26 @@ module privateLinkServices './Microsoft.Network/privateLinkServices/deploy.bicep ```bicep module privateLinkServices './Microsoft.Network/privateLinkServices/deploy.bicep' = { - name: '${uniqueString(deployment().name)}-PrivateLinkServices' + name: '${uniqueString(deployment().name)}-test-nplsmin' params: { // Required parameters - name: '<>-az-pls-001' + name: '<>nplsmin001' // Non-required parameters - autoApproval: { - subscriptions: [ - '*' - ] - } - enableProxyProtocol: true - fqdns: [ - '<>.plsfqdn01.azure.privatelinkservice' - '<>.plsfqdn02.azure.privatelinkserivce' - ] ipConfigurations: [ { - name: 'pls01' + name: 'nplsmin01' properties: { - primary: true - privateIPAllocationMethod: 'Dynamic' subnet: { - id: '/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.Network/virtualNetworks/adp-<>-az-vnet-x-001/subnets/<>-az-subnet-x-009' + id: '' } } } ] loadBalancerFrontendIpConfigurations: [ { - id: '/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.Network/loadBalancers/adp-<>-az-lb-pls-001/frontendIPConfigurations/frontend-pls' - } - ] - lock: 'CanNotDelete' - roleAssignments: [ - { - principalIds: [ - '<>' - ] - roleDefinitionIdOrName: 'Reader' + id: '' } ] - visibility: { - subscriptions: [ - '<>' - ] - } } } ``` @@ -580,34 +618,16 @@ module privateLinkServices './Microsoft.Network/privateLinkServices/deploy.bicep "parameters": { // Required parameters "name": { - "value": "<>-az-pls-001" + "value": "<>nplsmin001" }, // Non-required parameters - "autoApproval": { - "value": { - "subscriptions": [ - "*" - ] - } - }, - "enableProxyProtocol": { - "value": true - }, - "fqdns": { - "value": [ - "<>.plsfqdn01.azure.privatelinkservice", - "<>.plsfqdn02.azure.privatelinkserivce" - ] - }, "ipConfigurations": { "value": [ { - "name": "pls01", + "name": "nplsmin01", "properties": { - "primary": true, - "privateIPAllocationMethod": "Dynamic", "subnet": { - "id": "/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.Network/virtualNetworks/adp-<>-az-vnet-x-001/subnets/<>-az-subnet-x-009" + "id": "" } } } @@ -616,29 +636,9 @@ module privateLinkServices './Microsoft.Network/privateLinkServices/deploy.bicep "loadBalancerFrontendIpConfigurations": { "value": [ { - "id": "/subscriptions/<>/resourceGroups/validation-rg/providers/Microsoft.Network/loadBalancers/adp-<>-az-lb-pls-001/frontendIPConfigurations/frontend-pls" - } - ] - }, - "lock": { - "value": "CanNotDelete" - }, - "roleAssignments": { - "value": [ - { - "principalIds": [ - "<>" - ], - "roleDefinitionIdOrName": "Reader" + "id": "" } ] - }, - "visibility": { - "value": { - "subscriptions": [ - "<>" - ] - } } } }