When using Neutron, it will prevent you to delete a port if the subports are still attached:
https://review.opendev.org/c/openstack/neutron/+/885154
Because of this, if you delete a VM with subports attached, you will end up with a VM in ERROR state:
```
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] Traceback (most recent call last):
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] File "/var/lib/openstack/lib/python3.10/site-packages/nova/network/neutron.py", line 1768, in _delete_ports
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] neutron.delete_port(port)
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] File "/var/lib/openstack/lib/python3.10/site-packages/nova/network/neutron.py", line 196, in wrapper
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] ret = obj(*args, **kwargs)
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] File "/var/lib/openstack/lib/python3.10/site-packages/neutronclient/v2_0/client.py", line 833, in delete_port
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] return self.delete(self.port_path % (port))
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] File "/var/lib/openstack/lib/python3.10/site-packages/nova/network/neutron.py", line 196, in wrapper
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] ret = obj(*args, **kwargs)
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] File "/var/lib/openstack/lib/python3.10/site-packages/neutronclient/v2_0/client.py", line 352, in delete
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] return self.retry_request("DELETE", action, body=body,
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] File "/var/lib/openstack/lib/python3.10/site-packages/nova/network/neutron.py", line 196, in wrapper
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] ret = obj(*args, **kwargs)
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] File "/var/lib/openstack/lib/python3.10/site-packages/neutronclient/v2_0/client.py", line 333, in retry_request
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] return self.do_request(method, action, body=body,
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] File "/var/lib/openstack/lib/python3.10/site-packages/nova/network/neutron.py", line 196, in wrapper
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] ret = obj(*args, **kwargs)
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] File "/var/lib/openstack/lib/python3.10/site-packages/neutronclient/v2_0/client.py", line 297, in do_request
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] self._handle_fault_response(status_code, replybody, resp)
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] File "/var/lib/openstack/lib/python3.10/site-packages/nova/network/neutron.py", line 196, in wrapper
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] ret = obj(*args, **kwargs)
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] File "/var/lib/openstack/lib/python3.10/site-packages/neutronclient/v2_0/client.py", line 272, in _handle_fault_response
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] exception_handler_v20(status_code, error_body)
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] File "/var/lib/openstack/lib/python3.10/site-packages/neutronclient/v2_0/client.py", line 90, in exception_handler_v20
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] raise client_exc(message=error_message,
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] neutronclient.common.exceptions.Conflict: Port c4381527-ff2e-48b0-b4da-3e08928f7c1b is currently a parent port for trunk e938d9b3-82e5-4bc7-8bb3-7e075d2f8d9e.
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] Neutron server returns request_ids: ['req-27e65a3d-79e7-40f8-9525-24bd43592167']
2023-09-27 18:31:01.056 328858 ERROR nova.network.neutron [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884]
2023-09-27 18:31:01.057 328858 ERROR nova.compute.manager [None req-718be02e-89c0-44a3-9781-9079deab9990 959a3ebd6c2048ffa592d7c4bf59ae22 4b633c451ac74233be3721a3635275e5 - - default default] [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] Failed to deallocate network for instance. Error: Port c4381527-ff2e-48b0-b4da-3e08928f7c1b is currently a parent port for trunk e938d9b3-82e5-4bc7-8bb3-7e075d2f8d9e.
2023-09-27 18:31:01.095 328858 ERROR nova.compute.manager [None req-718be02e-89c0-44a3-9781-9079deab9990 959a3ebd6c2048ffa592d7c4bf59ae22 4b633c451ac74233be3721a3635275e5 - - default default] [instance: 08ca5cf4-c86a-4446-a031-a3b84ff47884] Setting instance vm_state to ERROR: neutronclient.common.exceptions.Conflict: Port c4381527-ff2e-48b0-b4da-3e08928f7c1b is currently a parent port for trunk e938d9b3-82e5-4bc7-8bb3-7e075d2f8d9e.
```
We need to handle this in a more graceful way, or perhaps re-order the ports to try deleting the subports first and then any other ports.
As a workaround for the user, they can detach the ports first and then they can delete it after.