Skip to content

Commit 7700243

Browse files
authored
Update howto-nexus-instance-deployment-template.md
1 parent d375cfc commit 7700243

File tree

1 file changed

+103
-92
lines changed

1 file changed

+103
-92
lines changed

articles/operator-nexus/howto-nexus-instance-deployment-template.md

Lines changed: 103 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ This template is designed to assist users in managing a reproducible end-to-end
2525
- Latest `networkcloud` [CLI extension](howto-install-cli-extensions.md).
2626
- Subscription access to run the Azure Operator Nexus Network Fabric (NF) and Network Cloud (NC) CLI extension commands.
2727
- 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).
2929

3030
</details>
3131

@@ -79,7 +79,7 @@ This template is designed to assist users in managing a reproducible end-to-end
7979
- <TARGET_DATE>: Track deployment expected end date
8080

8181
> [!NOTE]
82-
> Additional parameters come from the Telco Input template.
82+
> Additional parameters come from the [Telco Input template](concepts-telco-input-template.md).
8383
8484
</details>
8585

@@ -111,38 +111,17 @@ cli.azure.cli.core.sdk.policies: 'x-ms-correlation-request-id': '<CORRELATIO
111111
cli.azure.cli.core.sdk.policies: 'Azure-AsyncOperation': '<ASYNC_URL>'
112112
```
113113

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`:
115115
```
116116
az rest -m get -u '<ASYNC_URL>'
117117
```
118118

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:
120120
- `"status": "Accepted"`
121121
- `"status": "Succeeded"`
122122
- `"status": "Failed"`
123123

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.
146125

147126
</details>
148127

@@ -151,31 +130,36 @@ export TNT_AUTH_2=$(az keyvault secret show --name "<TNT_ER2_AUTH>" --vault-name
151130
<summary> Detailed steps for deploying NFC </summary>
152131

153132
### Create NFC
154-
1. Create group if it doesn't exist:
133+
1. Create group if it doesn't exist from Azure CLI:
155134
```
156135
az group list --query "[?location=='<AZURE_REGION>'] | [?contains(name,'<NFC_RG>')]" --subscription <CUSTOMER_SUB_ID> -o table
157-
158136
az group create -l <AZURE_REGION> -n <NFC_RG> --subscription <CUSTOMER_SUB_ID>
137+
```
159138

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:
162140
```
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>.
163147
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:
165149
```
166150
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"}]' \
172156
--mrg name='NFC_MRG' location='REGION' --debug --no-wait
173157
```
174158

175159
> [!NOTE]
176160
> NFC creation can take up to 1 hour.
177161
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:
179163
```
180164
az networkfabric controller show --resource-group "<NFC_RG>" --resource-name "<NFC_NAME>" --subscription <CUSTOMER_SUB_ID> -o table
181165
@@ -185,7 +169,12 @@ export TNT_AUTH_2=$(az keyvault secret show --name "<TNT_ER2_AUTH>" --vault-name
185169
az customlocation list -o table --query "[?location=='<AZURE_REGION>']" | grep <NFC_NAME> --subscription <CUSTOMER_SUB_ID>
186170
```
187171

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:
189178
```
190179
az network vnet subnet list --vnet-name networkfabric-infravnet -g <NFC_MRG> --subscription <CUSTOMER_SUB_ID> -o table
191180
<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
195184
<NFC_SUBNET>.<+4>.0/24 clustermanager-subnet Disabled Disabled Succeeded <NFC_MRG>
196185
```
197186

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:
199193
```
200194
az network vpn-connection list -g <NFC_MRG> --subscription <CUSTOMER_SUB_ID> -o table
201195
```
@@ -215,18 +209,22 @@ export TNT_AUTH_2=$(az keyvault secret show --name "<TNT_ER2_AUTH>" --vault-name
215209
<summary> Detailed Steps for deploying a CM </summary>
216210

217211
### Create CM
218-
1. Prework
212+
1. Create group if it doesn't exist from Azure CLI:
219213
```
220214
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:
223215
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
227222
```
228223

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:
230228
```
231229
az deployment sub create --name "<CM_NAME>-deployment" --subscription "<CUSTOMER_SUB_ID>" --location "<AZURE_REGION>" --template-file "clusterManager.jsonc" \
232230
--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
236234
- [`clusterManager.jsonc`](clustermanager-jsonc-example.md)
237235
- [`clusterManager.parameters.jsonc`](clustermanager-parameters-jsonc-example.md)
238236

239-
3. Check status of CM for `Succeeded`:
237+
4. Check status of CM for `Succeeded` from Azure CLI:
240238
```
241239
az networkcloud clustermanager list --subscription <CUSTOMER_SUB_ID> -o table
242240
```
@@ -257,85 +255,98 @@ export TNT_AUTH_2=$(az keyvault secret show --name "<TNT_ER2_AUTH>" --vault-name
257255

258256
### Create Fabric
259257

260-
1. Prework
258+
1. Create group if it doesn't exist from Azure CLI:
261259
```
262-
az customlocation list --subscription <CUSTOMER_SUB_ID> -o table | grep <ENVIRONMENT> #Make sure no custom locations exist for <AZURE_REGION> and <ENVIRONMENT>
263-
264260
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:
267261
az group create -l <AZURE_REGION> -n <NF_RG> --subscription <CUSTOMER_SUB_ID>
262+
```
268263

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:
271265
```
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>.
272271
273-
2. Create Fabric from payload:
272+
3. Check if Fabric already exists from Azure CLI:
274273
```
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
280292
```
281293

282-
3. Verify fabric status:
294+
5. Check status of Fabric for `Succeeded` from Azure CLI:
283295
```
284296
az networkfabric fabric show --resource-group "<NF_RG>" --resource-name "<NF_NAME>" --subscription <CUSTOMER_SUB_ID> -o table
285297
az networkfabric fabric list --subscription <CUSTOMER_SUB_ID> -o table
286-
Accepted
287-
Succeeded
288298
```
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:
290301
```
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
296304
```
297305

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
299316
```
300-
cd <PAYLOAD_DIR>
301-
export PL_DIR=`pwd`
302-
source $PL_DIR/set_env.sh
303-
chmod +x nni.ps1
304-
./nni.ps1
305317

318+
8. Check status of Fabric for `Succeeded` from Azure CLI:
319+
```
306320
az networkfabric nni list -g <NF_RG> --fabric <NF_NAME> --subscription <CUSTOMER_SUB_ID>
307-
308321
az networkfabric nni list -g <NF_RG> --fabric <NF_NAME> --subscription <CUSTOMER_SUB_ID> -o table
309-
310322
```
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:
313325
```
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
319328
```
320329

321-
7. Verify all Devices are created and configured:
330+
10. Verify all Devices are created and configured from Azure CLI:
322331
```
323332
az networkfabric device list --resource-group <NF_RG> --subscription <CUSTOMER_SUB_ID> -o table
324333
```
325334

326335
### Provision Fabric
327-
1. Verify Fabric ProvisioningState is `Succeeded`:
336+
1. Verify Fabric ProvisioningState is `Succeeded` from Azure CLI:
328337
```
329338
az networkfabric fabric list --resource-group <NF_RG> --subscription <CUSTOMER_SUB_ID> -o table
330339
```
331340

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+
```
335345

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+
```
339350

340351
### Add resource tag on Fabric resource in Azure portal
341352
To increase visibility of the deployment, add a tag to the Fabric resource in Azure portal (optional):

0 commit comments

Comments
 (0)