Skip to content
Snippets Groups Projects
Select Git revision
  • a929f5769b6be4a386fa404b2c545470ac32f24d
  • live_exam_os_ubuntu default protected
2 results

vmAttachAsync.go

Blame
  • 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
    }