mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-28 19:54:35 +00: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:
parent
f9e96c6506
commit
f97d9b45c8
@ -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)
|
||||
}
|
||||
|
@ -4,7 +4,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
package persistapi
|
||||
package config
|
||||
|
||||
import vcTypes "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||
|
||||
@ -12,7 +12,7 @@ import vcTypes "github.com/kata-containers/kata-containers/src/runtime/virtconta
|
||||
|
||||
// BlockDrive represents a block storage drive which may be used in case the storage
|
||||
// driver has an underlying block storage device.
|
||||
type BlockDrive struct {
|
||||
type BlockDriveState struct {
|
||||
// File is the path to the disk-image/device which will be used with this drive
|
||||
File string
|
||||
|
||||
@ -50,7 +50,7 @@ type BlockDrive struct {
|
||||
}
|
||||
|
||||
// VFIODev represents a VFIO drive used for hotplugging
|
||||
type VFIODev struct {
|
||||
type VFIODevState struct {
|
||||
// ID is used to identify this drive in the hypervisor options.
|
||||
ID string
|
||||
|
||||
@ -65,7 +65,7 @@ type VFIODev struct {
|
||||
}
|
||||
|
||||
// VhostUserDeviceAttrs represents data shared by most vhost-user devices
|
||||
type VhostUserDeviceAttrs struct {
|
||||
type VhostUserDeviceAttrsState struct {
|
||||
DevID string
|
||||
SocketPath string
|
||||
Type string
|
||||
@ -89,11 +89,11 @@ type DeviceState struct {
|
||||
// for example, for BlockDevice, we can set DriverOptions["block-driver"]="virtio-blk"
|
||||
DriverOptions map[string]string
|
||||
|
||||
// VhostUserDeviceAttrs is specific for vhost-user device driver
|
||||
VhostUserDev *VhostUserDeviceAttrs `json:",omitempty"`
|
||||
// VhostUserDeviceAttrsState is specific for vhost-user device driver
|
||||
VhostUserDev *VhostUserDeviceAttrsState `json:",omitempty"`
|
||||
|
||||
// BlockDrive is specific for block device driver
|
||||
BlockDrive *BlockDrive `json:",omitempty"`
|
||||
BlockDrive *BlockDriveState `json:",omitempty"`
|
||||
|
||||
ID string
|
||||
|
||||
@ -108,8 +108,8 @@ type DeviceState struct {
|
||||
// More info in mknod(1).
|
||||
DevType string
|
||||
|
||||
// VFIODev is specific VFIO device driver
|
||||
VFIODevs []*VFIODev `json:",omitempty"`
|
||||
// VFIODevState is specific VFIO device driver
|
||||
VFIODevs []*VFIODevState `json:",omitempty"`
|
||||
|
||||
RefCount uint
|
||||
AttachCount uint
|
@ -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()
|
||||
|
||||
|
@ -8,8 +8,9 @@ package virtcontainers
|
||||
import (
|
||||
"errors"
|
||||
|
||||
hv "github.com/kata-containers/kata-containers/src/runtime/pkg/hypervisors"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/api"
|
||||
devconfig "github.com/kata-containers/kata-containers/src/runtime/pkg/device/config"
|
||||
hv "github.com/kata-containers/kata-containers/src/runtime/pkg/hypervisors"
|
||||
exp "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/experimental"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist"
|
||||
persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api"
|
||||
@ -65,7 +66,7 @@ func (s *Sandbox) dumpHypervisor(ss *persistapi.SandboxState) {
|
||||
ss.HypervisorState.BlockIndexMap = s.state.BlockIndexMap
|
||||
}
|
||||
|
||||
func deviceToDeviceState(devices []api.Device) (dss []persistapi.DeviceState) {
|
||||
func deviceToDeviceState(devices []api.Device) (dss []devconfig.DeviceState) {
|
||||
for _, dev := range devices {
|
||||
dss = append(dss, dev.Save())
|
||||
}
|
||||
@ -323,7 +324,7 @@ func (s *Sandbox) loadAgent(as persistapi.AgentState) {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Sandbox) loadDevices(devStates []persistapi.DeviceState) {
|
||||
func (s *Sandbox) loadDevices(devStates []devconfig.DeviceState) {
|
||||
s.devManager.LoadDevices(devStates)
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
package persistapi
|
||||
|
||||
import (
|
||||
dev "github.com/kata-containers/kata-containers/src/runtime/pkg/device/config"
|
||||
hv "github.com/kata-containers/kata-containers/src/runtime/pkg/hypervisors"
|
||||
)
|
||||
|
||||
@ -26,7 +27,7 @@ type SandboxState struct {
|
||||
CgroupPaths map[string]string
|
||||
|
||||
// Devices plugged to sandbox(hypervisor)
|
||||
Devices []DeviceState
|
||||
Devices []dev.DeviceState
|
||||
|
||||
// State is sandbox running status
|
||||
State string
|
||||
|
Loading…
Reference in New Issue
Block a user