func startVNCviewer(conn libvirt.VirConnection, name string, hostIPAddress string) { fmt.Println("would bring up vncviewer...") var domain libvirt.VirDomain domain, err := conn.LookupByName(name) if err != nil { fmt.Println("FAIL: find running domain to start vncviewer") return } defer domain.Free() xmlData, _ := domain.GetXMLDesc() v := utils.ParseDomainXML(xmlData) /* to get VNC port */ var vncPort string if v.Devices.Graphics.VNCPort == "-1" { fmt.Println("FAIL:Can not get vnc port") return } vncPort = v.Devices.Graphics.VNCPort ret := libvirt.ConnectDomainEventRegister(conn, domain, libvirt.VIR_DOMAIN_EVENT_ID_LIFECYCLE, libvirt.LifeCycleCallBackType(myrebootcallback)) if ret == -1 { fmt.Println("can not autoreboot") return } fmt.Println("RUNNING: vncviewer " + hostIPAddress + ":" + vncPort) cmd := exec.Command("vncviewer", hostIPAddress+":"+vncPort) //Run will block err = cmd.Run() if err != nil { fmt.Println("FAIL:can not start vncviewer") fmt.Println(err) return } fmt.Println("vncviewer is quiting") time.Sleep(3 * time.Second) //re run vncviewer cmd.Run() }
func registerRebootAndGetVncPort(name string, ip string, conn libvirt.VirConnection) string { var domain libvirt.VirDomain domain, err := conn.LookupByName(name) if err != nil { log.Println("FAIL: find running domain to start vncviewer") return "" } defer domain.Free() xmlData, _ := domain.GetXMLDesc() v := utils.ParseDomainXML(xmlData) /* to get VNC port */ var vncPort string if v.Devices.Graphics.VNCPort == "-1" { log.Println("FAIL:Can not get vnc port") return "" } vncPort = v.Devices.Graphics.VNCPort ret := libvirt.ConnectDomainEventRegister(conn, domain, libvirt.VIR_DOMAIN_EVENT_ID_LIFECYCLE, libvirt.LifeCycleCallBackType(myrebootcallback)) if ret == -1 { fmt.Println("can not autoreboot") } else { callbackMap.Set(name, ret) } vncAddress := ip + ":" + vncPort //e.g. http://147.2.207.233/vnc_auto.html?title=lwang-n1-sle12rc1&path=websockify?ip=147.2.207.233:5902 log.Println(fmt.Sprintf("/vnc_auto.html?title=%s&path=websockify?ip=%s", name, vncAddress)) return fmt.Sprintf("/vnc_auto.html?title=%s&path=websockify?ip=%s", name, vncAddress) }