mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-30 04:34:27 +00:00
qemu: Add a Device slice field to the Config structure
We may need to support a large range of devices in the qemu created VM and the Device slice allows us to define which drivers are needed. Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
5458de70ad
commit
8744dfe85e
63
qemu.go
63
qemu.go
@ -34,6 +34,28 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Device describes a device to be created by qemu.
|
||||||
|
type Device struct {
|
||||||
|
// Type is the qemu device type
|
||||||
|
Type string
|
||||||
|
|
||||||
|
// ID is the user defined device ID.
|
||||||
|
ID string
|
||||||
|
|
||||||
|
// MemDev is the device memory identifier.
|
||||||
|
MemDev string
|
||||||
|
|
||||||
|
// FSDev is the device filesystem identifier.
|
||||||
|
FSDev string
|
||||||
|
|
||||||
|
// MountTag is the device filesystem mount point tag.
|
||||||
|
// It is only relevant when combined with FSDev.
|
||||||
|
MountTag string
|
||||||
|
|
||||||
|
// CharDev is the device character device identifier.
|
||||||
|
CharDev string
|
||||||
|
}
|
||||||
|
|
||||||
// QMPSocket represents a qemu QMP socket configuration.
|
// QMPSocket represents a qemu QMP socket configuration.
|
||||||
type QMPSocket struct {
|
type QMPSocket struct {
|
||||||
// Type is the socket type (e.g. "unix").
|
// Type is the socket type (e.g. "unix").
|
||||||
@ -70,9 +92,12 @@ type Config struct {
|
|||||||
// CPUModel is the CPU model to be used by qemu.
|
// CPUModel is the CPU model to be used by qemu.
|
||||||
CPUModel string
|
CPUModel string
|
||||||
|
|
||||||
// QMPSocket is the QMP socket description
|
// QMPSocket is the QMP socket description.
|
||||||
QMPSocket QMPSocket
|
QMPSocket QMPSocket
|
||||||
|
|
||||||
|
// Devices is a list of devices for qemu to create.
|
||||||
|
Devices []Device
|
||||||
|
|
||||||
// ExtraParams is a slice of options to pass to qemu.
|
// ExtraParams is a slice of options to pass to qemu.
|
||||||
ExtraParams []string
|
ExtraParams []string
|
||||||
|
|
||||||
@ -127,6 +152,41 @@ func appendQMPSocket(params []string, config Config) []string {
|
|||||||
return params
|
return params
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func appendDevices(params []string, config Config) []string {
|
||||||
|
for _, d := range config.Devices {
|
||||||
|
if d.Type != "" {
|
||||||
|
var deviceParams []string
|
||||||
|
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf("%s", d.Type))
|
||||||
|
|
||||||
|
if d.ID != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf(",id=%s", d.ID))
|
||||||
|
}
|
||||||
|
|
||||||
|
if d.MemDev != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf(",memdev=%s", d.MemDev))
|
||||||
|
}
|
||||||
|
|
||||||
|
if d.CharDev != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf(",chardev=%s", d.CharDev))
|
||||||
|
}
|
||||||
|
|
||||||
|
if d.FSDev != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf(",fsdev=%s", d.FSDev))
|
||||||
|
|
||||||
|
if d.MountTag != "" {
|
||||||
|
deviceParams = append(deviceParams, fmt.Sprintf(",mount_tag=%s", d.MountTag))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
params = append(params, "-device")
|
||||||
|
params = append(params, strings.Join(deviceParams, ""))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return params
|
||||||
|
}
|
||||||
|
|
||||||
// LaunchQemu can be used to launch a new qemu instance.
|
// LaunchQemu can be used to launch a new qemu instance.
|
||||||
//
|
//
|
||||||
// The Config parameter contains a set of qemu parameters and settings.
|
// The Config parameter contains a set of qemu parameters and settings.
|
||||||
@ -143,6 +203,7 @@ func LaunchQemu(config Config, logger QMPLog) (string, error) {
|
|||||||
params = appendMachineParams(params, config)
|
params = appendMachineParams(params, config)
|
||||||
params = appendCPUModel(params, config)
|
params = appendCPUModel(params, config)
|
||||||
params = appendQMPSocket(params, config)
|
params = appendQMPSocket(params, config)
|
||||||
|
params = appendDevices(params, config)
|
||||||
|
|
||||||
params = append(params, config.ExtraParams...)
|
params = append(params, config.ExtraParams...)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user