Skip to content

Conversation

@PhilippMatthes
Copy link
Member

@PhilippMatthes PhilippMatthes commented Dec 29, 2025

In this pull request we implemented a cortex filtering pipeline for KVM. This pipeline uses the hypervisor CRD as single source of truth to find out on which hypervisors a vm can be scheduled. To complete this implementation, we extended the hypervisor crd in this pull request. The hypervisor crd pull request added additional fields and removed outdated ones, which need to be autodiscovered in the kvm node agent. The following fields are now populated:

Support filtering based on hypervisor type and other capabilities:

  • Export the hypervisor type, architecture, supported devices, supported cpu modes, and supported features

Capacity filtering:

  • Aggregate the allocated and total available capacity and populate the corresponding fields

(Bonus)

  • Add numa cell capacity & allocation information so we can implement numa sensitive initial placement

When done:

  • Test with ssh-forwarded libvirt socket

Note

The scope of this PR is to establish a minimum viable scheduling pipeline in cortex, with the least amount of changes possible. Refactorings of the hypervisor crd spec can follow if needed.

@github-actions
Copy link

Merging this branch changes the coverage (1 decrease, 5 increase)

Impacted Packages Coverage Δ 🤖
github.com/cobaltcore-dev/kvm-node-agent/internal/controller 23.42% (+2.04%) 👍
github.com/cobaltcore-dev/kvm-node-agent/internal/emulator 0.00% (ø)
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt 11.08% (+2.58%) 👍
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/capabilities 63.64% (-3.86%) 👎
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/domcapabilities 71.79% (+71.79%) 🌟
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/dominfo 62.50% (+62.50%) 🌟
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/util 100.00% (+100.00%) 🌟

Coverage by file

Changed files (no unit tests)

Changed File Coverage Δ Total Covered Missed 🤖
github.com/cobaltcore-dev/kvm-node-agent/internal/controller/hypervisor_controller.go 34.91% (+1.57%) 106 (+13) 37 (+6) 69 (+7) 👍
github.com/cobaltcore-dev/kvm-node-agent/internal/emulator/libvirt.go 0.00% (ø) 0 0 0
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/capabilities/client.go 63.64% (+2.35%) 33 (+2) 21 (+2) 12 👍
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/capabilities/schema.go 0.00% (-88.89%) 0 (-9) 0 (-8) 0 (-1) 💀 💀 💀 💀 💀
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/domcapabilities/client.go 71.79% (+71.79%) 39 (+39) 28 (+28) 11 (+11) 🌟
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/domcapabilities/example.go 0.00% (ø) 0 0 0
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/domcapabilities/schema.go 0.00% (ø) 0 0 0
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/dominfo/client.go 62.50% (+62.50%) 48 (+48) 30 (+30) 18 (+18) 🌟
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/dominfo/example.go 0.00% (ø) 0 0 0
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/dominfo/schema.go 0.00% (ø) 0 0 0
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/interface.go 0.00% (ø) 0 0 0
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/interface_mock.go 35.00% (+3.75%) 120 (+24) 42 (+12) 78 (+12) 👍
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/libvirt.go 0.00% (ø) 35 (+2) 0 35 (+2)
github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/util/util.go 100.00% (+100.00%) 9 (+9) 9 (+9) 0 🌟

Please note that the "Total", "Covered", and "Missed" counts above refer to code statements instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code.

Changed unit test files

  • github.com/cobaltcore-dev/kvm-node-agent/internal/controller/hypervisor_controller_test.go
  • github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/capabilities/client_test.go
  • github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/domcapabilities/client_test.go
  • github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/domcapabilities/schema_test.go
  • github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/dominfo/client_test.go
  • github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/dominfo/schema_test.go
  • github.com/cobaltcore-dev/kvm-node-agent/internal/libvirt/util/util_test.go

@PhilippMatthes
Copy link
Member Author

Technically this is ready for review, but I want to make sure everything is implemented correctly and will check with a ssh forwarded libvirt socket, once I get an available hypervisor.

@PhilippMatthes PhilippMatthes marked this pull request as ready for review January 2, 2026 12:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants