Skip to content
Snippets Groups Projects
Select Git revision
  • 18aa2bbc91e7179554f9a041a37e5d954a24fd06
  • master default protected
  • dev
  • docker-issue-ok
  • design
  • DojoHepia-v1.0
  • DojoHepia-v0.5
  • DojoHepia-v0.4.5
  • DojoHepia-v0.4
  • DojoHepia-v0.3
  • DojoHepia-v0.2
  • DojoHepia-v0.1
12 results

program-displayer.component.html

Blame
  • Forked from alexandr.vanini / dojo-hepia
    Source project has a limited visibility.
    vmEdit.go 4.70 KiB
    package cmdVM
    
    import (
        "strconv"
        "strings"
        "errors"
        "nexus-common/vm"
        u "nexus-client/utils"
        g "nexus-client/globals"
    )
    
    type Edit struct {
        Name string
    }
    
    type vmEditParameters struct {
        Name string
        Cpus int
        Ram int
        Nic vm.NicType
        UsbDevs []string
    }
    
    func (cmd *Edit)GetName() string {
        return cmd.Name
    }
    
    func (cmd *Edit)GetDesc() []string {
        return []string{
            "Edits one or more VMs' properties: name, cpus, ram or nic.",
            "Requires VM_EDIT VM access capability or VM_EDIT_ANY user capability."}
    }
    
    func (cmd *Edit)PrintUsage() {
        for _, desc := range cmd.GetDesc() {
            u.PrintlnErr(desc)
        }
        u.PrintlnErr("―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――")
        u.PrintlnErr("USAGE: "+cmd.GetName()+" [ID ...] [regex ...] [name=...] [cpus=...] [ram=...] [nic=...] [usb=...]")
        u.PrintlnErr("―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――")
        const usage string = `Parameters that can be changed (at least one must be specified):
    name    Name of the VM.
    cpus    Number of CPUs, between 1 and 16.
    ram     Amount of RAM in MB,  between 512 and 32768.
    nic     Network interface, either "none" (no network) or "user" (network access).
    usb     List of USB devices exposed in the VM; either "none" or a list of comma separated
            vendorID:productID (4-digit hex number), each specifying a USB device; example
            exposing two USB devices: 1fc9:001d,067b:2303`
        u.PrintlnErr(usage)
        u.PrintlnErr("")
        printRegexUsageDetails()
    }
    
    func (cmd *Edit)Run(args []string) int {
        client := g.GetInstance().Client
        host := g.GetInstance().Host
    
        argc := len(args)
        if argc < 1 {
            cmd.PrintUsage()
            return 1
        }
    
        vmParams, patterns, err := cmd.parseArgs(args)
        if err != nil {
            u.PrintlnErr(err.Error())
            return 1
        }
    
        if vmParams == nil {
            cmd.PrintUsage()
            return 1
        }
    
        vms, err := getFilteredVMs("/vms/edit", patterns)
        if err != nil {
            u.PrintlnErr(err.Error())
            return 1
        }
    
        if len(vms) == 0 {
            u.PrintlnErr("No match.")
            return 1
        }
    
        statusCode := 0
    
        for _, vm := range(vms) {
            uuid := vm.ID.String()
            resp, err := client.R().SetBody(vmParams).Put(host+"/vms/"+uuid)
            if err != nil {
                u.PrintlnErr("Failed editing VM \""+vm.Name+"\": "+err.Error())
                statusCode = 1
            } else {
                if resp.IsSuccess() {
                    u.Println("Successfully edited VM \""+vm.ID.String()+"\":")
                    u.Println(resp.String())
                } else {
                    u.PrintlnErr("Failed editing VM \""+vm.Name+"\": "+resp.Status()+": "+resp.String())
                    statusCode = 1
                }
            }
        }
    
        return statusCode
    }
    
    func (cmd *Edit)parseArgs(args []string) (*vmEditParameters, []string, error) {
        vmParams := &vmEditParameters {}
        var patterns []string
        atLeastOneArg := false
    
        getStringVal := func(s string, prefix string) string {
            if strings.HasPrefix(s, prefix) {
                parts := strings.Split(s, prefix)
                return parts[1]
            }
            return ""
        }
    
        for _, arg := range args {
            s := getStringVal(arg, "name=")
            if s != "" {
                vmParams.Name = s
                atLeastOneArg = true
                continue
            }
            s = getStringVal(arg, "cpus=")
            if s != "" {
                cpus, err := strconv.Atoi(s)
                if err != nil {
                    return nil, nil, errors.New("Invalid number of CPU(s)")
                }
                vmParams.Cpus = cpus
                atLeastOneArg = true
                continue
            }
            s = getStringVal(arg, "ram=")
            if s != "" {
                ram, err := strconv.Atoi(s)
                if err != nil {
                    return nil, nil, errors.New("Invalid amount of RAM")
                }
                vmParams.Ram = ram
                atLeastOneArg = true
                continue
            }
            s = getStringVal(arg, "nic=")
            if s != "" {
                vmParams.Nic = vm.NicType(s)
                atLeastOneArg = true
                continue
            }
            s = getStringVal(arg, "usb=")
            if s != "" {
                vmParams.UsbDevs = u.Str2UsbDevices(s)
                atLeastOneArg = true
                continue
            }
    
            patterns = append(patterns, arg)
        }
    
        if atLeastOneArg {
            return vmParams, patterns, nil
        } else {
            return nil, nil, nil
        }
    }