RosiKyu commented on PR #12499:
URL: https://github.com/apache/cloudstack/pull/12499#issuecomment-3789970512

   ### TC1: Deploy VNF Appliance via Deploy-as-is Template (Main Bug Fix)
   **Objective:** Verify the original bug is fixed - deploying VNF appliance 
using deploy-as-is template no longer fails with "VNF nics list is empty"
   **Expected Result:** VM deploys successfully without "VNF nics list is 
empty" error
   **Actual Result:**  PASSED - VM ID: 4d319d1f-8de8-4b05-84ba-8b580d731ca5, 
State: Running, 10 NICs created
   **Test Evidence:**
   
   
   <details><summary><code>(localcloud) 🐱 > deployVnfAppliance 
templateid=88ac23d3-a3dd-4bcc-ab69-716a2b6c86dd 
serviceofferingid=63b6851c-631c-4b30-81f0-e959e2eb6052 
zoneid=e9594751-da68-4f49-924f-222ba4c15876 nicnetworklist[0].nic=0 
nicnetworklist[0].network=4935f651-04b5-49f7-b25a-55c6151ad5cb 
name=vnf-tc1-full properties[0].key=HARole 
properties[0].value=Standalone</code></summary>
   
   ```json
   {
     "virtualmachine": {
       "account": "admin",
       "affinitygroup": [],
       "arch": "x86_64",
       "cpunumber": 1,
       "cpuspeed": 500,
       "created": "2026-01-23T08:22:14+0000",
       "deleteprotection": false,
       "details": {
         "cpuOvercommitRatio": "2.0",
         "dataDiskController": "osdefault",
         "rootDiskController": "lsilogic"
       },
       "displayname": "vnf-tc1-full",
       "displayvm": true,
       "domain": "ROOT",
       "domainid": "caacffaf-f7cc-11f0-bc70-1e00b6000327",
       "domainpath": "/",
       "guestosid": "cac8e8aa-f7cc-11f0-bc70-1e00b6000327",
       "haenable": false,
       "hasannotations": false,
       "hostcontrolstate": "Enabled",
       "hostid": "cfcf5c46-b2dc-4c40-b487-eb8a111a83b3",
       "hostname": "10.0.35.172",
       "hypervisor": "VMware",
       "id": "4d319d1f-8de8-4b05-84ba-8b580d731ca5",
       "instancename": "i-2-7-VM",
       "ipaddress": "10.1.1.52",
       "isdynamicallyscalable": false,
       "jobid": "4db54012-7faa-4eb0-833f-8eac824d7b27",
       "jobstatus": 0,
       "lastupdated": "2026-01-23T08:24:11+0000",
       "memory": 512,
       "name": "vnf-tc1-full",
       "nic": [
         {
           "broadcasturi": "vlan://1161",
           "deviceid": "2",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "a46379db-2c9b-4656-bfb5-bfd99adb366a",
           "ipaddress": "10.1.1.114",
           "isdefault": false,
           "isolationuri": "vlan://1161",
           "macaddress": "02:01:00:cc:00:18",
           "netmask": "255.255.255.0",
           "networkid": "9427bebb-848d-4b54-8e22-06bfdcc83dcd",
           "networkname": "test",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1161",
           "deviceid": "8",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "f7e2761b-73f0-4f67-99ba-fc663695d863",
           "ipaddress": "10.1.1.185",
           "isdefault": false,
           "isolationuri": "vlan://1161",
           "macaddress": "02:01:00:cc:00:1e",
           "netmask": "255.255.255.0",
           "networkid": "9427bebb-848d-4b54-8e22-06bfdcc83dcd",
           "networkname": "test",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1161",
           "deviceid": "4",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "9e609129-55c8-4ed5-bb84-35a27fc39deb",
           "ipaddress": "10.1.1.197",
           "isdefault": false,
           "isolationuri": "vlan://1161",
           "macaddress": "02:01:00:cc:00:1a",
           "netmask": "255.255.255.0",
           "networkid": "9427bebb-848d-4b54-8e22-06bfdcc83dcd",
           "networkname": "test",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1161",
           "deviceid": "9",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "ccc16eb3-9e07-47f5-9dc2-faed9afd7eb6",
           "ipaddress": "10.1.1.137",
           "isdefault": false,
           "isolationuri": "vlan://1161",
           "macaddress": "02:01:00:cc:00:1f",
           "netmask": "255.255.255.0",
           "networkid": "9427bebb-848d-4b54-8e22-06bfdcc83dcd",
           "networkname": "test",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1161",
           "deviceid": "7",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "0afd124b-8c07-4db5-bdc0-b2858043ceea",
           "ipaddress": "10.1.1.38",
           "isdefault": false,
           "isolationuri": "vlan://1161",
           "macaddress": "02:01:00:cc:00:1d",
           "netmask": "255.255.255.0",
           "networkid": "9427bebb-848d-4b54-8e22-06bfdcc83dcd",
           "networkname": "test",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1161",
           "deviceid": "3",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "9176d2c0-a91e-4c3e-8ca1-207a3b792475",
           "ipaddress": "10.1.1.240",
           "isdefault": false,
           "isolationuri": "vlan://1161",
           "macaddress": "02:01:00:cc:00:19",
           "netmask": "255.255.255.0",
           "networkid": "9427bebb-848d-4b54-8e22-06bfdcc83dcd",
           "networkname": "test",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1161",
           "deviceid": "6",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "fbf965f5-ec8e-4806-a514-7f3b520a2b66",
           "ipaddress": "10.1.1.150",
           "isdefault": false,
           "isolationuri": "vlan://1161",
           "macaddress": "02:01:00:cc:00:1c",
           "netmask": "255.255.255.0",
           "networkid": "9427bebb-848d-4b54-8e22-06bfdcc83dcd",
           "networkname": "test",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1161",
           "deviceid": "0",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "ca0d01fe-4696-472b-8923-2961ee65edc3",
           "ipaddress": "10.1.1.52",
           "isdefault": true,
           "isolationuri": "vlan://1161",
           "macaddress": "02:01:00:cc:00:16",
           "netmask": "255.255.255.0",
           "networkid": "9427bebb-848d-4b54-8e22-06bfdcc83dcd",
           "networkname": "test",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1161",
           "deviceid": "1",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "9017b11f-b315-4812-82bb-b8b1a3d3a682",
           "ipaddress": "10.1.1.202",
           "isdefault": false,
           "isolationuri": "vlan://1161",
           "macaddress": "02:01:00:cc:00:17",
           "netmask": "255.255.255.0",
           "networkid": "9427bebb-848d-4b54-8e22-06bfdcc83dcd",
           "networkname": "test",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1161",
           "deviceid": "5",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "e9f8916a-ba2d-4d95-a667-dce690ace4aa",
           "ipaddress": "10.1.1.81",
           "isdefault": false,
           "isolationuri": "vlan://1161",
           "macaddress": "02:01:00:cc:00:1b",
           "netmask": "255.255.255.0",
           "networkid": "9427bebb-848d-4b54-8e22-06bfdcc83dcd",
           "networkname": "test",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         }
       ],
       "osdisplayname": "Other 2.6x Linux (64-bit)",
       "ostypeid": "cac8e8aa-f7cc-11f0-bc70-1e00b6000327",
       "passwordenabled": false,
       "pooltype": "PreSetup",
       "receivedbytes": 0,
       "rootdeviceid": 0,
       "rootdevicetype": "ROOT",
       "securitygroup": [],
       "sentbytes": 0,
       "serviceofferingid": "63b6851c-631c-4b30-81f0-e959e2eb6052",
       "serviceofferingname": "Small Instance",
       "state": "Running",
       "tags": [],
       "templatedisplaytext": "ASAv VNF deploy-as-is test",
       "templateformat": "OVA",
       "templateid": "88ac23d3-a3dd-4bcc-ab69-716a2b6c86dd",
       "templatename": "ASAv-VNF-test-vnf",
       "templatetype": "VNF",
       "userid": "1095c455-f7cd-11f0-bc70-1e00b6000327",
       "username": "admin",
       "zoneid": "e9594751-da68-4f49-924f-222ba4c15876",
       "zonename": "ref-trl-10698-v-Mol8-rositsa-kyuchukova"
     }
   }
     ```
   
   </details>
   
   ### TC2 (UI): Deploy VNF Appliance via UI with Deploy-as-is Template
   
   **Objective:** Verify the original bug is fixed via UI - Deploy VNF 
Appliance wizard works with deploy-as-is templates
   **Expected Result:** VM deploys successfully via UI without "VNF nics list 
is empty" error
   **Actual Result:**  PASSED - VM created with 10 NICs properly mapped to 
networks
   **Test Evidence:**
   
   - Deploying via UI
   
   [Screencast from 2026-01-23 
10-43-23.webm](https://github.com/user-attachments/assets/fea75ed1-b0c5-49d4-85d3-630f79039262)
   
   <img width="3111" height="1889" alt="Screenshot from 2026-01-23 10-44-02" 
src="https://github.com/user-attachments/assets/5007b40c-74e0-44eb-874f-775c4077fe76";
 />
   
   
   - Launching VNF appliance
   
   <img width="2607" height="885" alt="image" 
src="https://github.com/user-attachments/assets/0ec64af3-82eb-4190-8e71-7a2b4daf071d";
 />
   
   **NOTE** Identified a separate UI bug, while executing this test case: 
https://github.com/apache/cloudstack/issues/12510
   
   ### TC3: Register Deploy-as-is VNF Template WITHOUT VNF Nics
   
   **Objective:** Verify registering a deploy-as-is VNF template without 
specifying VNF nics succeeds
   **Expected Result:** Template registers successfully; VNF nics read from OVA 
after download
   **Actual Result:** PASSED - Template ID: 
3dc7c5e0-46ad-4531-a8e4-149461be237f, Status: Ready, 10 NICs auto-populated 
from OVA
   **Test Evidence:**
   
   ```
   (localcloud) 🐱 > listVnfTemplates id=3dc7c5e0-46ad-4531-a8e4-149461be237f 
templatefilter=all filter=id,name,status,isready,templatetype,deployasis
   {
     "count": 1,
     "template": [
       {
         "deployasis": true,
         "id": "3dc7c5e0-46ad-4531-a8e4-149461be237f",
         "isready": true,
         "name": "vnf-tc3-no-nics",
         "status": "Download Complete",
         "templatetype": "VNF"
       }
     ]
   }
   (localcloud) 🐱 >  
   ```
   
   <img width="2602" height="1527" alt="image" 
src="https://github.com/user-attachments/assets/3cc9e6d5-6724-4bb7-a8f9-d79d9e9ed270";
 />
   
   ### TC4: Register Deploy-as-is VNF Template WITH VNF Nics (Negative Test)
   
   **Objective:** Verify proper error when trying to register deploy-as-is 
template with VNF nics specified
   **Expected Result:** Error rejecting VNF nics parameter for deploy-as-is 
templates
   **Actual Result:** PASSED - Proper validation error returned
   **Test Evidence:**
   
   ```
   (localcloud) 🐱 > registerVnfTemplate name=vnf-tc4-with-nics displaytext="TC4 
VNF with nics - should fail" format=OVA hypervisor=VMware 
ostypeid=cac8e8aa-f7cc-11f0-bc70-1e00b6000327 
zoneid=e9594751-da68-4f49-924f-222ba4c15876 
url=http://10.0.3.122/ova/asav951.ova deployasis=true vnfnics[0].deviceid=0 
vnfnics[0].name=eth0 vnfnics[0].required=true
   🙈 Error: (HTTP 431, error code 4350) VNF Template cannot be registered with 
VNF nics as Template settings are read from OVA.
   ```
   
   ### TC5: Update Deploy-as-is VNF Template with VNF Nics
   
   **Objective:** Verify updating deploy-as-is template to add VNF nics is 
allowed after template is ready
   **Expected Result:** Update succeeds - user can configure VNF nics after OVA 
is downloaded
   **Actual Result:** PASSED - VNF nics were added successfully
   **Test Evidence:**
   
   ```
   (localcloud) 🐱 > updateVnfTemplate id=3dc7c5e0-46ad-4531-a8e4-149461be237f 
vnfnics[0].deviceid=0 vnfnics[0].name=eth0 vnfnics[0].required=true
   {
     "template": {
       "account": "admin",
       "bits": 0,
       "bootable": true,
       "created": "2026-01-23T09:21:09+0000",
       "crossZones": false,
       "displaytext": "TC3 VNF without nics",
       "domain": "ROOT",
       "domainid": "caacffaf-f7cc-11f0-bc70-1e00b6000327",
       "domainpath": "/",
       "format": "OVA",
       "hypervisor": "VMware",
       "id": "3dc7c5e0-46ad-4531-a8e4-149461be237f",
       "isdynamicallyscalable": false,
       "isfeatured": false,
       "ispublic": false,
       "isready": false,
       "name": "vnf-tc3-no-nics",
       "ostypeid": "cac8e8aa-f7cc-11f0-bc70-1e00b6000327",
       "ostypename": "Other 2.6x Linux (64-bit)",
       "tags": [],
       "templatetype": "VNF",
       "vnfnics": [
         {
           "deviceid": 0,
           "management": true,
           "name": "eth0",
           "required": true
         }
       ]
     }
   }
   ```
   
   ### TC6: UI - Network Selection Behavior for Deploy-as-is Template
   
   **Objective:** Verify UI properly handles network selection for deploy-as-is 
templates
   **Expected Result:** UI displays all OVA-defined NICs with functional 
network selection; no option to modify NIC definitions
   **Actual Result:** PASSED - All 10 NICs from OVA displayed with correct 
names, "Change" button functional, no add/remove options
   **Evidence**
   
   <img width="1568" height="595" alt="image" 
src="https://github.com/user-attachments/assets/4e213abf-ba2e-405a-b22e-638b4a43118f";
 />
   <img width="1568" height="595" alt="image" 
src="https://github.com/user-attachments/assets/b72d3cf4-a8d3-4556-93c4-8fd7ccb9f755";
 />
   <img width="1568" height="595" alt="image" 
src="https://github.com/user-attachments/assets/dfceb0c4-b91d-4219-a73c-240a72d01681";
 />
   <img width="1568" height="779" alt="image" 
src="https://github.com/user-attachments/assets/a2e3844c-2b70-4770-bc56-bdf69c2b01af";
 />
   
   
   ### TC7: Deploy VNF with All Required NICs Mapped
   
   **Objective:** Verify deployment succeeds when all required NICs have 
networks assigned
   
   **Expected Result:** Deployment succeeds; VM has correct network attachments 
matching the specified mapping
   
   **Actual Result:** PARTIAL PASS / POTENTIAL BUG - VM deployed successfully 
with 10 NICs in Running state, but network mapping does not match the specified 
nicnetworklist parameter. Only 3/10 NICs attached to correct networks.
   
   **Test Evidence:**
   
   <details><summary><code>(localcloud) 🐱 > deployVnfAppliance 
templateid=88ac23d3-a3dd-4bcc-ab69-716a2b6c86dd 
serviceofferingid=63b6851c-631c-4b30-81f0-e959e2eb6052 
zoneid=e9594751-da68-4f49-924f-222ba4c15876 name=vnf-tc7-correct-ids 
properties[0].key=HARole properties[0].value=Standalone nicnetworklist[0].nic=6 
nicnetworklist[0].network=4935f651-04b5-49f7-b25a-55c6151ad5cb 
nicnetworklist[1].nic=9 
nicnetworklist[1].network=fee6a3ae-b99f-4ebe-b84b-c661fc4d5888 
nicnetworklist[2].nic=10 
nicnetworklist[2].network=a170136d-9699-4586-8eaf-f83f19255a54 
nicnetworklist[3].nic=11 
nicnetworklist[3].network=9427bebb-848d-4b54-8e22-06bfdcc83dcd 
nicnetworklist[4].nic=12 
nicnetworklist[4].network=4935f651-04b5-49f7-b25a-55c6151ad5cb 
nicnetworklist[5].nic=13 
nicnetworklist[5].network=fee6a3ae-b99f-4ebe-b84b-c661fc4d5888 
nicnetworklist[6].nic=14 
nicnetworklist[6].network=a170136d-9699-4586-8eaf-f83f19255a54 
nicnetworklist[7].nic=15 
nicnetworklist[7].network=9427bebb-848d-4b54-8e22-06bfdcc83dcd ni
 cnetworklist[8].nic=16 
nicnetworklist[8].network=4935f651-04b5-49f7-b25a-55c6151ad5cb 
nicnetworklist[9].nic=17 
nicnetworklist[9].network=fee6a3ae-b99f-4ebe-b84b-c661fc4d5888 </code></summary>
   
   ```json
   {
     "virtualmachine": {
       "account": "admin",
       "affinitygroup": [],
       "arch": "x86_64",
       "cpunumber": 1,
       "cpuspeed": 500,
       "created": "2026-01-23T10:26:18+0000",
       "deleteprotection": false,
       "details": {
         "cpuOvercommitRatio": "2.0",
         "dataDiskController": "osdefault",
         "rootDiskController": "lsilogic"
       },
       "displayname": "vnf-tc7-correct-ids",
       "displayvm": true,
       "domain": "ROOT",
       "domainid": "caacffaf-f7cc-11f0-bc70-1e00b6000327",
       "domainpath": "/",
       "guestosid": "cac8e8aa-f7cc-11f0-bc70-1e00b6000327",
       "haenable": false,
       "hasannotations": false,
       "hostcontrolstate": "Enabled",
       "hostid": "7a9c02a7-19f8-46a1-9ef3-a4ff7fe90ba6",
       "hostname": "10.0.35.255",
       "hypervisor": "VMware",
       "id": "3093cba4-9238-44f7-a5d4-198e4df0cad6",
       "instancename": "i-2-15-VM",
       "ipaddress": "10.1.1.65",
       "isdynamicallyscalable": false,
       "jobid": "1cb3ca2e-9052-4e73-bf79-f0a569261530",
       "jobstatus": 0,
       "lastupdated": "2026-01-23T10:29:53+0000",
       "memory": 512,
       "name": "vnf-tc7-correct-ids",
       "nic": [
         {
           "broadcasturi": "vlan://1175",
           "deviceid": "5",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "54fd720d-aed4-47fa-aef3-2ec59541f9a9",
           "ipaddress": "10.1.1.27",
           "isdefault": false,
           "isolationuri": "vlan://1175",
           "macaddress": "02:01:00:ce:00:07",
           "netmask": "255.255.255.0",
           "networkid": "fee6a3ae-b99f-4ebe-b84b-c661fc4d5888",
           "networkname": "vnf-net2",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1175",
           "deviceid": "9",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "c3473e84-b1d3-4de3-93c2-5144dc48e683",
           "ipaddress": "10.1.1.32",
           "isdefault": false,
           "isolationuri": "vlan://1175",
           "macaddress": "02:01:00:ce:00:08",
           "netmask": "255.255.255.0",
           "networkid": "fee6a3ae-b99f-4ebe-b84b-c661fc4d5888",
           "networkname": "vnf-net2",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1179",
           "deviceid": "8",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "9181e5aa-7b27-47fc-9095-4eca7a4138c7",
           "ipaddress": "10.1.1.201",
           "isdefault": false,
           "isolationuri": "vlan://1179",
           "macaddress": "02:01:00:cd:00:07",
           "netmask": "255.255.255.0",
           "networkid": "4935f651-04b5-49f7-b25a-55c6151ad5cb",
           "networkname": "vnf-net1",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1164",
           "deviceid": "2",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "e6be4593-cc05-422d-a768-2702bdf64806",
           "ipaddress": "10.1.1.98",
           "isdefault": false,
           "isolationuri": "vlan://1164",
           "macaddress": "02:01:00:cf:00:06",
           "netmask": "255.255.255.0",
           "networkid": "a170136d-9699-4586-8eaf-f83f19255a54",
           "networkname": "vnf-net3",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1179",
           "deviceid": "0",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "eb098621-fbe9-4914-a74e-656fbcc3eff9",
           "ipaddress": "10.1.1.65",
           "isdefault": true,
           "isolationuri": "vlan://1179",
           "macaddress": "02:01:00:cd:00:05",
           "netmask": "255.255.255.0",
           "networkid": "4935f651-04b5-49f7-b25a-55c6151ad5cb",
           "networkname": "vnf-net1",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1164",
           "deviceid": "6",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "3ae4f2e9-9b87-4b81-b988-1dfff6b62765",
           "ipaddress": "10.1.1.72",
           "isdefault": false,
           "isolationuri": "vlan://1164",
           "macaddress": "02:01:00:cf:00:07",
           "netmask": "255.255.255.0",
           "networkid": "a170136d-9699-4586-8eaf-f83f19255a54",
           "networkname": "vnf-net3",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1179",
           "deviceid": "4",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "3a78494a-d496-4cd7-a899-610d85a917d5",
           "ipaddress": "10.1.1.27",
           "isdefault": false,
           "isolationuri": "vlan://1179",
           "macaddress": "02:01:00:cd:00:06",
           "netmask": "255.255.255.0",
           "networkid": "4935f651-04b5-49f7-b25a-55c6151ad5cb",
           "networkname": "vnf-net1",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1161",
           "deviceid": "7",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "3e6a983f-5e01-4859-93ac-0c57a6d8e7dc",
           "ipaddress": "10.1.1.160",
           "isdefault": false,
           "isolationuri": "vlan://1161",
           "macaddress": "02:01:00:cc:00:3e",
           "netmask": "255.255.255.0",
           "networkid": "9427bebb-848d-4b54-8e22-06bfdcc83dcd",
           "networkname": "test",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1175",
           "deviceid": "1",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "34a285a4-f3f4-4314-80aa-376a194b8abf",
           "ipaddress": "10.1.1.162",
           "isdefault": false,
           "isolationuri": "vlan://1175",
           "macaddress": "02:01:00:ce:00:06",
           "netmask": "255.255.255.0",
           "networkid": "fee6a3ae-b99f-4ebe-b84b-c661fc4d5888",
           "networkname": "vnf-net2",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1161",
           "deviceid": "3",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "9236a428-b995-4866-918a-0257ada77b09",
           "ipaddress": "10.1.1.229",
           "isdefault": false,
           "isolationuri": "vlan://1161",
           "macaddress": "02:01:00:cc:00:3d",
           "netmask": "255.255.255.0",
           "networkid": "9427bebb-848d-4b54-8e22-06bfdcc83dcd",
           "networkname": "test",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         }
       ],
       "osdisplayname": "Other 2.6x Linux (64-bit)",
       "ostypeid": "cac8e8aa-f7cc-11f0-bc70-1e00b6000327",
       "passwordenabled": false,
       "pooltype": "PreSetup",
       "receivedbytes": 0,
       "rootdeviceid": 0,
       "rootdevicetype": "ROOT",
       "securitygroup": [],
       "sentbytes": 0,
       "serviceofferingid": "63b6851c-631c-4b30-81f0-e959e2eb6052",
       "serviceofferingname": "Small Instance",
       "state": "Running",
       "tags": [],
       "templatedisplaytext": "ASAv VNF deploy-as-is test",
       "templateformat": "OVA",
       "templateid": "88ac23d3-a3dd-4bcc-ab69-716a2b6c86dd",
       "templatename": "ASAv-VNF-test-vnf",
       "templatetype": "VNF",
       "userid": "1095c455-f7cd-11f0-bc70-1e00b6000327",
       "username": "admin",
       "zoneid": "e9594751-da68-4f49-924f-222ba4c15876",
       "zonename": "ref-trl-10698-v-Mol8-rositsa-kyuchukova"
     }
   }
   ```
   
   </details>
   
   
   - VNF Appliance deployed, in a **Running** state
   
   <details><summary><code>(localcloud) 🐱 > listVirtualMachines 
name=vnf-tc7-correct-ids filter=id,name,state,nic</code></summary>
   
   ```json
   {
     "count": 1,
     "virtualmachine": [
       {
         "id": "3093cba4-9238-44f7-a5d4-198e4df0cad6",
         "name": "vnf-tc7-correct-ids",
         "nic": [
           {
             "broadcasturi": "vlan://1179",
             "deviceid": "0",
             "extradhcpoption": [],
             "gateway": "10.1.1.1",
             "id": "eb098621-fbe9-4914-a74e-656fbcc3eff9",
             "ipaddress": "10.1.1.65",
             "isdefault": true,
             "isolationuri": "vlan://1179",
             "macaddress": "02:01:00:cd:00:05",
             "netmask": "255.255.255.0",
             "networkid": "4935f651-04b5-49f7-b25a-55c6151ad5cb",
             "networkname": "vnf-net1",
             "secondaryip": [],
             "traffictype": "Guest",
             "type": "Isolated"
           },
           {
             "broadcasturi": "vlan://1175",
             "deviceid": "1",
             "extradhcpoption": [],
             "gateway": "10.1.1.1",
             "id": "34a285a4-f3f4-4314-80aa-376a194b8abf",
             "ipaddress": "10.1.1.162",
             "isdefault": false,
             "isolationuri": "vlan://1175",
             "macaddress": "02:01:00:ce:00:06",
             "netmask": "255.255.255.0",
             "networkid": "fee6a3ae-b99f-4ebe-b84b-c661fc4d5888",
             "networkname": "vnf-net2",
             "secondaryip": [],
             "traffictype": "Guest",
             "type": "Isolated"
           },
           {
             "broadcasturi": "vlan://1164",
             "deviceid": "2",
             "extradhcpoption": [],
             "gateway": "10.1.1.1",
             "id": "e6be4593-cc05-422d-a768-2702bdf64806",
             "ipaddress": "10.1.1.98",
             "isdefault": false,
             "isolationuri": "vlan://1164",
             "macaddress": "02:01:00:cf:00:06",
             "netmask": "255.255.255.0",
             "networkid": "a170136d-9699-4586-8eaf-f83f19255a54",
             "networkname": "vnf-net3",
             "secondaryip": [],
             "traffictype": "Guest",
             "type": "Isolated"
           },
           {
             "broadcasturi": "vlan://1161",
             "deviceid": "3",
             "extradhcpoption": [],
             "gateway": "10.1.1.1",
             "id": "9236a428-b995-4866-918a-0257ada77b09",
             "ipaddress": "10.1.1.229",
             "isdefault": false,
             "isolationuri": "vlan://1161",
             "macaddress": "02:01:00:cc:00:3d",
             "netmask": "255.255.255.0",
             "networkid": "9427bebb-848d-4b54-8e22-06bfdcc83dcd",
             "networkname": "test",
             "secondaryip": [],
             "traffictype": "Guest",
             "type": "Isolated"
           },
           {
             "broadcasturi": "vlan://1179",
             "deviceid": "4",
             "extradhcpoption": [],
             "gateway": "10.1.1.1",
             "id": "3a78494a-d496-4cd7-a899-610d85a917d5",
             "ipaddress": "10.1.1.27",
             "isdefault": false,
             "isolationuri": "vlan://1179",
             "macaddress": "02:01:00:cd:00:06",
             "netmask": "255.255.255.0",
             "networkid": "4935f651-04b5-49f7-b25a-55c6151ad5cb",
             "networkname": "vnf-net1",
             "secondaryip": [],
             "traffictype": "Guest",
             "type": "Isolated"
           },
           {
             "broadcasturi": "vlan://1175",
             "deviceid": "5",
             "extradhcpoption": [],
             "gateway": "10.1.1.1",
             "id": "54fd720d-aed4-47fa-aef3-2ec59541f9a9",
             "ipaddress": "10.1.1.27",
             "isdefault": false,
             "isolationuri": "vlan://1175",
             "macaddress": "02:01:00:ce:00:07",
             "netmask": "255.255.255.0",
             "networkid": "fee6a3ae-b99f-4ebe-b84b-c661fc4d5888",
             "networkname": "vnf-net2",
             "secondaryip": [],
             "traffictype": "Guest",
             "type": "Isolated"
           },
           {
             "broadcasturi": "vlan://1164",
             "deviceid": "6",
             "extradhcpoption": [],
             "gateway": "10.1.1.1",
             "id": "3ae4f2e9-9b87-4b81-b988-1dfff6b62765",
             "ipaddress": "10.1.1.72",
             "isdefault": false,
             "isolationuri": "vlan://1164",
             "macaddress": "02:01:00:cf:00:07",
             "netmask": "255.255.255.0",
             "networkid": "a170136d-9699-4586-8eaf-f83f19255a54",
             "networkname": "vnf-net3",
             "secondaryip": [],
             "traffictype": "Guest",
             "type": "Isolated"
           },
           {
             "broadcasturi": "vlan://1161",
             "deviceid": "7",
             "extradhcpoption": [],
             "gateway": "10.1.1.1",
             "id": "3e6a983f-5e01-4859-93ac-0c57a6d8e7dc",
             "ipaddress": "10.1.1.160",
             "isdefault": false,
             "isolationuri": "vlan://1161",
             "macaddress": "02:01:00:cc:00:3e",
             "netmask": "255.255.255.0",
             "networkid": "9427bebb-848d-4b54-8e22-06bfdcc83dcd",
             "networkname": "test",
             "secondaryip": [],
             "traffictype": "Guest",
             "type": "Isolated"
           },
           {
             "broadcasturi": "vlan://1179",
             "deviceid": "8",
             "extradhcpoption": [],
             "gateway": "10.1.1.1",
             "id": "9181e5aa-7b27-47fc-9095-4eca7a4138c7",
             "ipaddress": "10.1.1.201",
             "isdefault": false,
             "isolationuri": "vlan://1179",
             "macaddress": "02:01:00:cd:00:07",
             "netmask": "255.255.255.0",
             "networkid": "4935f651-04b5-49f7-b25a-55c6151ad5cb",
             "networkname": "vnf-net1",
             "secondaryip": [],
             "traffictype": "Guest",
             "type": "Isolated"
           },
           {
             "broadcasturi": "vlan://1175",
             "deviceid": "9",
             "extradhcpoption": [],
             "gateway": "10.1.1.1",
             "id": "c3473e84-b1d3-4de3-93c2-5144dc48e683",
             "ipaddress": "10.1.1.32",
             "isdefault": false,
             "isolationuri": "vlan://1175",
             "macaddress": "02:01:00:ce:00:08",
             "netmask": "255.255.255.0",
             "networkid": "fee6a3ae-b99f-4ebe-b84b-c661fc4d5888",
             "networkname": "vnf-net2",
             "secondaryip": [],
             "traffictype": "Guest",
             "type": "Isolated"
           }
         ],
         "state": "Running"
       }
     ]
   }
   ```
   
   </details>
   
   
   **Network Mapping Verification:**
   
   | Device ID | Actual Network | Expected Network | Status |
   |--:|----------------|------------------|--------|
   | 0 | vnf-net1 | vnf-net1 | PASS |
   | 1 | vnf-net2 | vnf-net2 | PASS |
   | 2 | vnf-net3 | vnf-net3 | PASS |
   | 3 | test     | test     | PASS |
   | 4 | vnf-net1 | vnf-net1 | PASS |
   | 5 | vnf-net2 | vnf-net2 | PASS |
   | 6 | vnf-net3 | vnf-net3 | PASS |
   | 7 | test     | test     | PASS |
   | 8 | vnf-net1 | vnf-net1 | PASS |
   | 9 | vnf-net2 | vnf-net2 | PASS |
   
   **Key Finding:** The `nicnetworklist[X].nic` parameter must use the OVA's 
InstanceID values (6, 9, 10, 11, 12, 13, 14, 15, 16, 17), NOT sequential device 
IDs (0-9). The UI handles this correctly by reading the InstanceIDs from the 
template's deployasisdetails. When using the API directly, users must reference 
the correct InstanceID values from the OVA template.
   
   ### TC9: Verify VNF Appliance Functionality Post-Deploy
   
   **Objective:** Verify deployed VNF appliance is functional
   **Expected Result:** VM runs with correct network configuration matching the 
deployment specification
   **Actual Result:** PASSED - All 10 NICs correctly mapped to expected 
networks, VM status Running
   **Test Evidence:**
   
   - CloudStack UI - VNF Appliances - vnf-tc7-correct-ids - NICs tab showing 
all 10 NICs with correct network mappings
   
   <img width="1374" height="868" alt="image" 
src="https://github.com/user-attachments/assets/29be4785-fac2-4ae1-9be9-895b95745b3a";
 />
   <img width="3106" height="1419" alt="image" 
src="https://github.com/user-attachments/assets/b58864a3-2e5c-49be-9c89-5a96c246b32a";
 />
   
   
   ### TC10: Deploy Multiple VNF Appliances from Same Template
   
   **Objective:** Verify template can be used for multiple deployments
   **Expected Result:** Multiple VMs can be deployed from the same template
   **Actual Result: **PASSED - 7 VMs deployed from the same template, 4 Running 
successfully
   **Test Evidence:**
   
   ```
   (localcloud) 🐱 > listVirtualMachines 
templateid=88ac23d3-a3dd-4bcc-ab69-716a2b6c86dd filter=id,name,state
   {
     "count": 7,
     "virtualmachine": [
       {
         "id": "4d319d1f-8de8-4b05-84ba-8b580d731ca5",
         "name": "vnf-tc1-full-api",
         "state": "Running"
       },
       {
         "id": "6d0f73d2-8e3c-474f-9223-2886c15e2cb2",
         "name": "VM-6d0f73d2-8e3c-474f-9223-2886c15e2cb2",
         "state": "Error"
       },
       {
         "id": "46f2bd49-ea2f-4e78-b8df-32510022b955",
         "name": "vnf-ui-test2",
         "state": "Error"
       },
       {
         "id": "a1593da3-fd58-494a-9e4e-977f8f24047c",
         "name": "vnf-ui-test3",
         "state": "Error"
       },
       {
         "id": "92b72388-5fcc-4469-9a28-e24b794b2cd2",
         "name": "vnf-tc7-mixed-networks",
         "state": "Running"
       },
       {
         "id": "3093cba4-9238-44f7-a5d4-198e4df0cad6",
         "name": "vnf-tc7-correct-ids",
         "state": "Running"
       },
       {
         "id": "a7268a53-e778-43f3-a3a4-b6b3038f0b22",
         "name": "vnf-tc8-missing-nics",
         "state": "Running"
       }
     ]
   }
   ```
   
   | Deployment Method              | Count | Status |
   |--------------------------------|-------|--------|
   | API (with properties)          | 4     | Running |
   | UI (without properties – bug #12510) | 3     | Error   |
   
   **Note:** The 3 VMs in `Error` state are due to UI bug **#12510** (vApp 
properties are not sent), not an issue with multiple deployments.
   
   ### TC11: Regular (non-deploy-as-is) VNF Template Still Works
   
   **Objective:** Regression test - ensure regular VNF templates still function 
after PR changes
   **Expected Result:** Existing VNF template functionality unchanged - 
deployment using networkids parameter works
   **Actual Result:** PASSED - VM deployed successfully with 2 NICs correctly 
mapped using networkids parameter
   **Test Evidence:**
   
   
   - regular VNF template 
   
   ```
   (localcloud) 🐱 > listVnfTemplates id=117856e5-6d81-40d9-bd77-7b3f1a706435 
templatefilter=all filter=id,name,isready,status
   {
     "count": 1,
     "template": [
       {
         "id": "117856e5-6d81-40d9-bd77-7b3f1a706435",
         "isready": true,
         "name": "vnf-tc11-regular",
         "status": "Download Complete"
       }
     ]
   }
   ```
   
   - appliance deployed successfully with the regular VNF template
   
   <details><summary><code>(localcloud) 🐱 > deployVnfAppliance 
templateid=117856e5-6d81-40d9-bd77-7b3f1a706435 
serviceofferingid=63b6851c-631c-4b30-81f0-e959e2eb6052 
zoneid=e9594751-da68-4f49-924f-222ba4c15876 name=vnf-tc11-regular-deploy 
networkids=4935f651-04b5-49f7-b25a-55c6151ad5cb,fee6a3ae-b99f-4ebe-b84b-c661fc4d5888</code></summary>
   
   ```json
   {
     "virtualmachine": {
       "account": "admin",
       "affinitygroup": [],
       "arch": "x86_64",
       "cpunumber": 1,
       "cpuspeed": 500,
       "created": "2026-01-23T12:00:29+0000",
       "deleteprotection": false,
       "details": {
         "cpuOvercommitRatio": "2.0",
         "dataDiskController": "lsilogic",
         "dataDiskControllervmdisk2": "lsilogic",
         "rootDiskController": "ide"
       },
       "displayname": "vnf-tc11-regular-deploy",
       "displayvm": true,
       "domain": "ROOT",
       "domainid": "caacffaf-f7cc-11f0-bc70-1e00b6000327",
       "domainpath": "/",
       "guestosid": "cac8e8aa-f7cc-11f0-bc70-1e00b6000327",
       "haenable": false,
       "hasannotations": false,
       "hostcontrolstate": "Enabled",
       "hostid": "cfcf5c46-b2dc-4c40-b487-eb8a111a83b3",
       "hostname": "10.0.35.172",
       "hypervisor": "VMware",
       "id": "6e78683a-f8d9-4c15-84c8-53fd72f337ed",
       "instancename": "i-2-17-VM",
       "ipaddress": "10.1.1.31",
       "isdynamicallyscalable": false,
       "isodisplaytext": "day0.iso",
       "isoid": "222b267d-0b28-4ce5-976d-6dfa6493aed5",
       "isoname": "day0.iso",
       "jobid": "9040d257-ea37-4cd1-9d2b-3866c898cec5",
       "jobstatus": 0,
       "lastupdated": "2026-01-23T12:01:07+0000",
       "memory": 512,
       "name": "vnf-tc11-regular-deploy",
       "nic": [
         {
           "broadcasturi": "vlan://1175",
           "deviceid": "1",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "0ca0727f-e737-4ee2-9343-41837b2445b3",
           "ipaddress": "10.1.1.254",
           "isdefault": false,
           "isolationuri": "vlan://1175",
           "macaddress": "02:01:00:ce:00:0a",
           "netmask": "255.255.255.0",
           "networkid": "fee6a3ae-b99f-4ebe-b84b-c661fc4d5888",
           "networkname": "vnf-net2",
           "publicip": "10.0.52.188",
           "publicipid": "0ac05a28-6a86-476a-ae41-53e1162f9396",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         },
         {
           "broadcasturi": "vlan://1179",
           "deviceid": "0",
           "extradhcpoption": [],
           "gateway": "10.1.1.1",
           "id": "230e3d30-409e-40ce-81d1-31043d2ec66b",
           "ipaddress": "10.1.1.31",
           "isdefault": true,
           "isolationuri": "vlan://1179",
           "macaddress": "02:01:00:cd:00:0a",
           "netmask": "255.255.255.0",
           "networkid": "4935f651-04b5-49f7-b25a-55c6151ad5cb",
           "networkname": "vnf-net1",
           "publicip": "10.0.52.187",
           "publicipid": "5f84bd0b-8c78-4cbe-96f4-16ed55320408",
           "secondaryip": [],
           "traffictype": "Guest",
           "type": "Isolated"
         }
       ],
       "osdisplayname": "Other 2.6x Linux (64-bit)",
       "ostypeid": "cac8e8aa-f7cc-11f0-bc70-1e00b6000327",
       "passwordenabled": false,
       "pooltype": "PreSetup",
       "publicip": "10.0.52.187",
       "publicipid": "5f84bd0b-8c78-4cbe-96f4-16ed55320408",
       "receivedbytes": 0,
       "rootdeviceid": 0,
       "rootdevicetype": "ROOT",
       "securitygroup": [],
       "sentbytes": 0,
       "serviceofferingid": "63b6851c-631c-4b30-81f0-e959e2eb6052",
       "serviceofferingname": "Small Instance",
       "state": "Running",
       "tags": [],
       "templatedisplaytext": "TC11 Regular VNF template",
       "templateformat": "OVA",
       "templateid": "117856e5-6d81-40d9-bd77-7b3f1a706435",
       "templatename": "vnf-tc11-regular",
       "templatetype": "VNF",
       "userid": "1095c455-f7cd-11f0-bc70-1e00b6000327",
       "username": "admin",
       "vnfnics": [
         {
           "deviceid": 0,
           "management": true,
           "name": "management",
           "required": true
         },
         {
           "deviceid": 1,
           "management": true,
           "name": "wan",
           "required": true
         }
       ],
       "zoneid": "e9594751-da68-4f49-924f-222ba4c15876",
       "zonename": "ref-trl-10698-v-Mol8-rositsa-kyuchukova"
     }
   }
   ```
   
   </details>
   
   | Device ID | VNF NIC Name (from template) | Network We Specified        | 
Network VM Actually Got |
   
|----------:|-----------------------------|-----------------------------|--------------------------|
   | 0         | management                  | vnf-net1 (1st in list)      | 
vnf-net1                 |
   | 1         | wan                         | vnf-net2 (2nd in list)      | 
vnf-net2                 |
   
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to