@@ -25,7 +25,7 @@ This template is designed to assist users in managing a reproducible end-to-end
25
25
- Latest ` networkcloud ` [ CLI extension] ( howto-install-cli-extensions.md ) .
26
26
- Subscription access to run the Azure Operator Nexus Network Fabric (NF) and Network Cloud (NC) CLI extension commands.
27
27
- Nexus instance data for the [ Telco Input Template] ( concepts-telco-input-template.md ) .
28
- - Additional [ Platform Prerequisites] ( howto-platform-prerequisites.md )
28
+ - Additional [ Platform Prerequisites] ( howto-platform-prerequisites.md ) .
29
29
30
30
</details >
31
31
@@ -79,7 +79,7 @@ This template is designed to assist users in managing a reproducible end-to-end
79
79
- <TARGET_DATE>: Track deployment expected end date
80
80
81
81
> [ !NOTE]
82
- > Additional parameters come from the Telco Input template.
82
+ > Additional parameters come from the [ Telco Input template] ( concepts-telco-input-template.md ) .
83
83
84
84
</details >
85
85
@@ -111,38 +111,17 @@ cli.azure.cli.core.sdk.policies: 'x-ms-correlation-request-id': '<CORRELATIO
111
111
cli.azure.cli.core.sdk.policies: 'Azure-AsyncOperation': '<ASYNC_URL>'
112
112
```
113
113
114
- To request status of long running operations, run the following command with ` az rest ` :
114
+ To view status of long running asynchronous operations, run the following command with ` az rest ` :
115
115
```
116
116
az rest -m get -u '<ASYNC_URL>'
117
117
```
118
118
119
- The following status information is returned along with additional detailed messages or errors:
119
+ Command status nformation is returned along with additional detailed messages or errors:
120
120
- ` "status": "Accepted" `
121
121
- ` "status": "Succeeded" `
122
122
- ` "status": "Failed" `
123
123
124
- Report the <MISE_CID>, <CORRELATION_ID>, status code, and detailed messages when opening support requests.
125
-
126
- </details >
127
-
128
- ## Setup Azure CLI Environment
129
- <details >
130
- <summary > Setup Azure CLI environment for deployment commands </summary >
131
-
132
- Setup the following environment variables in the execution environment from the Telco Input template data:
133
- ```
134
- export TS_USER=$(az keyvault secret show --name "<TS_USER_SECRET>" --vault-name "<CUSTOMER_KV_RID>" --query value -o tsv)
135
- export TS_PASSWORD=$(az keyvault secret show --name "<TS_PWD_SECRET>" --vault-name "<CUSTOMER_KV_RID>" --query value -o tsv)
136
- export BMC_USER=$(az keyvault secret show --name "<BMC_USER_SECRET>" --vault-name "<CUSTOMER_KV_RID>" --query value -o tsv)
137
- export BMC_PASSWORD=$(az keyvault secret show --name "<BMC_PWD_SECRET>" --vault-name "<CUSTOMER_KV_RID>" --query value -o tsv)
138
- export SP_PASSWORD=$(az keyvault secret show --name "<SP_SECRET>" --vault-name "<CUSTOMER_KV_RID>" --query value -o tsv)
139
- export STORAGE_USER=$(az keyvault secret show --name "<STORAGE_USER_SECRET>" --vault-name "<CUSTOMER_KV_RID>" --query value -o tsv)
140
- export STORAGE_PASSWORD=$(az keyvault secret show --name "<STORAGE_PWD_SECRET>" --vault-name "<CUSTOMER_KV_RID>" --query value -o tsv)
141
- export MGMT_AUTH_1=$(az keyvault secret show --name "<MGMT_ER1_AUTH>" --vault-name "<CUSTOMER_KV_RID>" --query value -o tsv)
142
- export MGMT_AUTH_2=$(az keyvault secret show --name "<MGMT_ER2_AUTH>" --vault-name "<CUSTOMER_KV_RID>" --query value -o tsv)
143
- export TNT_AUTH_1=$(az keyvault secret show --name "<TNT_ER1_AUTH>" --vault-name "<CUSTOMER_KV_RID>" --query value -o tsv)
144
- export TNT_AUTH_2=$(az keyvault secret show --name "<TNT_ER2_AUTH>" --vault-name "<CUSTOMER_KV_RID>" --query value -o tsv)
145
- ```
124
+ If any failures occur, report the <MISE_CID>, <CORRELATION_ID>, status code, and detailed messages when opening a support request.
146
125
147
126
</details >
148
127
@@ -151,31 +130,36 @@ export TNT_AUTH_2=$(az keyvault secret show --name "<TNT_ER2_AUTH>" --vault-name
151
130
<summary > Detailed steps for deploying NFC </summary >
152
131
153
132
### Create NFC
154
- 1 . Create group if it doesn't exist:
133
+ 1 . Create group if it doesn't exist from Azure CLI :
155
134
```
156
135
az group list --query "[?location=='<AZURE_REGION>'] | [?contains(name,'<NFC_RG>')]" --subscription <CUSTOMER_SUB_ID> -o table
157
-
158
136
az group create -l <AZURE_REGION> -n <NFC_RG> --subscription <CUSTOMER_SUB_ID>
137
+ ```
159
138
160
- # Check if NFC already exists
161
- az networkfabric controller list --subscription <CUSTOMER_SUB_ID> -o table
139
+ 2 . Check if NFC already exists from Azure CLI:
162
140
```
141
+ az networkfabric controller show --resource-group <NFC_RG> --resource-name <NFC_NAME> --subscription <CUSTOMER_SUB_ID> -o table
142
+ Code: ResourceNotFound
143
+ ```
144
+
145
+ > [ !IMPORTANT]
146
+ > Do not continue if NFC already exists for <NFC_NAME>.
163
147
164
- 2 . Create NFC from Telco Input template (skip for existing NFC):
148
+ 3 . Create NFC from Telco Input template (skip for existing NFC) with Azure CLI :
165
149
```
166
150
az networkfabric controller create --resource-group "NFC_RG" --subscription "SUBSCRIPTION_ID" --location "REGION" \
167
- --resource-name "NFC_NAME" --ipv4-address-space "NFC_IPV4/ NFC_IPV4_CIDR" --ipv6-address-space "NFC_IPV6/ NFC_IPV6_CIDR" \
168
- --infra-er-connections '[{"expressRouteCircuitId": "MGMT_ER1_RID", "expressRouteAuthorizationKey": "'$ MGMT_AUTH_1' "}, \
169
- {"expressRouteCircuitId": "MGMT_ER2_RID", "expressRouteAuthorizationKey": "'$ MGMT_AUTH_2' "}]' \
170
- --workload-er-connections '[{"expressRouteCircuitId": "TNT_ER1_RID", "expressRouteAuthorizationKey": "'$ TNT_AUTH_1' "}, \
171
- {"expressRouteCircuitId": "TNT_ER2_RID", "expressRouteAuthorizationKey": "'$ TNT_AUTH_2' "}]' \
151
+ --resource-name "NFC_NAME" --ipv4-address-space "NFC_IPV4"/" NFC_IPV4_CIDR" --ipv6-address-space "NFC_IPV6"/" NFC_IPV6_CIDR" \
152
+ --infra-er-connections '[{"expressRouteCircuitId": "MGMT_ER1_RID", "expressRouteAuthorizationKey": "MGMT_AUTH_1"}, \
153
+ {"expressRouteCircuitId": "MGMT_ER2_RID", "expressRouteAuthorizationKey": "MGMT_AUTH_2"}]' \
154
+ --workload-er-connections '[{"expressRouteCircuitId": "TNT_ER1_RID", "expressRouteAuthorizationKey": "TNT_AUTH_1"}, \
155
+ {"expressRouteCircuitId": "TNT_ER2_RID", "expressRouteAuthorizationKey": "TNT_AUTH_2"}]' \
172
156
--mrg name='NFC_MRG' location='REGION' --debug --no-wait
173
157
```
174
158
175
159
> [ !NOTE]
176
160
> NFC creation can take up to 1 hour.
177
161
178
- 4 . Check status of NFC and creation of the NFC ` customlocation ` from Azure CLI:
162
+ 4 . Check statuses of the NFC and the NFC ` customlocation ` are both ` Succeeded ` from Azure CLI:
179
163
```
180
164
az networkfabric controller show --resource-group "<NFC_RG>" --resource-name "<NFC_NAME>" --subscription <CUSTOMER_SUB_ID> -o table
181
165
@@ -185,7 +169,12 @@ export TNT_AUTH_2=$(az keyvault secret show --name "<TNT_ER2_AUTH>" --vault-name
185
169
az customlocation list -o table --query "[?location=='<AZURE_REGION>']" | grep <NFC_NAME> --subscription <CUSTOMER_SUB_ID>
186
170
```
187
171
188
- 5 . Verify subnets in portal for <NFC_MRG>/networkfabric-infravnet | Subnets
172
+ 5 . Verify NFC subnets are created:
173
+
174
+ Check in Azure portal:
175
+ ` Network Fabric Controllers (Operator Nexus) ` -> <NFC_NAME> -> <NFC_MRG> -> ` networkfabric-infravnet ` -> ` Subnets `
176
+
177
+ Check with Azure CLI:
189
178
```
190
179
az network vnet subnet list --vnet-name networkfabric-infravnet -g <NFC_MRG> --subscription <CUSTOMER_SUB_ID> -o table
191
180
<NFC_SUBNET>.<+0>.0/24 nfc-aks-subnet Disabled Enabled Succeeded <NFC_MRG>
@@ -195,7 +184,12 @@ export TNT_AUTH_2=$(az keyvault secret show --name "<TNT_ER2_AUTH>" --vault-name
195
184
<NFC_SUBNET>.<+4>.0/24 clustermanager-subnet Disabled Disabled Succeeded <NFC_MRG>
196
185
```
197
186
198
- 6 . Check ER connections in <NFC_MRG> (may be hidden in RG): ` Status: Succeeded `
187
+ 6 . Check ER connections are ` Status: Succeeded ` :
188
+
189
+ Check in Azure portal:
190
+ ` Network Fabric Controllers (Operator Nexus) ` -> <NFC_NAME> -> <NFC_MRG> -> <NF_ER_CONNECTIONS>
191
+
192
+ Check with Azure CLI:
199
193
```
200
194
az network vpn-connection list -g <NFC_MRG> --subscription <CUSTOMER_SUB_ID> -o table
201
195
```
@@ -215,18 +209,22 @@ export TNT_AUTH_2=$(az keyvault secret show --name "<TNT_ER2_AUTH>" --vault-name
215
209
<summary > Detailed Steps for deploying a CM </summary >
216
210
217
211
### Create CM
218
- 1 . Prework
212
+ 1 . Create group if it doesn't exist from Azure CLI:
219
213
```
220
214
az group list --query "[?location=='<AZURE_REGION>'] | [?contains(name,'<CM_RG>')]" --subscription <CUSTOMER_SUB_ID> -o table
221
-
222
- # If group does not exist, then create the group:
223
215
az group create -l <AZURE_REGION> -n <CM_RG> --subscription <CUSTOMER_SUB_ID>
224
-
225
- # Check if CM already exists
226
- az networkcloud clustermanager list --subscription <CUSTOMER_SUB_ID> -o table
216
+ ```
217
+
218
+ 2 . Check if CM already exists from Azure CLI:
219
+ ```
220
+ az networkcloud clustermanager show --subscription <CUSTOMER_SUB_ID> -n <CM_NAME> -g <CM_RG> -o table
221
+ Code: ResourceNotFound
227
222
```
228
223
229
- 2 . Create CM from Telco Input template (skip for existing CM):
224
+ > [ !IMPORTANT]
225
+ > Do not continue if a CM already exists for <CM_NAME>.
226
+
227
+ 3 . Create CM from Telco Input template (skip for existing CM) with ARM Deployment from Azure CLI:
230
228
```
231
229
az deployment sub create --name "<CM_NAME>-deployment" --subscription "<CUSTOMER_SUB_ID>" --location "<AZURE_REGION>" --template-file "clusterManager.jsonc" \
232
230
--parameters "clusterManager.parameters.jsonc" --debug --no-wait
@@ -236,7 +234,7 @@ export TNT_AUTH_2=$(az keyvault secret show --name "<TNT_ER2_AUTH>" --vault-name
236
234
- [ ` clusterManager.jsonc ` ] ( clustermanager-jsonc-example.md )
237
235
- [ ` clusterManager.parameters.jsonc ` ] ( clustermanager-parameters-jsonc-example.md )
238
236
239
- 3 . Check status of CM for ` Succeeded ` :
237
+ 4 . Check status of CM for ` Succeeded ` from Azure CLI :
240
238
```
241
239
az networkcloud clustermanager list --subscription <CUSTOMER_SUB_ID> -o table
242
240
```
@@ -257,85 +255,98 @@ export TNT_AUTH_2=$(az keyvault secret show --name "<TNT_ER2_AUTH>" --vault-name
257
255
258
256
### Create Fabric
259
257
260
- 1 . Prework
258
+ 1 . Create group if it doesn't exist from Azure CLI:
261
259
```
262
- az customlocation list --subscription <CUSTOMER_SUB_ID> -o table | grep <ENVIRONMENT> #Make sure no custom locations exist for <AZURE_REGION> and <ENVIRONMENT>
263
-
264
260
az group list --query "[?location=='<AZURE_REGION>'] | [?contains(name,'<NF_RG>')]" --subscription <CUSTOMER_SUB_ID> -o table
265
-
266
- # If group does not exist, then create the group:
267
261
az group create -l <AZURE_REGION> -n <NF_RG> --subscription <CUSTOMER_SUB_ID>
262
+ ```
268
263
269
- # Check if fabric exists
270
- az networkfabric fabric list --subscription <CUSTOMER_SUB_ID> -o table
264
+ 2 . Check if Fabric custom location already exists from Azure CLI:
271
265
```
266
+ az customlocation list --subscription <CUSTOMER_SUB_ID> -o table | grep <NF_NAME>
267
+ ```
268
+
269
+ > [ !IMPORTANT]
270
+ > Do not continue if a Fabric custom location already exists for <NF_NAME>.
272
271
273
- 2 . Create Fabric from payload :
272
+ 3 . Check if Fabric already exists from Azure CLI :
274
273
```
275
- cd <PAYLOAD_DIR>
276
- export PL_DIR=`pwd`
277
- source $PL_DIR/set_env.sh
278
- chmod +x nf.sh
279
- ./nf.sh
274
+ az networkfabric fabric show --resource-group <NF_RG> --resource-name <NF_NAME> --subscription <CUSTOMER_SUB_ID> -o table
275
+ Code: ResourceNotFound
276
+ ```
277
+ > [ !IMPORTANT]
278
+ > Do not continue if a Fabric already exists for <NF_NAME>.
279
+
280
+ 4 . Create Fabric from Telco Input template with Azure CLI:
281
+ ```
282
+ az networkfabric fabric create --resource-group "NF_RG" --subscription "SUBSCRIPTION_ID" --location "REGION" --resource-name "NF_NAME" \
283
+ --nf-sku "NF_SKU" --nfc-id "/subscriptions/SUBSCRIPTION_ID/resourceGroups/NFC_RG/providers/Microsoft.ManagedNetworkFabric/networkFabricControllers/NFC_NAME" \
284
+ --fabric-asn NF_ASN --fabric-version NF_VER --ipv4-prefix "MGMT_IPV4/MGMT_IPV4_CIDR" --ipv6-prefix "MGMT_IPV6/MGMT_IPV6_CIDR" --rack-count RACK_COUNT \
285
+ --server-count-per-rack SERVERS_PER_RACK --ts-config '{"primaryIpv4Prefix": "TS_IPV4_1/TS1_IPV4_1_CIDR", "secondaryIpv4Prefix": "TS_IPV4_2/TS1_IPV4_2_CIDR", \
286
+ "username": "'$TS_USER'", "password": "'$TS_PASSWORD'", "serialNumber": "TS_SERIAL", "primaryIpv6Prefix": "TS_IPV6_1/TS1_IPV6_1_CIDR", "secondaryIpv6Prefix": "TS_IPV6_2/TS1_IPV6_2_CIDR"}' \
287
+ --managed-network-config '{"infrastructureVpnConfiguration": {"peeringOption": "OptionA", "optionAProperties": {"mtu": "MGMT_OPA_MTU", "vlanId": "MGMT_OPA_VLANID", \
288
+ "peerASN": "MGMT_OPA_PEERASN", "primaryIpv4Prefix": "MGMT_OPA_PRIMARYIPV4PREFIX", "secondaryIpv4Prefix": "MGMT_OPA_SECONDARYIPV4PREFIX"}}, \
289
+ "workloadVpnConfiguration": {"peeringOption": "OptionA", "optionAProperties": {"mtu": "TENANT_OPA_MTU", "vlanId": "TENANT_OPA_VLANID", "peerASN": "TENANT_OPA_PEERASN", \
290
+ "primaryIpv4Prefix": "TENANT_OPA_PRIMARYIPV4PREFIX", "secondaryIpv4Prefix": "TENANT_OPA_SECONDARYIPV4PREFIX", "primaryIpv6Prefix": "TENANT_OPA_PRIMARYIPV6PREFIX", \
291
+ "secondaryIpv6Prefix": "TENANT_OPA_SECONDARYIPV6PREFIX"}}}' --debug --no-wait
280
292
```
281
293
282
- 3 . Verify fabric status:
294
+ 5 . Check status of Fabric for ` Succeeded ` from Azure CLI :
283
295
```
284
296
az networkfabric fabric show --resource-group "<NF_RG>" --resource-name "<NF_NAME>" --subscription <CUSTOMER_SUB_ID> -o table
285
297
az networkfabric fabric list --subscription <CUSTOMER_SUB_ID> -o table
286
- Accepted
287
- Succeeded
288
298
```
289
- 4 . Create Access Control List (ACL) resource:
299
+
300
+ 6 . Create Ingress and Egress Access Control List (ACL) resources if using ACL from Azure CLI:
290
301
```
291
- cd <PAYLOAD_DIR>
292
- export PL_DIR=`pwd`
293
- source $PL_DIR/set_env.sh
294
- chmod +x nni_ingress_acl.ps1
295
- ./nni_ingress_acl.ps1
302
+ az rest --subscription "SUBSCRIPTION_ID" -m put --url /subscriptions/SUBSCRIPTION_ID/resourceGroups/NF_RG/providers/Microsoft.ManagedNetworkFabric/accessControlLists/NNI_1_INGRESS_ACL_1_NAME?api-version=2023-06-15 --body @NNI_1_INGRESS_ACL_1.json
303
+ az rest --subscription "SUBSCRIPTION_ID" -m put --url /subscriptions/SUBSCRIPTION_ID/resourceGroups/NF_RG/providers/Microsoft.ManagedNetworkFabric/accessControlLists/NNI_1_EGRESS_ACL_1_NAME?api-version=2023-06-15 --body @NNI_1_EGRESS_ACL_1.json
296
304
```
297
305
298
- 5 . Create Network-to-Network Interface (NNI) resource and verify
306
+ 7 . Create Network-to-Network Interface (NNI) resource wih Azure CLI:
307
+ ```
308
+ az networkfabric nni create --resource-group "NF_RG" --subscription "SUBSCRIPTION_ID" --resource-name "nni_1_name" --fabric "NF_NAME" --is-management-type "True" --use-option-b "False" \
309
+ --layer2-configuration '{"interfaces": \
310
+ ["/subscriptions/SUBSCRIPTION_ID/resourceGroups/NF_RG/providers/Microsoft.ManagedNetworkFabric/networkDevices/NF_NAME-AggrRack-CE1/networkInterfaces/NNI1_L2_CE1_INT_1", \
311
+ "/subscriptions/SUBSCRIPTION_ID/resourceGroups/NF_RG/providers/Microsoft.ManagedNetworkFabric/networkDevices/NF_NAME-AggrRack-CE2/networkInterfaces/NNI1_L2_CE2_INT_1"], \
312
+ "mtu": "NNI1_L2_MTU"}' --option-b-layer3-configuration '{"peerASN": "NNI1_PEER_ASN", "vlanId": "NNI1_L3_VLAN_ID", "primaryIpv4Prefix": "NNI1_L3_IPV4_1/NNI1_L3_IPV4_1_CIDR", \
313
+ "secondaryIpv4Prefix": "NNI1_L3_IPV4_2/NNI1_L3_IPV4_2_CIDR"}' \
314
+ --ingress-acl-id "/subscriptions/SUBSCRIPTION_ID/resourceGroups/NF_RG/providers/Microsoft.ManagedNetworkFabric/accessControlLists/nni_1_ingress-1-acl-name" \
315
+ --egress-acl-id "/subscriptions/SUBSCRIPTION_ID/resourceGroups/NF_RG/providers/Microsoft.ManagedNetworkFabric/accessControlLists/nni_1_egress-1-acl-name" --debug --no-wait
299
316
```
300
- cd <PAYLOAD_DIR>
301
- export PL_DIR=`pwd`
302
- source $PL_DIR/set_env.sh
303
- chmod +x nni.ps1
304
- ./nni.ps1
305
317
318
+ 8 . Check status of Fabric for ` Succeeded ` from Azure CLI:
319
+ ```
306
320
az networkfabric nni list -g <NF_RG> --fabric <NF_NAME> --subscription <CUSTOMER_SUB_ID>
307
-
308
321
az networkfabric nni list -g <NF_RG> --fabric <NF_NAME> --subscription <CUSTOMER_SUB_ID> -o table
309
-
310
322
```
311
-
312
- 6 . Update Device Names and Serial Numbers from automation payloads :
323
+
324
+ 9 . Update Device Names and Serial Numbers for all Devices with Azure CLI :
313
325
```
314
- cd <PAYLOAD_DIR>
315
- export PL_DIR=`pwd`
316
- source $PL_DIR/set_env.sh
317
- chmod +x networkdevice.ps1
318
- ./networkdevice.ps1
326
+ az networkfabric device update --subscription "SUBSCRIPTION_ID" --resource-group "NF_RG" --resource-name "NF_NAME-AggrRack-CE1" --host-name "CE1_HOSTNAME" \
327
+ --serial-number "CE1_HW_VENDOR;CE1_HW_MODEL;CE1_HW_VER;CE1_SN" --debug --no-wait
319
328
```
320
329
321
- 7 . Verify all Devices are created and configured:
330
+ 10 . Verify all Devices are created and configured from Azure CLI :
322
331
```
323
332
az networkfabric device list --resource-group <NF_RG> --subscription <CUSTOMER_SUB_ID> -o table
324
333
```
325
334
326
335
### Provision Fabric
327
- 1 . Verify Fabric ProvisioningState is ` Succeeded ` :
336
+ 1 . Verify Fabric ProvisioningState is ` Succeeded ` from Azure CLI :
328
337
```
329
338
az networkfabric fabric list --resource-group <NF_RG> --subscription <CUSTOMER_SUB_ID> -o table
330
339
```
331
340
332
- 2 . Provision fabric:
333
- ```
334
- az networkfabric fabric provision --resource-group <NF_RG> --resource-name <NF_NAME> --subscription <CUSTOMER_SUB_ID> --debug --no-wait
341
+ 2 . Provision fabric with Azure CLI:
342
+ ```
343
+ az networkfabric fabric provision --resource-group <NF_RG> --resource-name <NF_NAME> --subscription <CUSTOMER_SUB_ID> --debug --no-wait
344
+ ```
335
345
336
- az networkfabric fabric list --resource-group <NF_RG> --subscription <CUSTOMER_SUB_ID> -o table
337
- Provisioned
338
- ```
346
+ 3 . Check provisioning status of Fabric is ` Provisioned ` from Azure CLI:
347
+ ```
348
+ az networkfabric fabric list --resource-group <NF_RG> --subscription <CUSTOMER_SUB_ID> -o table
349
+ ```
339
350
340
351
### Add resource tag on Fabric resource in Azure portal
341
352
To increase visibility of the deployment, add a tag to the Fabric resource in Azure portal (optional):
0 commit comments