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:
Samuel Ortiz 2016-09-19 12:07:00 +02:00
parent e193a77b8d
commit 12f6ebe389
2 changed files with 82 additions and 134 deletions

146
qemu.go
View File

@ -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.
//

View File

@ -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)
}