apache / apache/cloudstack

Import Instance (VMware to KVM): guest network is not scoped to the destination account, and the mismatch is only rejected after the disk copy has already run

未關閉
#13,780 2 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
component:migration
主要語言
Java
星號
3.1k
分支
1.4k
平均合併
6 天 19 小時
30 天內合併 PR
32

描述

# Description

Two related problems, one in the UI and one in the API. Seen on a current main/4.23 build, but the behavior looks much older than that.

## 1. UI: the network dropdown ignores the destination account

In the Import Instance form (Tools > Import-Export Instances, "VMware migration mode", the VDDK mode that is selected by default), the guest network dropdown is already pre-filled before you pick the destination domain and account — and it happily preselects a network that belongs to some other account (in my case an isolated network owned by an account in a subdomain).

Changing the destination domain/account later does not re-filter the network list. So as admin you can very easily submit an import for account X with a network that belongs to account Y, without ever noticing.

The dropdown should only offer networks the chosen destination account (or project) can actually use, and it should re-populate when the domain/account selection changes.

## 2. API: the mismatch is only caught at the very end

`importVm` (and the same for the newer VMware migration APIs) accepts the account/network mismatch at submit time. The whole disk copy then runs — for a big VM that can be hours — and only the final import step fails, with:

```
NIC(ID: ...) needs a valid IP address ... / Unable to use network with id= ..., permission denied
```

So the expensive part of the work is done and thrown away, and the error shows up at the point where it is least useful.

The ownership check is clearly there — it just runs last. The same check should run up front, when the import is submitted, so a bad combination is rejected before any data is copied. (Resource limits behave the same way, by the way: an account already at its VM limit can start an import, the full copy runs, and the limit is only enforced at the end. Same idea — check it up front.)

# Steps to reproduce

1. Have a domain with an account, and an isolated network owned by that account.
2. As root admin, open Tools > Import-Export Instances, VMware migration mode.
3. Note the network preselected in the form — it can be the other account's network, before any domain/account was chosen.
4. Pick a different destination account, keep the preselected network, submit.
5. The import runs the full disk copy and fails at the last step with a permission error on the network.

# Expected

- The UI only offers networks that the selected destination account/project can use.
- The API rejects an account/network mismatch (and blown resource limits) at submit time, before any data is copied.

# Actual

- The UI preselects and offers networks across accounts.
- The API accepts the mismatch and fails only after the full copy, at the import step.

貢獻指南

開啟貢獻指南

研究方向

從 VMware 遷移模式下 Tools > Import-Export Instances 中的 Import Instance 表單,以及 importVm 和較新的 VMware migration API 進入點開始。重現跨帳戶網路選取和延遲失敗;完成條件是 UI 為目的地帳戶或專案篩選並重新填入網路,而 API 在複製磁碟之前驗證網路擁有權和資源限制。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
java
領域
backend-api-design, cloud, frontend, infrastructure
Issue 類型
缺陷
難度
4/5
預估耗時
3-5 天
活躍度
冷清
描述清晰度
基本清楚
新手友好度
48/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。