From e58847970156b0b3f6d2d37650806cb0c352d8d4 Mon Sep 17 00:00:00 2001 From: msm-code Date: Sun, 5 Apr 2020 14:47:10 +0000 Subject: [PATCH] Add `--cli` switch that disables the GUI window. (#20) --- appvm.go | 17 ++++++++++------- xml.go | 40 +++++++++++++++++++++++++--------------- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/appvm.go b/appvm.go index 9c30e67..48b716a 100644 --- a/appvm.go +++ b/appvm.go @@ -173,14 +173,14 @@ func isRunning(l *libvirt.Libvirt, name string) bool { func generateAppVM(l *libvirt.Libvirt, nixName, vmName, appvmPath, sharedDir string, - verbose, online bool) (err error) { + verbose, online, gui bool) (err error) { realpath, reginfo, qcow2, err := generateVM(appvmPath, nixName, verbose) if err != nil { return } - xml := generateXML(vmName, online, realpath, reginfo, qcow2, sharedDir) + xml := generateXML(vmName, online, gui, realpath, reginfo, qcow2, sharedDir) _, err = l.DomainCreateXML(xml, libvirt.DomainStartValidate) return } @@ -209,7 +209,7 @@ func isAppvmConfigurationExists(appvmPath, name string) bool { return fileExists(appvmPath + "/nix/" + name + ".nix") } -func start(l *libvirt.Libvirt, name string, verbose, online, stateless bool, +func start(l *libvirt.Libvirt, name string, verbose, online, gui, stateless bool, args, open string) { appvmPath := configDir @@ -267,14 +267,16 @@ func start(l *libvirt.Libvirt, name string, verbose, online, stateless bool, } err := generateAppVM(l, name, vmName, appvmPath, sharedDir, - verbose, online) + verbose, online, gui) if err != nil { log.Fatal(err) } } - cmd := exec.Command("virt-viewer", "-c", "qemu:///system", vmName) - cmd.Start() + if gui { + cmd := exec.Command("virt-viewer", "-c", "qemu:///system", vmName) + cmd.Start() + } } func stop(l *libvirt.Libvirt, name string) { @@ -450,6 +452,7 @@ func main() { startArgs := startCommand.Flag("args", "Command line arguments").String() startOpen := startCommand.Flag("open", "Pass file to application").String() startOffline := startCommand.Flag("offline", "Disconnect").Bool() + startCli := startCommand.Flag("cli", "Disable graphics mode, enable serial").Bool() startStateless := startCommand.Flag("stateless", "Do not use default state directory").Bool() stopName := kingpin.Command("stop", "Stop application").Arg("name", "Application name").Required().String() @@ -496,7 +499,7 @@ func main() { *generateBuildVM) case "start": start(l, *startName, - !*startQuiet, !*startOffline, *startStateless, + !*startQuiet, !*startOffline, !*startCli, *startStateless, *startArgs, *startOpen) case "stop": stop(l, *stopName) diff --git a/xml.go b/xml.go index 899248a..f559773 100644 --- a/xml.go +++ b/xml.go @@ -5,9 +5,15 @@ import "fmt" // You may think that you want to rewrite to proper golang structures. // Believe me, you shouldn't. -func generateXML(vmName string, online bool, +func generateXML(vmName string, online, gui bool, vmNixPath, reginfo, img, sharedDir string) string { + devices := "" + + if gui { + devices = guiDevices + } + qemuParams := ` @@ -27,9 +33,25 @@ func generateXML(vmName string, online bool, } return fmt.Sprintf(xmlTmpl, vmName, vmNixPath, vmNixPath, vmNixPath, - reginfo, img, sharedDir, sharedDir, sharedDir, qemuParams) + reginfo, img, sharedDir, sharedDir, sharedDir, devices, qemuParams) } +var guiDevices = ` + + + + + + + + + +