func cliVmScreenshot(c *minicli.Command, resp *minicli.Response) error { file := c.StringArgs["filename"] var max int if arg := c.StringArgs["maximum"]; arg != "" { v, err := strconv.Atoi(arg) if err != nil { return err } max = v } vm := vms.FindVM(c.StringArgs["vm"]) if vm == nil { return vmNotFound(c.StringArgs["vm"]) } data, err := vm.Screenshot(max) if err != nil { return err } path := filepath.Join(*f_base, strconv.Itoa(vm.GetID()), "screenshot.png") if file != "" { path = file } // add user data in case this is going across meshage err = ioutil.WriteFile(path, data, os.FileMode(0644)) if err != nil { return err } resp.Data = data return nil }
// Info populates resp with info about the VMs running in the active namespace. func (vms VMs) Info(masks []string, resp *minicli.Response) { vmLock.Lock() defer vmLock.Unlock() resp.Header = masks res := VMs{} // for res.Data for _, vm := range vms { if !inNamespace(vm) { continue } // Update dynamic fields before querying info vm.UpdateNetworks() // Copy the VM and use the copy from here on. This ensures that the // Tabular info matches the Data field. vm := vm.Copy() res[vm.GetID()] = vm row := []string{} for _, mask := range masks { if v, err := vm.Info(mask); err != nil { // Field most likely not set for VM type row = append(row, "N/A") } else { row = append(row, v) } } resp.Tabular = append(resp.Tabular, row) } resp.Data = res }