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

vmCreds2csv.go

Blame
  • vmCreds2csv.go 2.05 KiB
    package cmdVM
    
    import (
        "os"
        "fmt"
        "strconv"
        u "nexus-client/utils"
    )
    
    const (
        separator = ";"
    )
    
    type Creds2csv struct {
        Name string
    }
    
    func (cmd *Creds2csv)GetName() string {
        return cmd.Name
    }
    
    func (cmd *Creds2csv)GetDesc() []string {
        return []string{
            "Creates a CSV file with the credentials required to attach to running VMs.",
            "The written CSV file contains 4 columns: VM ID;VM name;port;password",
            "Requires VM_LIST VM access capability or VM_LIST_ANY user capability."}
    }
    
    func (cmd *Creds2csv)PrintUsage() {
        for _, desc := range cmd.GetDesc() {
            u.PrintlnErr(desc)
        }
        u.PrintlnErr("―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――")
        u.PrintlnErr("USAGE: ",cmd.GetName()," [ID ...] [regex ...] csvfile")
        u.PrintlnErr("―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――")
        printRegexUsageDetails()
    }
    
    func (cmd *Creds2csv)Run(args []string) int {
        argc := len(args)
        if argc < 2 {
            cmd.PrintUsage()
            return 1
        }
    
        csvFile := args[argc-1]
    
        vms, err := getFilteredVMs("/vms/attach", args[:argc-1])
        if err != nil {
            u.PrintlnErr("Error: "+err.Error())
            return 1
        }
    
        if len(vms) == 0 {
            u.PrintlnErr("Error: VM(s) not found.")
            return 1
        }
    
        // Create file
        f, err := os.Create(csvFile)
        if err != nil {
            u.PrintlnErr("Error: "+err.Error())
            return 1
        }
    
        defer f.Close()
    
        for _, vm := range vms {
            _, err := fmt.Fprintln(f, vm.ID.String()+separator+vm.Name+separator+strconv.Itoa(vm.Port)+separator+vm.Pwd)
            if err != nil {
                u.PrintlnErr("Error: "+err.Error())
                return 1
            }
        }
    
        u.Println(csvFile+" written successfully.")
        return 0
    }