diff --git a/pkg/device/probe.go b/pkg/device/probe.go index 16ac61c5..349893e1 100644 --- a/pkg/device/probe.go +++ b/pkg/device/probe.go @@ -101,6 +101,11 @@ func (d Device) Make() string { return strings.Join(tokens, " ") } +// PartTableType returns partition table type. +func (d Device) PartTableType() string { + return d.udevData["E:ID_PART_TABLE_TYPE"] +} + // FSType returns filesystem type. func (d Device) FSType() string { return d.udevData["E:ID_FS_TYPE"] @@ -111,8 +116,8 @@ func (d Device) FSUUID() string { return d.udevData["E:ID_FS_UUID"] } -// deniedReason returns the reason if the device is denied for initialization. -func (d Device) deniedReason() string { +// DeniedReason returns the reason if the device is denied for initialization. +func (d Device) DeniedReason() string { var reasons []string if d.Size < minSupportedDeviceSize { @@ -175,7 +180,7 @@ func (d Device) ToNodeDevice(nodeID directpvtypes.NodeID) types.Device { Make: d.Make(), FSType: d.FSType(), FSUUID: d.FSUUID(), - DeniedReason: d.deniedReason(), + DeniedReason: d.DeniedReason(), } } diff --git a/pkg/initrequest/event.go b/pkg/initrequest/event.go index 3de4e2f0..9a014e3b 100644 --- a/pkg/initrequest/event.go +++ b/pkg/initrequest/event.go @@ -191,15 +191,19 @@ func (handler *initRequestEventHandler) initDevices(ctx context.Context, req *ty case !found: results[i].Error = "device not found" case device.ID(handler.nodeID) != req.Spec.Devices[i].ID: - results[i].Error = "device's state changed" + results[i].Error = "device state changed" default: - wg.Add(1) - go func(i int, device pkgdevice.Device, force bool) { - defer wg.Done() - if err := handler.initDevice(device, force); err != nil { - results[i].Error = err.Error() - } - }(i, device, req.Spec.Devices[i].Force) + if deniedReason := device.DeniedReason(); deniedReason == "" { + wg.Add(1) + go func(i int, device pkgdevice.Device, force bool) { + defer wg.Done() + if err := handler.initDevice(device, force); err != nil { + results[i].Error = err.Error() + } + }(i, device, req.Spec.Devices[i].Force || device.PartTableType() != "") + } else { + results[i].Error = "device init not permitted; " + deniedReason + } } } wg.Wait()