Select Git revision
vmAttachAsync.go 1.40 KiB
package cmdVM
import (
"fmt"
"nexus-client/exec"
"nexus-common/vm"
u "nexus-client/utils"
g "nexus-client/globals"
)
type AttachAsync struct {
Name string
}
func (cmd *AttachAsync)GetName() string {
return cmd.Name
}
func (cmd *AttachAsync)GetDesc() []string {
return []string{
"Attaches to one or more VMs in order to use their desktop environment.",
"Requires VM_LIST VM access capability or VM_LIST_ANY user capability."}
}
func (cmd *AttachAsync)PrintUsage() {
printRegexUsage(cmd)
printRegexUsageDetails()
}
func (cmd *AttachAsync)Run(args []string) int {
hostname := g.GetInstance().Hostname
cert := g.GetInstance().PubCert
argc := len(args)
if argc < 1 {
cmd.PrintUsage()
return 1
}
vms, err := getFilteredVMs("/vms/attach", args)
if err != nil {
u.PrintlnErr(err.Error())
return 1
}
if len(vms) == 0 {
u.PrintlnErr("Error: VM(s) not found.")
return 1
}
statusCode := 0
for _, v := range(vms) {
go func(v vm.VMNetworkSerialized) {
stdoutStderr, err := exec.RunRemoteViewer(hostname, cert, v.Name, v.Port, v.Pwd, false)
if err != nil {
u.PrintlnErr("Failed attaching to VM ", v.ID, ": ", fmt.Sprintf("%s", stdoutStderr))
statusCode |= 1
}
} (v)
}
return statusCode
}