Skip to content

Commit

Permalink
word: add more description for enable PCI device while usb devices ar…
Browse files Browse the repository at this point in the history
…e using it

Signed-off-by: Jack Yu <[email protected]>
  • Loading branch information
Yu-Jack committed Feb 13, 2025
1 parent 6be4a23 commit 4ac6498
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 9 deletions.
17 changes: 13 additions & 4 deletions pkg/webhook/pcideviceclaim.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,14 @@ type pciDeviceClaimValidator struct {
deviceCache v1beta1.PCIDeviceCache
kubevirtCache kubevirtctl.VirtualMachineCache
usbDeviceClaimCache v1beta1.USBDeviceClaimCache
usbDeviceCache v1beta1.USBDeviceCache
}

func NewPCIDeviceClaimValidator(deviceCache v1beta1.PCIDeviceCache, kubevirtCache kubevirtctl.VirtualMachineCache, usbDeviceClaimCache v1beta1.USBDeviceClaimCache) types.Validator {
func NewPCIDeviceClaimValidator(deviceCache v1beta1.PCIDeviceCache, kubevirtCache kubevirtctl.VirtualMachineCache, usbDeviceClaimCache v1beta1.USBDeviceClaimCache, usbDeviceCache v1beta1.USBDeviceCache) types.Validator {
return &pciDeviceClaimValidator{
deviceCache: deviceCache,
usbDeviceClaimCache: usbDeviceClaimCache,
usbDeviceCache: usbDeviceCache,
kubevirtCache: kubevirtCache,
}
}
Expand Down Expand Up @@ -64,10 +66,17 @@ func (pdc *pciDeviceClaimValidator) Create(_ *types.Request, newObj runtime.Obje

if len(usbClaimDevs) != 0 {
var used []string
for _, usbDev := range usbClaimDevs {
used = append(used, usbDev.Name)
for _, usbClaimDev := range usbClaimDevs {
usbDev, err := pdc.usbDeviceCache.Get(usbClaimDev.Name)
if err != nil {
return err
}
used = append(used, fmt.Sprintf("%s (%s)", usbDev.Name, usbDev.Status.Description))
}
err = fmt.Errorf("usbdeviceclaim [%s] is used, so its pcidevice %s can't be claimed", strings.Join(used, ","), pciDev.Name)

pciName := fmt.Sprintf("%s (%s)", pciDev.Name, pciDev.Status.Description)
allUsbDevs := strings.Join(used, ", ")
err = fmt.Errorf("These USB devices [%s] are using the PCI USB Controller [%s], so it can't be passed through. \n If you need to pass through PCI USB controller, please detach and remove all USB devices which are using this PCI USB controller", allUsbDevs, pciName)
logrus.Errorf(err.Error())
return err
}
Expand Down
15 changes: 10 additions & 5 deletions pkg/webhook/pcideviceclaim_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,9 @@ func Test_PCIDeviceClaimWithoutIommu(t *testing.T) {
fakeClient := fake.NewSimpleClientset(node1dev1, node1dev2, node1dev3, node2dev1, node1dev1Claim, node1NoIommuDev)
pciDeviceCache := fakeclients.PCIDevicesCache(fakeClient.DevicesV1beta1().PCIDevices)
usbDeviceClaimCache := fakeclients.USBDeviceClaimsCache(fakeClient.DevicesV1beta1().USBDeviceClaims)
usbDeviceCache := fakeclients.USBDeviceCache(fakeClient.DevicesV1beta1().USBDevices)

pciValidator := NewPCIDeviceClaimValidator(pciDeviceCache, nil, usbDeviceClaimCache)
pciValidator := NewPCIDeviceClaimValidator(pciDeviceCache, nil, usbDeviceClaimCache, usbDeviceCache)

err := pciValidator.Create(nil, node1NoIommuClaim)
assert.Error(err, "expected to find error")
Expand All @@ -70,8 +71,9 @@ func Test_PCIDeviceClaimWithIommu(t *testing.T) {
fakeClient := fake.NewSimpleClientset(node1dev1, node1dev2, node1dev3, node2dev1, node1NoIommuDev)
usbDeviceClaimCache := fakeclients.USBDeviceClaimsCache(fakeClient.DevicesV1beta1().USBDeviceClaims)
pciDeviceCache := fakeclients.PCIDevicesCache(fakeClient.DevicesV1beta1().PCIDevices)
usbDeviceCache := fakeclients.USBDeviceCache(fakeClient.DevicesV1beta1().USBDevices)

pciValidator := NewPCIDeviceClaimValidator(pciDeviceCache, nil, usbDeviceClaimCache)
pciValidator := NewPCIDeviceClaimValidator(pciDeviceCache, nil, usbDeviceClaimCache, usbDeviceCache)

err := pciValidator.Create(nil, node1dev1Claim)
assert.NoError(err, "expected to find no error")
Expand All @@ -82,8 +84,9 @@ func Test_CreatePCIDeviceClaimWhenUSBInUse(t *testing.T) {
fakeClient := fake.NewSimpleClientset(node1dev1, node1dev2, node1dev3, node2dev1, usbDeviceClaim1)
pciDeviceCache := fakeclients.PCIDevicesCache(fakeClient.DevicesV1beta1().PCIDevices)
usbDeviceClaimCache := fakeclients.USBDeviceClaimsCache(fakeClient.DevicesV1beta1().USBDeviceClaims)
usbDeviceCache := fakeclients.USBDeviceCache(fakeClient.DevicesV1beta1().USBDevices)

pciValidator := NewPCIDeviceClaimValidator(pciDeviceCache, nil, usbDeviceClaimCache)
pciValidator := NewPCIDeviceClaimValidator(pciDeviceCache, nil, usbDeviceClaimCache, usbDeviceCache)

err := pciValidator.Create(nil, node1dev1Claim)
assert.Error(err, "expected to get error")
Expand All @@ -95,9 +98,10 @@ func Test_DeletePCIDeviceClaimInUse(t *testing.T) {
harvesterfakeClient := harvesterfake.NewSimpleClientset(vmWithIommuDevice)
pciDeviceCache := fakeclients.PCIDevicesCache(fakeClient.DevicesV1beta1().PCIDevices)
usbDeviceClaimCache := fakeclients.USBDeviceClaimsCache(fakeClient.DevicesV1beta1().USBDeviceClaims)
usbDeviceCache := fakeclients.USBDeviceCache(fakeClient.DevicesV1beta1().USBDevices)
vmCache := fakeclients.VirtualMachineCache(harvesterfakeClient.KubevirtV1().VirtualMachines)

pciValidator := NewPCIDeviceClaimValidator(pciDeviceCache, vmCache, usbDeviceClaimCache)
pciValidator := NewPCIDeviceClaimValidator(pciDeviceCache, vmCache, usbDeviceClaimCache, usbDeviceCache)

err := pciValidator.Delete(nil, node1dev1Claim)
assert.Error(err, "expected to get error")
Expand All @@ -110,8 +114,9 @@ func Test_DeletePCIDeviceClaimNotInUse(t *testing.T) {
pciDeviceCache := fakeclients.PCIDevicesCache(fakeClient.DevicesV1beta1().PCIDevices)
vmCache := fakeclients.VirtualMachineCache(harvesterfakeClient.KubevirtV1().VirtualMachines)
usbDeviceClaimCache := fakeclients.USBDeviceClaimsCache(fakeClient.DevicesV1beta1().USBDeviceClaims)
usbDeviceCache := fakeclients.USBDeviceCache(fakeClient.DevicesV1beta1().USBDevices)

pciValidator := NewPCIDeviceClaimValidator(pciDeviceCache, vmCache, usbDeviceClaimCache)
pciValidator := NewPCIDeviceClaimValidator(pciDeviceCache, vmCache, usbDeviceClaimCache, usbDeviceCache)

err := pciValidator.Delete(nil, node1dev1Claim)
assert.NoError(err, "expected no error during validation")
Expand Down
1 change: 1 addition & 0 deletions pkg/webhook/validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ func Validation(clients *Clients) (http.Handler, []types.Resource, error) {
clients.DeviceFactory.Devices().V1beta1().PCIDevice().Cache(),
clients.KubevirtFactory.Kubevirt().V1().VirtualMachine().Cache(),
clients.DeviceFactory.Devices().V1beta1().USBDeviceClaim().Cache(),
clients.DeviceFactory.Devices().V1beta1().USBDevice().Cache(),
),
NewVGPUValidator(clients.KubevirtFactory.Kubevirt().V1().VirtualMachine().Cache()),
NewSRIOVGPUValidator(clients.KubevirtFactory.Kubevirt().V1().VirtualMachine().Cache()),
Expand Down

0 comments on commit 4ac6498

Please sign in to comment.