Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

avnm-mesh-connected-group #240

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 31 additions & 20 deletions solutions/avnm-mesh-connected-group/README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
page_type: sample
languages:
- azurepowershell
- azurecli
- azurepowershell
- azurecli
products:
- azure
- azure-virtual-network
- virtual-network-manager
description: This sample deploys Virtual Networks and implements inter-network connectivity using Azure Virtual Network Manager and a mesh connectivity topology.
description: This sample deploys Virtual Networks and implements inter-network connectivity using Azure Virtual Network Manager and a mesh connectivity topology.
urlFragment: avnm-mesh-connected-group
azureDeploy: https://raw.githubusercontent.com/mspnp/samples/main/solutions/avnm-mesh-connected-group/azuredeploy.json
---
Expand All @@ -20,35 +20,46 @@ This sample deploys Azure virtual networks, using Azure Virtual Network Manager

**Default Deployment with Static Network Group Membership**

```azurecli-interactive
az deployment subscription create \
--template-uri https://raw.githubusercontent.com/mspnp/samples/main/solutions/avnm-mesh-connected-group/armTemplates/azuredeploy.json \
--parameters location=eastus
```bash
LOCATION=eastus
RESOURCEGROUP_NAME=rg-avnm-mesh-${LOCATION}

curl -o main.bicep https://raw.githubusercontent.com/mspnp/samples/main/solutions/avnm-mesh-connected-group/bicep/main.bicep
mkdir modules
cd modules
curl -o avnm.bicep https://raw.githubusercontent.com/mspnp/samples/main/solutions/avnm-mesh-connected-group/bicep/modules/avnm.bicep
curl -o avnmDeploymentScript.bicep https://raw.githubusercontent.com/mspnp/samples/main/solutions/avnm-mesh-connected-group/bicep/modules/avnmDeploymentScript.bicep
curl -o dynMemberPolicy.bicep https://raw.githubusercontent.com/mspnp/samples/main/solutions/avnm-mesh-connected-group/bicep/modules/dynMemberPolicy.bicep
curl -o hub.bicep https://raw.githubusercontent.com/mspnp/samples/main/solutions/avnm-mesh-connected-group/bicep/modules/hub.bicep
curl -o spoke.bicep https://raw.githubusercontent.com/mspnp/samples/main/solutions/avnm-mesh-connected-group/bicep/modules/spoke.bicep
cd ..

az deployment sub create --template-file main.bicep -n avnm-mesh-connected-group -l ${LOCATION} --parameters resourceGroupName=${RESOURCEGROUP_NAME}
```

**Default Deployment with Dynamic Network Group Membership**

Include the deployment parameter `networkGroupMembershipType` with a value of `dynamic` to use Azure Policy to dynamically manage the membership of the network group.
Include the deployment parameter `networkGroupMembershipType` with a value of `dynamic` to use Azure Policy to dynamically manage the membership of the network group.

>![NOTE] This deployment requires permissions to create and assign Azure Policy at the target subscription level.
> ![NOTE] This deployment requires permissions to create and assign Azure Policy at the target subscription level.

```azurecli-interactive
az deployment subscription create \
--template-uri https://raw.githubusercontent.com/mspnp/samples/main/solutions/avnm-mesh-connected-group/armTemplates/azuredeploy.json \
--parameters networkGroupMembershipType=dynamic location=eastus
```bash
az deployment sub create --template-file main.bicep -n avnm-mesh-connected-group -l ${LOCATION} --parameters resourceGroupName=${RESOURCEGROUP_NAME} networkGroupMembershipType=dynamic
```

## Solution deployment parameters

| Parameter | Type | Description | Default |
|---|---|---|--|
| `location` | string | Deployment location. Location must support availability zones. | `resourceGroup().location` |
| `deployVirtualMachines` | bool | If true, deploys one basic Linux virtual machine to spoke one and one basic Windows virtual machine to spoke two. | `false` |
| `networkGroupMembershipType` | string | Specify either 'static' or 'dynamic' network group membership. Default: 'static' | `false` |
| Parameter | Type | Description | Default |
| ---------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------- | -------------------------- |
| `location` | string | Deployment location. Location must support availability zones. | `resourceGroup().location` |
| `deployVirtualMachines` | bool | If true, deploys one basic Linux virtual machine to spoke one and one basic Windows virtual machine to spoke two. | `false` |
| `networkGroupMembershipType` | string | Specify either 'static' or 'dynamic' network group membership. Default: 'static' | `false` |

## Bicep implementation
## Clean up

The links above use JSON Azure Resource Manager (ARM) templates to support network referencing. The ARM templates were generated from the following [source bicep file](https://github.com/mspnp/samples/blob/main/solutions/avnm-mesh-connected-group/bicep), which has additional comments and considerations.
```bash
az group delete --name ${RESOURCEGROUP_NAME} --yes
```

## Microsoft Open Source Code of Conduct

Expand Down
8 changes: 1 addition & 7 deletions solutions/avnm-mesh-connected-group/bicep/main.bicep
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ param resourceGroupName string

@description('The location of this regional hub. All resources, including spoke resources, will be deployed to this region.')
@minLength(6)
param location string
param location string = deployment().location

// Network Group Membership Options:
//
Expand All @@ -31,7 +31,6 @@ module hub 'modules/hub.bicep' = {
name: 'vnet-hub'
scope: resourceGroup
params: {
location: location
}
}

Expand All @@ -40,7 +39,6 @@ module spokeA 'modules/spoke.bicep' = {
name: 'spoke001'
scope: resourceGroup
params: {
location: location
spokeName: 'spoke001'
spokeVnetPrefix: '10.100.0.0/22'
}
Expand All @@ -51,7 +49,6 @@ module spokeB 'modules/spoke.bicep' = {
name: 'spoke002'
scope: resourceGroup
params: {
location: location
spokeName: 'spoke002'
spokeVnetPrefix: '10.101.0.0/22'
}
Expand All @@ -62,7 +59,6 @@ module spokeC 'modules/spoke.bicep' = {
name: 'spoke003'
scope: resourceGroup
params: {
location: location
spokeName: 'spoke003'
spokeVnetPrefix: '10.102.0.0/22'
}
Expand All @@ -73,7 +69,6 @@ module spokeD 'modules/spoke.bicep' = {
name: 'spoke004'
scope: resourceGroup
params: {
location: location
spokeName: 'spoke004'
spokeVnetPrefix: '10.103.0.0/22'
}
Expand All @@ -94,7 +89,6 @@ module avnm 'modules/avnm.bicep' = {
name: 'avnm'
scope: resourceGroup
params: {
location: location
hubVnetId: hub.outputs.hubVnetId
spokeNetworkGroupMembers: [
spokeA.outputs.vnetId
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
param location string
param location string = resourceGroup().location
param spokeNetworkGroupMembers array
param hubVnetId string
param networkGroupMembershipType string
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
param location string
param location string = resourceGroup().location
param userAssignedIdentityId string
param networkManagerName string
param configurationId string
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
param location string
param location string = resourceGroup().location

@description('The regional hub network.')
resource vnetHub 'Microsoft.Network/virtualNetworks@2022-01-01' = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
param location string
param location string = resourceGroup().location
param spokeName string
param spokeVnetPrefix string

Expand Down