github.com/ali-iotechsys/cli@v20.10.0+incompatible/cli/command/stack/swarm/list.go (about) 1 package swarm 2 3 import ( 4 "context" 5 6 "github.com/docker/cli/cli/command" 7 "github.com/docker/cli/cli/command/stack/formatter" 8 "github.com/docker/cli/cli/compose/convert" 9 "github.com/docker/docker/api/types" 10 "github.com/pkg/errors" 11 ) 12 13 // GetStacks lists the swarm stacks. 14 func GetStacks(dockerCli command.Cli) ([]*formatter.Stack, error) { 15 services, err := dockerCli.Client().ServiceList( 16 context.Background(), 17 types.ServiceListOptions{Filters: getAllStacksFilter()}) 18 if err != nil { 19 return nil, err 20 } 21 m := make(map[string]*formatter.Stack) 22 for _, service := range services { 23 labels := service.Spec.Labels 24 name, ok := labels[convert.LabelNamespace] 25 if !ok { 26 return nil, errors.Errorf("cannot get label %s for service %s", 27 convert.LabelNamespace, service.ID) 28 } 29 ztack, ok := m[name] 30 if !ok { 31 m[name] = &formatter.Stack{ 32 Name: name, 33 Services: 1, 34 Orchestrator: "Swarm", 35 } 36 } else { 37 ztack.Services++ 38 } 39 } 40 var stacks []*formatter.Stack 41 for _, stack := range m { 42 stacks = append(stacks, stack) 43 } 44 return stacks, nil 45 }