diff --git a/docs/wiki/Whats-new.md b/docs/wiki/Whats-new.md
index f1219ceeb5..ad127c11fc 100644
--- a/docs/wiki/Whats-new.md
+++ b/docs/wiki/Whats-new.md
@@ -42,6 +42,11 @@ Here's what's changed in Enterprise Scale/Azure Landing Zones:
### November 2023
+#### Tooling
+
+- Added virtual hub routing preference support to Portal Accelerator for scenarios where you need to influence routing decisions in virtual hub router towards on-premises. For existing ALZ customers please visit [Configure virtual hub routing preference](https://learn.microsoft.com/azure/virtual-wan/howto-virtual-hub-routing-preference) for details on how to configure virtual hub routing preference settings.
+- Added virtual hub capacity option to Portal Accelerator which provides an option to select the number of routing infrastracture units. Please visit [Virtual hub capacity](https://learn.microsoft.com/azure/virtual-wan/hub-settings#capacity) for more details on Azure vWAN Virtual Hub Capacity configuration.
+
#### Docs
- Fixed in ALZ Azure Setup the bash command to assign at root scope _Owner_ role to a Service Principal.
diff --git a/eslzArm/eslz-portal.json b/eslzArm/eslz-portal.json
index 097f658b2f..6baf43b2ba 100644
--- a/eslzArm/eslz-portal.json
+++ b/eslzArm/eslz-portal.json
@@ -2032,6 +2032,298 @@
}
]
}
+ },
+ {
+ "name": "vWANHubRoutingPreference",
+ "type": "Microsoft.Common.DropDown",
+ "label": "Hub Routing Preference",
+ "defaultValue": "ExpressRoute (default)",
+ "multiselect": false,
+ "selectAll": false,
+ "filter": false,
+ "multiLine": true,
+ "visible":"[and(not(equals(steps('connectivity').enableHub, 'No')), not(equals(steps('connectivity').enableHub, 'nva')), not(equals(steps('connectivity').enableHub, 'vhub')))]",
+ "toolTip":"Preference used in selecting best path when the virtual hub learns multiple paths to the same destination route-prefix.Virtual hub routing preference.",
+ "constraints":{
+ "allowedValues":[
+ {
+ "label":"ExpressRoute (default)",
+ "description":"ExpressRoute is the preferred path. (default)",
+ "value":"ExpressRoute"
+ },
+ {
+ "label":"VPN",
+ "description":"VPN is the preferred path",
+ "value":"VpnGateway"
+ },
+ {
+ "label":"AS Path",
+ "description":"AS Path is the preferred path",
+ "value":"ASPath"
+ }
+ ]
+ }
+ },
+ {
+ "name": "vWANHubCapacity",
+ "type": "Microsoft.Common.DropDown",
+ "label": "Virtual Hub Capacity",
+ "defaultValue": "",
+ "multiselect": false,
+ "selectAll": false,
+ "filter": false,
+ "multiLine": true,
+ "visible":"[and(not(equals(steps('connectivity').enableHub, 'No')), not(equals(steps('connectivity').enableHub, 'nva')), not(equals(steps('connectivity').enableHub, 'vhub')))]",
+ "toolTip": "Routing infrastructure units determine the minimum throughput of the Virtual WAN hub router and the number of Virtual Machines that can be deployed in Virtual Networks connected to the Virtual WAN hub. Two routing infrastructure units are included at no extra cost with a deployment of a hub.Virtual Hub Capacity.",
+ "constraints": {
+ "allowedValues": [
+ {
+ "label": "2",
+ "description": "2 Routing Infrastructure Units, 3 Gbps Aggregate Throughput, Supports 2000 VMs",
+ "value": "2"
+ },
+ {
+ "label": "3",
+ "description": "3 Routing Infrastructure Units, 3 Gbps Aggregate Throughput, Supports 3000 VMs",
+ "value": "3"
+ },
+ {
+ "label": "4",
+ "description": "4 Routing Infrastructure Units, 4 Gbps Aggregate Throughput, Supports 4000 VMs",
+ "value": "4"
+ },
+ {
+ "label": "5",
+ "description": "5 Routing Infrastructure Units, 5 Gbps Aggregate Throughput, Supports 5000 VMs",
+ "value": "5"
+ },
+ {
+ "label": "6",
+ "description": "6 Routing Infrastructure Units, 6 Gbps Aggregate Throughput, Supports 6000 VMs",
+ "value": "6"
+ },
+ {
+ "label": "7",
+ "description": "7 Routing Infrastructure Units, 7 Gbps Aggregate Throughput, Supports 7000 VMs",
+ "value": "7"
+ },
+ {
+ "label": "8",
+ "description": "8 Routing Infrastructure Units, 8 Gbps Aggregate Throughput, Supports 8000 VMs",
+ "value": "8"
+ },
+ {
+ "label": "9",
+ "description": "9 Routing Infrastructure Units, 9 Gbps Aggregate Throughput, Supports 9000 VMs",
+ "value": "9"
+ },
+ {
+ "label": "10",
+ "description": "10 Routing Infrastructure Units, 10 Gbps Aggregate Throughput, Supports 10000 VMs",
+ "value": "10"
+ },
+ {
+ "label": "11",
+ "description": "11 Routing Infrastructure Units, 11 Gbps Aggregate Throughput, Supports 11000 VMs",
+ "value": "11"
+ },
+ {
+ "label": "12",
+ "description": "12 Routing Infrastructure Units, 12 Gbps Aggregate Throughput, Supports 12000 VMs",
+ "value": "12"
+ },
+ {
+ "label": "13",
+ "description": "13 Routing Infrastructure Units, 13 Gbps Aggregate Throughput, Supports 13000 VMs",
+ "value": "13"
+ },
+ {
+ "label": "14",
+ "description": "14 Routing Infrastructure Units, 14 Gbps Aggregate Throughput, Supports 14000 VMs",
+ "value": "14"
+ },
+ {
+ "label": "15",
+ "description": "15 Routing Infrastructure Units, 15 Gbps Aggregate Throughput, Supports 15000 VMs",
+ "value": "15"
+ },
+ {
+ "label": "16",
+ "description": "16 Routing Infrastructure Units, 16 Gbps Aggregate Throughput, Supports 16000 VMs",
+ "value": "16"
+ },
+ {
+ "label": "17",
+ "description": "17 Routing Infrastructure Units, 17 Gbps Aggregate Throughput, Supports 17000 VMs",
+ "value": "17"
+ },
+ {
+ "label": "18",
+ "description": "18 Routing Infrastructure Units, 18 Gbps Aggregate Throughput, Supports 18000 VMs",
+ "value": "18"
+ },
+ {
+ "label": "19",
+ "description": "19 Routing Infrastructure Units, 19 Gbps Aggregate Throughput, Supports 19000 VMs",
+ "value": "19"
+ },
+ {
+ "label": "20",
+ "description": "20 Routing Infrastructure Units, 20 Gbps Aggregate Throughput, Supports 20000 VMs",
+ "value": "20"
+ },
+ {
+ "label": "21",
+ "description": "21 Routing Infrastructure Units, 21 Gbps Aggregate Throughput, Supports 21000 VMs",
+ "value": "21"
+ },
+ {
+ "label": "22",
+ "description": "22 Routing Infrastructure Units, 22 Gbps Aggregate Throughput, Supports 22000 VMs",
+ "value": "22"
+ },
+ {
+ "label": "23",
+ "description": "23 Routing Infrastructure Units, 23 Gbps Aggregate Throughput, Supports 23000 VMs",
+ "value": "23"
+ },
+ {
+ "label": "24",
+ "description": "24 Routing Infrastructure Units, 24 Gbps Aggregate Throughput, Supports 24000 VMs",
+ "value": "24"
+ },
+ {
+ "label": "25",
+ "description": "25 Routing Infrastructure Units, 25 Gbps Aggregate Throughput, Supports 25000 VMs",
+ "value": "25"
+ },
+ {
+ "label": "26",
+ "description": "26 Routing Infrastructure Units, 26 Gbps Aggregate Throughput, Supports 26000 VMs",
+ "value": "26"
+ },
+ {
+ "label": "27",
+ "description": "27 Routing Infrastructure Units, 27 Gbps Aggregate Throughput, Supports 27000 VMs",
+ "value": "27"
+ },
+ {
+ "label": "28",
+ "description": "28 Routing Infrastructure Units, 28 Gbps Aggregate Throughput, Supports 28000 VMs",
+ "value": "28"
+ },
+ {
+ "label": "29",
+ "description": "29 Routing Infrastructure Units, 29 Gbps Aggregate Throughput, Supports 29000 VMs",
+ "value": "29"
+ },
+ {
+ "label": "30",
+ "description": "30 Routing Infrastructure Units, 30 Gbps Aggregate Throughput, Supports 30000 VMs",
+ "value": "30"
+ },
+ {
+ "label": "31",
+ "description": "31 Routing Infrastructure Units, 31 Gbps Aggregate Throughput, Supports 31000 VMs",
+ "value": "31"
+ },
+ {
+ "label": "32",
+ "description": "32 Routing Infrastructure Units, 32 Gbps Aggregate Throughput, Supports 32000 VMs",
+ "value": "32"
+ },
+ {
+ "label": "33",
+ "description": "33 Routing Infrastructure Units, 33 Gbps Aggregate Throughput, Supports 33000 VMs",
+ "value": "33"
+ },
+ {
+ "label": "34",
+ "description": "34 Routing Infrastructure Units, 34 Gbps Aggregate Throughput, Supports 34000 VMs",
+ "value": "34"
+ },
+ {
+ "label": "35",
+ "description": "35 Routing Infrastructure Units, 35 Gbps Aggregate Throughput, Supports 35000 VMs",
+ "value": "35"
+ },
+ {
+ "label": "36",
+ "description": "36 Routing Infrastructure Units, 36 Gbps Aggregate Throughput, Supports 36000 VMs",
+ "value": "36"
+ },
+ {
+ "label": "37",
+ "description": "37 Routing Infrastructure Units, 37 Gbps Aggregate Throughput, Supports 37000 VMs",
+ "value": "37"
+ },
+ {
+ "label": "38",
+ "description": "38 Routing Infrastructure Units, 38 Gbps Aggregate Throughput, Supports 38000 VMs",
+ "value": "38"
+ },
+ {
+ "label": "39",
+ "description": "39 Routing Infrastructure Units, 39 Gbps Aggregate Throughput, Supports 39000 VMs",
+ "value": "39"
+ },
+ {
+ "label": "40",
+ "description": "40 Routing Infrastructure Units, 40 Gbps Aggregate Throughput, Supports 40000 VMs",
+ "value": "40"
+ },
+ {
+ "label": "41",
+ "description": "41 Routing Infrastructure Units, 41 Gbps Aggregate Throughput, Supports 41000 VMs",
+ "value": "41"
+ },
+ {
+ "label": "42",
+ "description": "42 Routing Infrastructure Units, 42 Gbps Aggregate Throughput, Supports 42000 VMs",
+ "value": "42"
+ },
+ {
+ "label": "43",
+ "description": "43 Routing Infrastructure Units, 43 Gbps Aggregate Throughput, Supports 43000 VMs",
+ "value": "43"
+ },
+ {
+ "label": "44",
+ "description": "44 Routing Infrastructure Units, 44 Gbps Aggregate Throughput, Supports 44000 VMs",
+ "value": "44"
+ },
+ {
+ "label": "45",
+ "description": "45 Routing Infrastructure Units, 45 Gbps Aggregate Throughput, Supports 45000 VMs",
+ "value": "45"
+ },
+ {
+ "label": "46",
+ "description": "46 Routing Infrastructure Units, 46 Gbps Aggregate Throughput, Supports 46000 VMs",
+ "value": "46"
+ },
+ {
+ "label": "47",
+ "description": "47 Routing Infrastructure Units, 47 Gbps Aggregate Throughput, Supports 47000 VMs",
+ "value": "47"
+ },
+ {
+ "label": "48",
+ "description": "48 Routing Infrastructure Units, 48 Gbps Aggregate Throughput, Supports 48000 VMs",
+ "value": "48"
+ },
+ {
+ "label": "49",
+ "description": "49 Routing Infrastructure Units, 49 Gbps Aggregate Throughput, Supports 49000 VMs",
+ "value": "49"
+ },
+ {
+ "label": "50",
+ "description": "50 Routing Infrastructure Units, 50 Gbps Aggregate Throughput, Supports 50000 VMs",
+ "value": "50"
+ }
+ ]
+ }
}
]
},
@@ -3212,6 +3504,8 @@
"enablevWANRoutingIntent":"[steps('connectivity').enablevWANRoutingIntent]",
"internetTrafficRoutingPolicy":"[if(equals(steps('connectivity').vWANRoutingIntentforInternetTraffic, 'Yes'), 'true', 'false')]",
"privateTrafficRoutingPolicy":"[if(equals(steps('connectivity').vWANRoutingIntentforPrivateTraffic, 'Yes'), 'true', 'false')]",
+ "vWANHubRoutingPreference":"[steps('connectivity').vWANHubRoutingPreference]",
+ "vWANHubCapacity":"[steps('connectivity').vWANHubCapacity]",
"identitySubscriptionId": "[if(or(not(equals(steps('identity').esIdentitySubSection.esIdentitySub,steps('management').esMgmtSubSection.esMgmtSub)),not(equals(steps('identity').esIdentitySubSection.esIdentitySub,steps('connectivity').esNwSubSection.esNwSub))),steps('identity').esIdentitySubSection.esIdentitySub,'')]",
"denyMgmtPortsForIdentity": "[steps('identity').denyMgmtPortsForIdentity]",
"denySubnetWithoutNsgForIdentity": "[steps('identity').denySubnetWithoutNsgForIdentity]",
diff --git a/eslzArm/eslzArm.json b/eslzArm/eslzArm.json
index a5c6f8252a..d94df04956 100644
--- a/eslzArm/eslzArm.json
+++ b/eslzArm/eslzArm.json
@@ -477,6 +477,20 @@
"description": "Enable vWAN Routing Intent and Policy for Private Traffic"
}
},
+ "vWANHubRoutingPreference": {
+ "type": "string",
+ "defaultValue": "ExpressRoute",
+ "metadata": {
+ "description": "vWAN Hub Routing Preference"
+ }
+ },
+ "vWANHubCapacity": {
+ "type": "string",
+ "defaultValue": "2",
+ "metadata": {
+ "description": "vWAN Hub Capacity"
+ }
+ },
"identitySubscriptionId": {
"type": "string",
"defaultValue": "",
@@ -2434,6 +2448,12 @@
},
"privateTrafficRoutingPolicy":{
"value":"[parameters('privateTrafficRoutingPolicy')]"
+ },
+ "vWANHubRoutingPreference":{
+ "value":"[parameters('vWANHubRoutingPreference')]"
+ },
+ "vWanHubCapacity":{
+ "value":"[parameters('vWANHubCapacity')]"
}
}
}
diff --git a/eslzArm/subscriptionTemplates/vwan-connectivity.json b/eslzArm/subscriptionTemplates/vwan-connectivity.json
index 549fd7d55b..274c10c96b 100644
--- a/eslzArm/subscriptionTemplates/vwan-connectivity.json
+++ b/eslzArm/subscriptionTemplates/vwan-connectivity.json
@@ -116,6 +116,27 @@
"description":
"Enable vWAN Routing Intent"
}
+ },
+ "vWANHubRoutingPreference":{
+ "type": "string",
+ "defaultValue": "ExpressRoute",
+ "allowedValues":[
+ "ExpressRoute",
+ "VpnGateway",
+ "ASPath"
+ ],
+ "metadata": {
+ "description":
+ "vWAN Hub Routing Preference"
+ }
+ },
+ "vWANHubCapacity":{
+ "type": "string",
+ "metadata": {
+ "description":
+ "vWAN Hub Capacity Units"
+ },
+ "defaultValue": "2"
}
},
"variables": {
@@ -190,7 +211,7 @@
{
"condition": "[and(equals(parameters('enableHub'), 'vwan'), not(empty(parameters('addressPrefix'))))]",
"type": "Microsoft.Network/virtualHubs",
- "apiVersion": "2020-05-01",
+ "apiVersion": "2023-04-01",
"location": "[parameters('location')]",
"name": "[variables('vhubname')]",
"dependsOn": [
@@ -201,8 +222,12 @@
"id": "[variables('vwanresourceid')]"
},
"addressPrefix": "[parameters('addressPrefix')]",
- "sku": "[variables('vhubsku')]"
- }
+ "sku": "[variables('vhubsku')]",
+ "hubRoutingPreference": "[parameters('vWANHubRoutingPreference')]",
+ "virtualRouterAutoScaleConfiguration": {
+ "minCapacity": "[int(parameters('vWANHubCapacity'))]"
+ }
+ }
},
{
"condition": "[and(equals(parameters('enableHub'), 'vwan'), equals(parameters('enableVpnGw'), 'Yes'))]",