Skip to content
Snippets Groups Projects
Select Git revision
  • 70decd77f0c3b407b7abbbf7bd15b9063b5160d3
  • main default protected
2 results

i2c.rs

Blame
  • vmCreds2csv.go 2.09 KiB
    package cmdVM
    
    import (
        "os"
        "fmt"
        u "nexus-client/utils"
        g "nexus-client/globals"
    )
    
    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 3 columns: VM ID;VM name;password",
            "If not the VM's owner: requires VM_ATTACH VM access capability or VM_ATTACH_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]
    
        credsList, err := getFilteredVMCredentials("/vms/attach", args[:argc-1])
        if err != nil {
            u.PrintlnErr("Error: "+err.Error())
            return 1
        }
    
        if len(credsList) == 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 _, creds := range credsList {
            sep := string(g.CsvFieldSeparator)
            _, err := fmt.Fprintln(f, creds.ID.String()+sep+creds.Name+sep+creds.Pwd)
            if err != nil {
                u.PrintlnErr("Error: "+err.Error())
                return 1
            }
        }
    
        u.Println(csvFile+" written successfully.")
        return 0
    }