mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-28 03:42:09 +00:00
qemu: Embed the qemu parameters into the Config structure
It is a private field now, and all append*() routines are now Config methods instead of private qemu functions. Since we will have to carry a kernelParams private field as well, this change will keep all built parameters internal and make things consistent. Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
e193a77b8d
commit
12f6ebe389
146
qemu.go
146
qemu.go
@ -732,18 +732,18 @@ type Config struct {
|
||||
|
||||
// FDs is a list of open file descriptors to be passed to the spawned qemu process
|
||||
FDs []*os.File
|
||||
|
||||
qemuParams []string
|
||||
}
|
||||
|
||||
func appendName(params []string, config Config) []string {
|
||||
func (config *Config) appendName() {
|
||||
if config.Name != "" {
|
||||
params = append(params, "-name")
|
||||
params = append(params, config.Name)
|
||||
config.qemuParams = append(config.qemuParams, "-name")
|
||||
config.qemuParams = append(config.qemuParams, config.Name)
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
func appendMachine(params []string, config Config) []string {
|
||||
func (config *Config) appendMachine() {
|
||||
if config.Machine.Type != "" {
|
||||
var machineParams []string
|
||||
|
||||
@ -753,25 +753,21 @@ func appendMachine(params []string, config Config) []string {
|
||||
machineParams = append(machineParams, fmt.Sprintf(",accel=%s", config.Machine.Acceleration))
|
||||
}
|
||||
|
||||
params = append(params, "-machine")
|
||||
params = append(params, strings.Join(machineParams, ""))
|
||||
config.qemuParams = append(config.qemuParams, "-machine")
|
||||
config.qemuParams = append(config.qemuParams, strings.Join(machineParams, ""))
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
func appendCPUModel(params []string, config Config) []string {
|
||||
func (config *Config) appendCPUModel() {
|
||||
if config.CPUModel != "" {
|
||||
params = append(params, "-cpu")
|
||||
params = append(params, config.CPUModel)
|
||||
config.qemuParams = append(config.qemuParams, "-cpu")
|
||||
config.qemuParams = append(config.qemuParams, config.CPUModel)
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
func appendQMPSocket(params []string, config Config) []string {
|
||||
func (config *Config) appendQMPSocket() {
|
||||
if config.QMPSocket.Valid() == false {
|
||||
return nil
|
||||
return
|
||||
}
|
||||
|
||||
var qmpParams []string
|
||||
@ -785,34 +781,28 @@ func appendQMPSocket(params []string, config Config) []string {
|
||||
}
|
||||
}
|
||||
|
||||
params = append(params, "-qmp")
|
||||
params = append(params, strings.Join(qmpParams, ""))
|
||||
|
||||
return params
|
||||
config.qemuParams = append(config.qemuParams, "-qmp")
|
||||
config.qemuParams = append(config.qemuParams, strings.Join(qmpParams, ""))
|
||||
}
|
||||
|
||||
func appendDevices(params []string, config Config) []string {
|
||||
func (config *Config) appendDevices() {
|
||||
for _, d := range config.Devices {
|
||||
if d.Valid() == false {
|
||||
continue
|
||||
}
|
||||
|
||||
params = append(params, d.QemuParams()...)
|
||||
config.qemuParams = append(config.qemuParams, d.QemuParams()...)
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
func appendUUID(params []string, config Config) []string {
|
||||
func (config *Config) appendUUID() {
|
||||
if config.UUID != "" {
|
||||
params = append(params, "-uuid")
|
||||
params = append(params, config.UUID)
|
||||
config.qemuParams = append(config.qemuParams, "-uuid")
|
||||
config.qemuParams = append(config.qemuParams, config.UUID)
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
func appendMemory(params []string, config Config) []string {
|
||||
func (config *Config) appendMemory() {
|
||||
if config.Memory.Size != "" {
|
||||
var memoryParams []string
|
||||
|
||||
@ -826,14 +816,12 @@ func appendMemory(params []string, config Config) []string {
|
||||
memoryParams = append(memoryParams, fmt.Sprintf(",maxmem=%s", config.Memory.MaxMem))
|
||||
}
|
||||
|
||||
params = append(params, "-m")
|
||||
params = append(params, strings.Join(memoryParams, ""))
|
||||
config.qemuParams = append(config.qemuParams, "-m")
|
||||
config.qemuParams = append(config.qemuParams, strings.Join(memoryParams, ""))
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
func appendCPUs(params []string, config Config) []string {
|
||||
func (config *Config) appendCPUs() {
|
||||
if config.SMP.CPUs > 0 {
|
||||
var SMPParams []string
|
||||
|
||||
@ -851,16 +839,14 @@ func appendCPUs(params []string, config Config) []string {
|
||||
SMPParams = append(SMPParams, fmt.Sprintf(",sockets=%d", config.SMP.Sockets))
|
||||
}
|
||||
|
||||
params = append(params, "-smp")
|
||||
params = append(params, strings.Join(SMPParams, ""))
|
||||
config.qemuParams = append(config.qemuParams, "-smp")
|
||||
config.qemuParams = append(config.qemuParams, strings.Join(SMPParams, ""))
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
func appendRTC(params []string, config Config) []string {
|
||||
func (config *Config) appendRTC() {
|
||||
if config.RTC.Valid() == false {
|
||||
return nil
|
||||
return
|
||||
}
|
||||
|
||||
var RTCParams []string
|
||||
@ -875,58 +861,48 @@ func appendRTC(params []string, config Config) []string {
|
||||
RTCParams = append(RTCParams, fmt.Sprintf(",clock=%s", config.RTC.Clock))
|
||||
}
|
||||
|
||||
params = append(params, "-rtc")
|
||||
params = append(params, strings.Join(RTCParams, ""))
|
||||
|
||||
return params
|
||||
config.qemuParams = append(config.qemuParams, "-rtc")
|
||||
config.qemuParams = append(config.qemuParams, strings.Join(RTCParams, ""))
|
||||
}
|
||||
|
||||
func appendGlobalParam(params []string, config Config) []string {
|
||||
func (config *Config) appendGlobalParam() {
|
||||
if config.GlobalParam != "" {
|
||||
params = append(params, "-global")
|
||||
params = append(params, config.GlobalParam)
|
||||
config.qemuParams = append(config.qemuParams, "-global")
|
||||
config.qemuParams = append(config.qemuParams, config.GlobalParam)
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
func appendVGA(params []string, config Config) []string {
|
||||
func (config *Config) appendVGA() {
|
||||
if config.VGA != "" {
|
||||
params = append(params, "-vga")
|
||||
params = append(params, config.VGA)
|
||||
config.qemuParams = append(config.qemuParams, "-vga")
|
||||
config.qemuParams = append(config.qemuParams, config.VGA)
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
func appendKernel(params []string, config Config) []string {
|
||||
func (config *Config) appendKernel() {
|
||||
if config.Kernel.Path != "" {
|
||||
params = append(params, "-kernel")
|
||||
params = append(params, config.Kernel.Path)
|
||||
config.qemuParams = append(config.qemuParams, "-kernel")
|
||||
config.qemuParams = append(config.qemuParams, config.Kernel.Path)
|
||||
|
||||
if config.Kernel.Params != "" {
|
||||
params = append(params, "-append")
|
||||
params = append(params, config.Kernel.Params)
|
||||
config.qemuParams = append(config.qemuParams, "-append")
|
||||
config.qemuParams = append(config.qemuParams, config.Kernel.Params)
|
||||
}
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
func appendKnobs(params []string, config Config) []string {
|
||||
func (config *Config) appendKnobs() {
|
||||
if config.Knobs.NoUserConfig == true {
|
||||
params = append(params, "-no-user-config")
|
||||
config.qemuParams = append(config.qemuParams, "-no-user-config")
|
||||
}
|
||||
|
||||
if config.Knobs.NoDefaults == true {
|
||||
params = append(params, "-nodefaults")
|
||||
config.qemuParams = append(config.qemuParams, "-nodefaults")
|
||||
}
|
||||
|
||||
if config.Knobs.NoGraphic == true {
|
||||
params = append(params, "-nographic")
|
||||
config.qemuParams = append(config.qemuParams, "-nographic")
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
// LaunchQemu can be used to launch a new qemu instance.
|
||||
@ -939,23 +915,21 @@ func appendKnobs(params []string, config Config) []string {
|
||||
// will be returned if the launch succeeds. Otherwise a string containing
|
||||
// the contents of stderr + a Go error object will be returned.
|
||||
func LaunchQemu(config Config, logger QMPLog) (string, error) {
|
||||
var params []string
|
||||
config.appendName()
|
||||
config.appendUUID()
|
||||
config.appendMachine()
|
||||
config.appendCPUModel()
|
||||
config.appendQMPSocket()
|
||||
config.appendMemory()
|
||||
config.appendCPUs()
|
||||
config.appendDevices()
|
||||
config.appendRTC()
|
||||
config.appendGlobalParam()
|
||||
config.appendVGA()
|
||||
config.appendKnobs()
|
||||
config.appendKernel()
|
||||
|
||||
params = appendName(params, config)
|
||||
params = appendUUID(params, config)
|
||||
params = appendMachine(params, config)
|
||||
params = appendCPUModel(params, config)
|
||||
params = appendQMPSocket(params, config)
|
||||
params = appendMemory(params, config)
|
||||
params = appendCPUs(params, config)
|
||||
params = appendDevices(params, config)
|
||||
params = appendRTC(params, config)
|
||||
params = appendGlobalParam(params, config)
|
||||
params = appendVGA(params, config)
|
||||
params = appendKnobs(params, config)
|
||||
params = appendKernel(params, config)
|
||||
|
||||
return LaunchCustomQemu(config.Ctx, config.Path, params, config.FDs, logger)
|
||||
return LaunchCustomQemu(config.Ctx, config.Path, config.qemuParams, config.FDs, logger)
|
||||
}
|
||||
|
||||
// LaunchCustomQemu can be used to launch a new qemu instance.
|
||||
@ -966,7 +940,7 @@ func LaunchQemu(config Config, logger QMPLog) (string, error) {
|
||||
// signature of this function will not need to change when launch cancellation
|
||||
// is implemented.
|
||||
//
|
||||
// params is a slice of options to pass to qemu-system-x86_64 and fds is a
|
||||
// config.qemuParams is a slice of options to pass to qemu-system-x86_64 and fds is a
|
||||
// list of open file descriptors that are to be passed to the spawned qemu
|
||||
// process.
|
||||
//
|
||||
|
70
qemu_test.go
70
qemu_test.go
@ -24,67 +24,43 @@ import (
|
||||
)
|
||||
|
||||
func testAppend(structure interface{}, expected string, t *testing.T) {
|
||||
var params []string
|
||||
var config Config
|
||||
|
||||
switch s := structure.(type) {
|
||||
case Machine:
|
||||
config := Config{
|
||||
Machine: s,
|
||||
}
|
||||
|
||||
params = appendMachine([]string{}, config)
|
||||
config.Machine = s
|
||||
config.appendMachine()
|
||||
|
||||
case Device:
|
||||
config := Config{
|
||||
Devices: []Device{s},
|
||||
}
|
||||
|
||||
params = appendDevices([]string{}, config)
|
||||
config.Devices = []Device{s}
|
||||
config.appendDevices()
|
||||
|
||||
case Knobs:
|
||||
config := Config{
|
||||
Knobs: s,
|
||||
}
|
||||
|
||||
params = appendKnobs([]string{}, config)
|
||||
config.Knobs = s
|
||||
config.appendKnobs()
|
||||
|
||||
case Kernel:
|
||||
config := Config{
|
||||
Kernel: s,
|
||||
}
|
||||
|
||||
params = appendKernel([]string{}, config)
|
||||
config.Kernel = s
|
||||
config.appendKernel()
|
||||
|
||||
case Memory:
|
||||
config := Config{
|
||||
Memory: s,
|
||||
}
|
||||
|
||||
params = appendMemory([]string{}, config)
|
||||
config.Memory = s
|
||||
config.appendMemory()
|
||||
|
||||
case SMP:
|
||||
config := Config{
|
||||
SMP: s,
|
||||
}
|
||||
|
||||
params = appendCPUs([]string{}, config)
|
||||
config.SMP = s
|
||||
config.appendCPUs()
|
||||
|
||||
case QMPSocket:
|
||||
config := Config{
|
||||
QMPSocket: s,
|
||||
}
|
||||
|
||||
params = appendQMPSocket([]string{}, config)
|
||||
config.QMPSocket = s
|
||||
config.appendQMPSocket()
|
||||
|
||||
case RTC:
|
||||
config := Config{
|
||||
RTC: s,
|
||||
}
|
||||
|
||||
params = appendRTC([]string{}, config)
|
||||
config.RTC = s
|
||||
config.appendRTC()
|
||||
}
|
||||
|
||||
result := strings.Join(params, " ")
|
||||
result := strings.Join(config.qemuParams, " ")
|
||||
if result != expected {
|
||||
t.Fatalf("Failed to append parameters [%s] != [%s]", result, expected)
|
||||
}
|
||||
@ -274,8 +250,6 @@ func TestAppendQMPSocket(t *testing.T) {
|
||||
var qemuString = "-name cc-qemu -cpu host -uuid " + testutil.AgentUUID
|
||||
|
||||
func TestAppendStrings(t *testing.T) {
|
||||
var params []string
|
||||
|
||||
config := Config{
|
||||
Path: "qemu",
|
||||
Name: "cc-qemu",
|
||||
@ -283,11 +257,11 @@ func TestAppendStrings(t *testing.T) {
|
||||
CPUModel: "host",
|
||||
}
|
||||
|
||||
params = appendName(params, config)
|
||||
params = appendCPUModel(params, config)
|
||||
params = appendUUID(params, config)
|
||||
config.appendName()
|
||||
config.appendCPUModel()
|
||||
config.appendUUID()
|
||||
|
||||
result := strings.Join(params, " ")
|
||||
result := strings.Join(config.qemuParams, " ")
|
||||
if result != qemuString {
|
||||
t.Fatalf("Failed to append parameters [%s] != [%s]", result, qemuString)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user