mirror of https://github.com/docker/buildx.git
commands: implement ls
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
parent
b7e15f3113
commit
0f4de0d7e4
|
@ -149,7 +149,7 @@ func Build(ctx context.Context, drivers []DriverInfo, opt map[string]Options, pw
|
|||
opt.Exports[i].Type = "moby"
|
||||
if e.Attrs["push"] != "" {
|
||||
if ok, _ := strconv.ParseBool(e.Attrs["push"]); ok {
|
||||
return nil, errors.Errorf("auto-push is currently not implemented for moby driver")
|
||||
return nil, errors.Errorf("auto-push is currently not implemented for docker driver")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
128
commands/ls.go
128
commands/ls.go
|
@ -1,30 +1,27 @@
|
|||
package commands
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
"text/tabwriter"
|
||||
"time"
|
||||
|
||||
"github.com/docker/cli/cli"
|
||||
"github.com/docker/cli/cli/command"
|
||||
"github.com/moby/buildkit/util/appcontext"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/tonistiigi/buildx/store"
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
||||
type lsOptions struct {
|
||||
}
|
||||
|
||||
func runLs(dockerCli command.Cli, in lsOptions) error {
|
||||
ep, err := getCurrentEndpoint(dockerCli)
|
||||
fmt.Printf("current endpoint: %+v %v\n", ep, err)
|
||||
|
||||
fmt.Printf("current config file: %+v\n", dockerCli.ConfigFile())
|
||||
fmt.Printf("current config file: %+v\n", dockerCli)
|
||||
|
||||
list, err := dockerCli.ContextStore().ListContexts()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for i, l := range list {
|
||||
fmt.Printf("context%d: %+v\n", i, l)
|
||||
}
|
||||
ctx := appcontext.Context()
|
||||
|
||||
txn, release, err := getStore(dockerCli)
|
||||
if err != nil {
|
||||
|
@ -32,17 +29,112 @@ func runLs(dockerCli command.Cli, in lsOptions) error {
|
|||
}
|
||||
defer release()
|
||||
|
||||
ctx, cancel := context.WithTimeout(ctx, 7*time.Second)
|
||||
defer cancel()
|
||||
|
||||
ll, err := txn.List()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for i, l := range ll {
|
||||
fmt.Printf("store %d: %+v\n", i, l)
|
||||
|
||||
builders := make([]*nginfo, len(ll))
|
||||
for i, ng := range ll {
|
||||
builders[i] = &nginfo{ng: ng}
|
||||
}
|
||||
|
||||
list, err := dockerCli.ContextStore().ListContexts()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
ctxbuilders := make([]*nginfo, len(list))
|
||||
for i, l := range list {
|
||||
ctxbuilders[i] = &nginfo{ng: &store.NodeGroup{
|
||||
Name: l.Name,
|
||||
Nodes: []store.Node{{
|
||||
Name: l.Name,
|
||||
Endpoint: l.Name,
|
||||
}},
|
||||
}}
|
||||
}
|
||||
|
||||
builders = append(builders, ctxbuilders...)
|
||||
|
||||
eg, _ := errgroup.WithContext(ctx)
|
||||
|
||||
for _, b := range builders {
|
||||
func(b *nginfo) {
|
||||
eg.Go(func() error {
|
||||
err = loadNodeGroupData(ctx, dockerCli, b)
|
||||
if b.err == nil && err != nil {
|
||||
b.err = err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}(b)
|
||||
}
|
||||
|
||||
if err := eg.Wait(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
currentName := "default"
|
||||
current, err := getCurrentInstance(txn, dockerCli)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if current != nil {
|
||||
currentName = current.Name
|
||||
if current.Name == "default" {
|
||||
currentName = current.Nodes[0].Endpoint
|
||||
}
|
||||
}
|
||||
|
||||
w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0)
|
||||
fmt.Fprintf(w, "NAME\tDRIVER/ENDPOINT\tSTATUS\tPLATFORMS\n")
|
||||
|
||||
currentSet := false
|
||||
for _, b := range builders {
|
||||
if !currentSet && b.ng.Name == currentName {
|
||||
b.ng.Name += " *"
|
||||
currentSet = true
|
||||
}
|
||||
printngi(w, b)
|
||||
}
|
||||
|
||||
w.Flush()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func printngi(w io.Writer, ngi *nginfo) {
|
||||
var err string
|
||||
if ngi.err != nil {
|
||||
err = ngi.err.Error()
|
||||
}
|
||||
fmt.Fprintf(w, "%s\t%s\t%s\t\n", ngi.ng.Name, ngi.ng.Driver, err)
|
||||
if ngi.err == nil {
|
||||
for idx, n := range ngi.ng.Nodes {
|
||||
d := ngi.drivers[idx]
|
||||
var err string
|
||||
if d.err != nil {
|
||||
err = d.err.Error()
|
||||
} else if d.di.Err != nil {
|
||||
err = d.di.Err.Error()
|
||||
}
|
||||
var status string
|
||||
if d.info != nil {
|
||||
status = d.info.Status.String()
|
||||
}
|
||||
p := append(n.Platforms, d.platforms...)
|
||||
if err != "" {
|
||||
fmt.Fprintf(w, " %s\t%s\t%s\n", n.Name, n.Endpoint, err)
|
||||
} else {
|
||||
fmt.Fprintf(w, " %s\t%s\t%s\t%s\n", n.Name, n.Endpoint, status, strings.Join(p, ", "))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func lsCmd(dockerCli command.Cli) *cobra.Command {
|
||||
var options lsOptions
|
||||
|
||||
|
@ -55,11 +147,5 @@ func lsCmd(dockerCli command.Cli) *cobra.Command {
|
|||
},
|
||||
}
|
||||
|
||||
flags := cmd.Flags()
|
||||
|
||||
// flags.StringArrayVarP(&options.outputs, "output", "o", []string{}, "Output destination (format: type=local,dest=path)")
|
||||
|
||||
_ = flags
|
||||
|
||||
return cmd
|
||||
}
|
||||
|
|
|
@ -88,6 +88,10 @@ func getCurrentInstance(txn *store.Txn, dockerCli command.Cli) (*store.NodeGroup
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if ng == nil {
|
||||
ng, _ = getNodeGroup(txn, dockerCli, dockerCli.CurrentContext())
|
||||
}
|
||||
|
||||
return ng, nil
|
||||
}
|
||||
|
||||
|
|
2
go.mod
2
go.mod
|
@ -68,7 +68,7 @@ require (
|
|||
github.com/prometheus/client_model v0.0.0-20170216185247-6f3806018612 // indirect
|
||||
github.com/prometheus/common v0.0.0-20180518154759-7600349dcfe1 // indirect
|
||||
github.com/prometheus/procfs v0.0.0-20180612222113-7d6f385de8be // indirect
|
||||
github.com/sirupsen/logrus v1.4.0 // indirect
|
||||
github.com/sirupsen/logrus v1.4.0
|
||||
github.com/spf13/cobra v0.0.3
|
||||
github.com/spf13/pflag v1.0.3
|
||||
github.com/spf13/viper v1.3.2 // indirect
|
||||
|
|
|
@ -100,7 +100,7 @@ func (ng *NodeGroup) nextNodeName() string {
|
|||
i := 0
|
||||
for {
|
||||
name := fmt.Sprintf("%s%d", ng.Name, i)
|
||||
if i := ng.findNode(name); i != -1 {
|
||||
if ii := ng.findNode(name); ii != -1 {
|
||||
i++
|
||||
continue
|
||||
}
|
||||
|
|
|
@ -103,16 +103,16 @@ github.com/docker/cli/cli-plugins/plugin
|
|||
github.com/docker/cli/cli/command
|
||||
github.com/docker/cli/cli/flags
|
||||
github.com/docker/cli/cli
|
||||
github.com/docker/cli/cli/context/docker
|
||||
github.com/docker/cli/opts
|
||||
github.com/docker/cli/cli/compose/interpolation
|
||||
github.com/docker/cli/cli/compose/schema
|
||||
github.com/docker/cli/cli/compose/template
|
||||
github.com/docker/cli/opts
|
||||
github.com/docker/cli/cli/config
|
||||
github.com/docker/cli/cli/config/configfile
|
||||
github.com/docker/cli/cli/connhelper
|
||||
github.com/docker/cli/cli/config/types
|
||||
github.com/docker/cli/cli/context
|
||||
github.com/docker/cli/cli/context/docker
|
||||
github.com/docker/cli/cli/context/kubernetes
|
||||
github.com/docker/cli/cli/context/store
|
||||
github.com/docker/cli/cli/debug
|
||||
|
@ -169,13 +169,13 @@ github.com/docker/docker/pkg/homedir
|
|||
github.com/docker/docker/pkg/system
|
||||
github.com/docker/docker/pkg/term
|
||||
github.com/docker/docker/registry
|
||||
github.com/docker/docker/api/types/blkiodev
|
||||
github.com/docker/docker/api/types/swarm
|
||||
github.com/docker/docker/api
|
||||
github.com/docker/docker/api/types/image
|
||||
github.com/docker/docker/api/types/swarm
|
||||
github.com/docker/docker/api/types/time
|
||||
github.com/docker/docker/api/types/volume
|
||||
github.com/docker/docker/errdefs
|
||||
github.com/docker/docker/api/types/blkiodev
|
||||
github.com/docker/docker/api/types/strslice
|
||||
github.com/docker/docker/pkg/jsonmessage
|
||||
github.com/docker/docker/pkg/idtools
|
||||
|
|
Loading…
Reference in New Issue