mirror of
https://github.com/podman-container-tools/podman.git
synced 2026-10-18 20:07:33 +00:00
Merge pull request #12592 from ashley-cui/backports
[3.4] Backport podman machine ls
This commit is contained in:
commit
17788ed058
4 changed files with 75 additions and 2 deletions
|
|
@ -3,13 +3,16 @@
|
|||
package machine
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"sort"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/containers/common/pkg/completion"
|
||||
"github.com/containers/common/pkg/config"
|
||||
"github.com/containers/common/pkg/report"
|
||||
"github.com/containers/podman/v3/cmd/podman/common"
|
||||
"github.com/containers/podman/v3/cmd/podman/registry"
|
||||
"github.com/containers/podman/v3/cmd/podman/validate"
|
||||
"github.com/containers/podman/v3/pkg/machine"
|
||||
|
|
@ -41,8 +44,11 @@ type listFlagType struct {
|
|||
|
||||
type machineReporter struct {
|
||||
Name string
|
||||
Default bool
|
||||
Created string
|
||||
Running bool
|
||||
LastUp string
|
||||
Stream string
|
||||
VMType string
|
||||
CPUs uint64
|
||||
Memory string
|
||||
|
|
@ -57,8 +63,8 @@ func init() {
|
|||
|
||||
flags := lsCmd.Flags()
|
||||
formatFlagName := "format"
|
||||
flags.StringVar(&listFlag.format, formatFlagName, "{{.Name}}\t{{.VMType}}\t{{.Created}}\t{{.LastUp}}\t{{.CPUs}}\t{{.Memory}}\t{{.DiskSize}}\n", "Format volume output using Go template")
|
||||
_ = lsCmd.RegisterFlagCompletionFunc(formatFlagName, completion.AutocompleteNone)
|
||||
flags.StringVar(&listFlag.format, formatFlagName, "{{.Name}}\t{{.VMType}}\t{{.Created}}\t{{.LastUp}}\t{{.CPUs}}\t{{.Memory}}\t{{.DiskSize}}\n", "Format volume output using JSON or a Go template")
|
||||
_ = lsCmd.RegisterFlagCompletionFunc(formatFlagName, common.AutocompleteFormat(machineReporter{}))
|
||||
flags.BoolVar(&listFlag.noHeading, "noheading", false, "Do not print headers")
|
||||
}
|
||||
|
||||
|
|
@ -78,6 +84,21 @@ func list(cmd *cobra.Command, args []string) error {
|
|||
sort.Slice(listResponse, func(i, j int) bool {
|
||||
return listResponse[i].Running
|
||||
})
|
||||
|
||||
if report.IsJSON(listFlag.format) {
|
||||
machineReporter, err := toMachineFormat(listResponse)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
b, err := json.Marshal(machineReporter)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
os.Stdout.Write(b)
|
||||
return nil
|
||||
}
|
||||
|
||||
machineReporter, err := toHumanFormat(listResponse)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -121,6 +142,50 @@ func outputTemplate(cmd *cobra.Command, responses []*machineReporter) error {
|
|||
return tmpl.Execute(w, responses)
|
||||
}
|
||||
|
||||
func strTime(t time.Time) string {
|
||||
iso, err := t.MarshalText()
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return string(iso)
|
||||
}
|
||||
|
||||
func strUint(u uint64) string {
|
||||
return strconv.FormatUint(u, 10)
|
||||
}
|
||||
|
||||
func streamName(imageStream string) string {
|
||||
if imageStream == "" {
|
||||
return "default"
|
||||
}
|
||||
return imageStream
|
||||
}
|
||||
|
||||
func toMachineFormat(vms []*machine.ListResponse) ([]*machineReporter, error) {
|
||||
cfg, err := config.ReadCustomConfig()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
machineResponses := make([]*machineReporter, 0, len(vms))
|
||||
for _, vm := range vms {
|
||||
response := new(machineReporter)
|
||||
response.Default = vm.Name == cfg.Engine.ActiveService
|
||||
response.Name = vm.Name
|
||||
response.Running = vm.Running
|
||||
response.LastUp = strTime(vm.LastUp)
|
||||
response.Created = strTime(vm.CreatedAt)
|
||||
response.Stream = streamName(vm.Stream)
|
||||
response.VMType = vm.VMType
|
||||
response.CPUs = vm.CPUs
|
||||
response.Memory = strUint(vm.Memory * units.MiB)
|
||||
response.DiskSize = strUint(vm.DiskSize * units.GiB)
|
||||
|
||||
machineResponses = append(machineResponses, response)
|
||||
}
|
||||
return machineResponses, nil
|
||||
}
|
||||
|
||||
func toHumanFormat(vms []*machine.ListResponse) ([]*machineReporter, error) {
|
||||
cfg, err := config.ReadCustomConfig()
|
||||
if err != nil {
|
||||
|
|
@ -132,11 +197,13 @@ func toHumanFormat(vms []*machine.ListResponse) ([]*machineReporter, error) {
|
|||
response := new(machineReporter)
|
||||
if vm.Name == cfg.Engine.ActiveService {
|
||||
response.Name = vm.Name + "*"
|
||||
response.Default = true
|
||||
} else {
|
||||
response.Name = vm.Name
|
||||
}
|
||||
if vm.Running {
|
||||
response.LastUp = "Currently running"
|
||||
response.Running = true
|
||||
} else {
|
||||
response.LastUp = units.HumanDuration(time.Since(vm.LastUp)) + " ago"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ type ListResponse struct {
|
|||
CreatedAt time.Time
|
||||
LastUp time.Time
|
||||
Running bool
|
||||
Stream string
|
||||
VMType string
|
||||
CPUs uint64
|
||||
Memory uint64
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ type MachineVM struct {
|
|||
IdentityPath string
|
||||
// IgnitionFilePath is the fq path to the .ign file
|
||||
IgnitionFilePath string
|
||||
// ImageStream is the update stream for the image
|
||||
ImageStream string
|
||||
// ImagePath is the fq path to
|
||||
ImagePath string
|
||||
// Memory in megabytes assigned to the vm
|
||||
|
|
|
|||
|
|
@ -143,6 +143,7 @@ func (v *MachineVM) Init(opts machine.InitOptions) error {
|
|||
switch opts.ImagePath {
|
||||
case "testing", "next", "stable", "":
|
||||
// Get image as usual
|
||||
v.ImageStream = opts.ImagePath
|
||||
dd, err := machine.NewFcosDownloader(vmtype, v.Name, opts.ImagePath)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -154,6 +155,7 @@ func (v *MachineVM) Init(opts machine.InitOptions) error {
|
|||
default:
|
||||
// The user has provided an alternate image which can be a file path
|
||||
// or URL.
|
||||
v.ImageStream = "custom"
|
||||
g, err := machine.NewGenericDownloader(vmtype, v.Name, opts.ImagePath)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -590,6 +592,7 @@ func GetVMInfos() ([]*machine.ListResponse, error) {
|
|||
listEntry := new(machine.ListResponse)
|
||||
|
||||
listEntry.Name = vm.Name
|
||||
listEntry.Stream = vm.ImageStream
|
||||
listEntry.VMType = "qemu"
|
||||
listEntry.CPUs = vm.CPUs
|
||||
listEntry.Memory = vm.Memory
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue