Hi all,
I’d like to bring attention to a follow-up PR
[1] I opened to update VEP 41 with some requirements around handling external dependencies.
Quick recap: the Object Graph is meant to be a single source of truth listing all the objects a VM depends on. This is important for things like backup/restore or migration, where missing a dependency can easily cause failures or force users to build their own custom graph. Right now, the implementation only includes the main kubevirt and k8s resources. But there are also critical dependencies that live outside of Kubevirt (for example NADS or IPAM claims), which are still essential for VM functionality in scenarios like cross-cluster live migration.
We’ve talked about this in several meetings, and there’s still disagreement about whether kubevirt/kubevirt should know about these external resources. One suggestion has been to move the graph outside of Kubevirt, but we think that goes against the original VEP decision to keep it authoritative inside the project.
To address this, I opened this follow-up PR
[1] to define clear conditions for when an external resource qualifies for inclusion in the graph:
- it’s directly relevant to a VM/VMI operation we support (e.g. cross-cluster live migration)
- it’s either explicitly referenced in the VM spec (like NADs) or defined by a KubeVirt-owned project (like IPAMClaims from ipam-extensions)
- it’s discoverable in a reliable and consistent way (by kubevirt-defined labels)
- If needed, it's accessed dynamically as an unstructured object (so no external imports required)
- the logic stays limited to the graph code itself without affecting into the rest of kubevirt.
I believe we can find a middle ground between keeping kubevirt free of unnecessary knowledge of other projects and still including minimal awareness of the external resources that are required for supported operations. This kubevirt PR
[2] shows how this works in practice.
I also think it’s worth mentioning that kubevirt already has awareness of external dependencies today and this will always be the case to some extent. Rather than rejecting these proposals outright, it’s more productive to define what’s acceptable and where to draw the line. That’s what the VEP update is trying to achieve in some way.
Curious to hear your thoughts, and feel free to add feedback directly in the VEP.
[1]
https://github.com/kubevirt/enhancements/pull/78[2]
https://github.com/kubevirt/kubevirt/pull/15186