mirror of
https://github.com/aljazceru/kata-containers.git
synced 2026-01-04 23:14:19 +01:00
runtime: device/persist: drop persist dependency from device pkgs
Rather than have device package depend on persist, let's define the (almost duplicate) structures within device itself, and have the Kata Container's persist pkg import these. This'll help avoid unecessary dependencies within our core packages. Signed-off-by: Eric Ernst <eric_ernst@apple.com>
This commit is contained in:
@@ -10,7 +10,6 @@ import (
|
||||
"context"
|
||||
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/config"
|
||||
persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
@@ -78,10 +77,10 @@ type Device interface {
|
||||
Dereference() uint
|
||||
|
||||
// Save converts Device to DeviceState
|
||||
Save() persistapi.DeviceState
|
||||
Save() config.DeviceState
|
||||
|
||||
// Load loads DeviceState and converts it to specific device
|
||||
Load(persistapi.DeviceState)
|
||||
Load(config.DeviceState)
|
||||
}
|
||||
|
||||
// DeviceManager can be used to create a new device, this can be used as single
|
||||
@@ -94,5 +93,5 @@ type DeviceManager interface {
|
||||
IsDeviceAttached(string) bool
|
||||
GetDeviceByID(string) Device
|
||||
GetAllDevices() []Device
|
||||
LoadDevices([]persistapi.DeviceState)
|
||||
LoadDevices([]config.DeviceState)
|
||||
}
|
||||
|
||||
124
src/runtime/pkg/device/config/device_state.go
Normal file
124
src/runtime/pkg/device/config/device_state.go
Normal file
@@ -0,0 +1,124 @@
|
||||
// Copyright (c) 2016 Intel Corporation
|
||||
// Copyright (c) 2019 Huawei Corporation
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
package config
|
||||
|
||||
import vcTypes "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||
|
||||
// ============= sandbox level resources =============
|
||||
|
||||
// BlockDrive represents a block storage drive which may be used in case the storage
|
||||
// driver has an underlying block storage device.
|
||||
type BlockDriveState struct {
|
||||
// File is the path to the disk-image/device which will be used with this drive
|
||||
File string
|
||||
|
||||
// Format of the drive
|
||||
Format string
|
||||
|
||||
// ID is used to identify this drive in the hypervisor options.
|
||||
ID string
|
||||
|
||||
// MmioAddr is used to identify the slot at which the drive is attached (order?).
|
||||
MmioAddr string
|
||||
|
||||
// SCSI Address of the block device, in case the device is attached using SCSI driver
|
||||
// SCSI address is in the format SCSI-Id:LUN
|
||||
SCSIAddr string
|
||||
|
||||
// NvdimmID is the nvdimm id inside the VM
|
||||
NvdimmID string
|
||||
|
||||
// VirtPath at which the device appears inside the VM, outside of the container mount namespace
|
||||
VirtPath string
|
||||
|
||||
// DevNo
|
||||
DevNo string
|
||||
|
||||
// PCIPath is the PCI path used to identify the slot at which the drive is attached.
|
||||
PCIPath vcTypes.PciPath
|
||||
|
||||
// Index assigned to the drive. In case of virtio-scsi, this is used as SCSI LUN index
|
||||
Index int
|
||||
|
||||
// Pmem enabled persistent memory. Use File as backing file
|
||||
// for a nvdimm device in the guest.
|
||||
Pmem bool
|
||||
}
|
||||
|
||||
// VFIODev represents a VFIO drive used for hotplugging
|
||||
type VFIODevState struct {
|
||||
// ID is used to identify this drive in the hypervisor options.
|
||||
ID string
|
||||
|
||||
// BDF (Bus:Device.Function) of the PCI address
|
||||
BDF string
|
||||
|
||||
// Sysfsdev of VFIO mediated device
|
||||
SysfsDev string
|
||||
|
||||
// Type of VFIO device
|
||||
Type uint32
|
||||
}
|
||||
|
||||
// VhostUserDeviceAttrs represents data shared by most vhost-user devices
|
||||
type VhostUserDeviceAttrsState struct {
|
||||
DevID string
|
||||
SocketPath string
|
||||
Type string
|
||||
|
||||
// MacAddress is only meaningful for vhost user net device
|
||||
MacAddress string
|
||||
|
||||
// PCIPath is the PCI path used to identify the slot at which the drive is attached.
|
||||
// It is only meaningful for vhost user block devices
|
||||
PCIPath vcTypes.PciPath
|
||||
|
||||
// Block index of the device if assigned
|
||||
Index int
|
||||
}
|
||||
|
||||
// DeviceState is sandbox level resource which represents host devices
|
||||
// plugged to hypervisor, one Device can be shared among containers in POD
|
||||
// Refs: virtcontainers/device/drivers/generic.go:GenericDevice
|
||||
type DeviceState struct {
|
||||
// DriverOptions is specific options for each device driver
|
||||
// for example, for BlockDevice, we can set DriverOptions["block-driver"]="virtio-blk"
|
||||
DriverOptions map[string]string
|
||||
|
||||
// VhostUserDeviceAttrsState is specific for vhost-user device driver
|
||||
VhostUserDev *VhostUserDeviceAttrsState `json:",omitempty"`
|
||||
|
||||
// BlockDrive is specific for block device driver
|
||||
BlockDrive *BlockDriveState `json:",omitempty"`
|
||||
|
||||
ID string
|
||||
|
||||
// Type is used to specify driver type
|
||||
// Refs: virtcontainers/device/config/config.go:DeviceType
|
||||
Type string
|
||||
|
||||
// Type of device: c, b, u or p
|
||||
// c , u - character(unbuffered)
|
||||
// p - FIFO
|
||||
// b - block(buffered) special file
|
||||
// More info in mknod(1).
|
||||
DevType string
|
||||
|
||||
// VFIODevState is specific VFIO device driver
|
||||
VFIODevs []*VFIODevState `json:",omitempty"`
|
||||
|
||||
RefCount uint
|
||||
AttachCount uint
|
||||
|
||||
// Major, minor numbers for device.
|
||||
Major int64
|
||||
Minor int64
|
||||
|
||||
// ColdPlug specifies whether the device must be cold plugged (true)
|
||||
// or hot plugged (false).
|
||||
ColdPlug bool
|
||||
}
|
||||
@@ -12,7 +12,6 @@ import (
|
||||
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/api"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/config"
|
||||
persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils"
|
||||
)
|
||||
|
||||
@@ -159,13 +158,13 @@ func (device *BlockDevice) GetDeviceInfo() interface{} {
|
||||
}
|
||||
|
||||
// Save converts Device to DeviceState
|
||||
func (device *BlockDevice) Save() persistapi.DeviceState {
|
||||
func (device *BlockDevice) Save() config.DeviceState {
|
||||
ds := device.GenericDevice.Save()
|
||||
ds.Type = string(device.DeviceType())
|
||||
|
||||
drive := device.BlockDrive
|
||||
if drive != nil {
|
||||
ds.BlockDrive = &persistapi.BlockDrive{
|
||||
ds.BlockDrive = &config.BlockDriveState{
|
||||
File: drive.File,
|
||||
Format: drive.Format,
|
||||
ID: drive.ID,
|
||||
@@ -183,7 +182,7 @@ func (device *BlockDevice) Save() persistapi.DeviceState {
|
||||
}
|
||||
|
||||
// Load loads DeviceState and converts it to specific device
|
||||
func (device *BlockDevice) Load(ds persistapi.DeviceState) {
|
||||
func (device *BlockDevice) Load(ds config.DeviceState) {
|
||||
device.GenericDevice = &GenericDevice{}
|
||||
device.GenericDevice.Load(ds)
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import (
|
||||
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/api"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/config"
|
||||
persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api"
|
||||
)
|
||||
|
||||
// GenericDevice refers to a device that is neither a VFIO device, block device or VhostUserDevice.
|
||||
@@ -128,8 +127,8 @@ func (device *GenericDevice) bumpAttachCount(attach bool) (skip bool, err error)
|
||||
}
|
||||
|
||||
// Save converts Device to DeviceState
|
||||
func (device *GenericDevice) Save() persistapi.DeviceState {
|
||||
dss := persistapi.DeviceState{
|
||||
func (device *GenericDevice) Save() config.DeviceState {
|
||||
dss := config.DeviceState{
|
||||
ID: device.ID,
|
||||
Type: string(device.DeviceType()),
|
||||
RefCount: device.RefCount,
|
||||
@@ -148,7 +147,7 @@ func (device *GenericDevice) Save() persistapi.DeviceState {
|
||||
}
|
||||
|
||||
// Load loads DeviceState and converts it to specific device
|
||||
func (device *GenericDevice) Load(ds persistapi.DeviceState) {
|
||||
func (device *GenericDevice) Load(ds config.DeviceState) {
|
||||
device.ID = ds.ID
|
||||
device.RefCount = ds.RefCount
|
||||
device.AttachCount = ds.AttachCount
|
||||
|
||||
@@ -18,7 +18,6 @@ import (
|
||||
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/api"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/config"
|
||||
persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils"
|
||||
)
|
||||
|
||||
@@ -174,14 +173,14 @@ func (device *VFIODevice) GetDeviceInfo() interface{} {
|
||||
}
|
||||
|
||||
// Save converts Device to DeviceState
|
||||
func (device *VFIODevice) Save() persistapi.DeviceState {
|
||||
func (device *VFIODevice) Save() config.DeviceState {
|
||||
ds := device.GenericDevice.Save()
|
||||
ds.Type = string(device.DeviceType())
|
||||
|
||||
devs := device.VfioDevs
|
||||
for _, dev := range devs {
|
||||
if dev != nil {
|
||||
ds.VFIODevs = append(ds.VFIODevs, &persistapi.VFIODev{
|
||||
ds.VFIODevs = append(ds.VFIODevs, &config.VFIODevState{
|
||||
ID: dev.ID,
|
||||
Type: uint32(dev.Type),
|
||||
BDF: dev.BDF,
|
||||
@@ -193,7 +192,7 @@ func (device *VFIODevice) Save() persistapi.DeviceState {
|
||||
}
|
||||
|
||||
// Load loads DeviceState and converts it to specific device
|
||||
func (device *VFIODevice) Load(ds persistapi.DeviceState) {
|
||||
func (device *VFIODevice) Load(ds config.DeviceState) {
|
||||
device.GenericDevice = &GenericDevice{}
|
||||
device.GenericDevice.Load(ds)
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ import (
|
||||
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/api"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/config"
|
||||
persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
@@ -156,13 +155,13 @@ func (device *VhostUserBlkDevice) GetDeviceInfo() interface{} {
|
||||
}
|
||||
|
||||
// Save converts Device to DeviceState
|
||||
func (device *VhostUserBlkDevice) Save() persistapi.DeviceState {
|
||||
func (device *VhostUserBlkDevice) Save() config.DeviceState {
|
||||
ds := device.GenericDevice.Save()
|
||||
ds.Type = string(device.DeviceType())
|
||||
|
||||
vAttr := device.VhostUserDeviceAttrs
|
||||
if vAttr != nil {
|
||||
ds.VhostUserDev = &persistapi.VhostUserDeviceAttrs{
|
||||
ds.VhostUserDev = &config.VhostUserDeviceAttrsState{
|
||||
DevID: vAttr.DevID,
|
||||
SocketPath: vAttr.SocketPath,
|
||||
Type: string(vAttr.Type),
|
||||
@@ -174,7 +173,7 @@ func (device *VhostUserBlkDevice) Save() persistapi.DeviceState {
|
||||
}
|
||||
|
||||
// Load loads DeviceState and converts it to specific device
|
||||
func (device *VhostUserBlkDevice) Load(ds persistapi.DeviceState) {
|
||||
func (device *VhostUserBlkDevice) Load(ds config.DeviceState) {
|
||||
device.GenericDevice = &GenericDevice{}
|
||||
device.GenericDevice.Load(ds)
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import (
|
||||
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/api"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/config"
|
||||
persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils"
|
||||
)
|
||||
|
||||
@@ -75,10 +74,10 @@ func (device *VhostUserNetDevice) GetDeviceInfo() interface{} {
|
||||
}
|
||||
|
||||
// Save converts Device to DeviceState
|
||||
func (device *VhostUserNetDevice) Save() persistapi.DeviceState {
|
||||
func (device *VhostUserNetDevice) Save() config.DeviceState {
|
||||
ds := device.GenericDevice.Save()
|
||||
ds.Type = string(device.DeviceType())
|
||||
ds.VhostUserDev = &persistapi.VhostUserDeviceAttrs{
|
||||
ds.VhostUserDev = &config.VhostUserDeviceAttrsState{
|
||||
DevID: device.DevID,
|
||||
SocketPath: device.SocketPath,
|
||||
Type: string(device.Type),
|
||||
@@ -88,7 +87,7 @@ func (device *VhostUserNetDevice) Save() persistapi.DeviceState {
|
||||
}
|
||||
|
||||
// Load loads DeviceState and converts it to specific device
|
||||
func (device *VhostUserNetDevice) Load(ds persistapi.DeviceState) {
|
||||
func (device *VhostUserNetDevice) Load(ds config.DeviceState) {
|
||||
device.GenericDevice = &GenericDevice{}
|
||||
device.GenericDevice.Load(ds)
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import (
|
||||
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/api"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/config"
|
||||
persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils"
|
||||
)
|
||||
|
||||
@@ -75,10 +74,10 @@ func (device *VhostUserSCSIDevice) GetDeviceInfo() interface{} {
|
||||
}
|
||||
|
||||
// Save converts Device to DeviceState
|
||||
func (device *VhostUserSCSIDevice) Save() persistapi.DeviceState {
|
||||
func (device *VhostUserSCSIDevice) Save() config.DeviceState {
|
||||
ds := device.GenericDevice.Save()
|
||||
ds.Type = string(device.DeviceType())
|
||||
ds.VhostUserDev = &persistapi.VhostUserDeviceAttrs{
|
||||
ds.VhostUserDev = &config.VhostUserDeviceAttrsState{
|
||||
DevID: device.DevID,
|
||||
SocketPath: device.SocketPath,
|
||||
Type: string(device.Type),
|
||||
@@ -88,7 +87,7 @@ func (device *VhostUserSCSIDevice) Save() persistapi.DeviceState {
|
||||
}
|
||||
|
||||
// Load loads DeviceState and converts it to specific device
|
||||
func (device *VhostUserSCSIDevice) Load(ds persistapi.DeviceState) {
|
||||
func (device *VhostUserSCSIDevice) Load(ds config.DeviceState) {
|
||||
device.GenericDevice = &GenericDevice{}
|
||||
device.GenericDevice.Load(ds)
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import (
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/api"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/config"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/drivers"
|
||||
persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils"
|
||||
)
|
||||
|
||||
@@ -242,7 +241,7 @@ func (dm *deviceManager) IsDeviceAttached(id string) bool {
|
||||
}
|
||||
|
||||
// LoadDevices load devices from persist state
|
||||
func (dm *deviceManager) LoadDevices(devStates []persistapi.DeviceState) {
|
||||
func (dm *deviceManager) LoadDevices(devStates []config.DeviceState) {
|
||||
dm.Lock()
|
||||
defer dm.Unlock()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user