Skip to content

Commit 691eeff

Browse files
committed
Move Kubernetes stack retrieval to the kubernetes namespace
Signed-off-by: Mathieu Champlon <[email protected]>
1 parent e0dbcb3 commit 691eeff

2 files changed

Lines changed: 51 additions & 46 deletions

File tree

cli/command/stack/kubernetes/list.go

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,29 @@
11
package kubernetes
22

33
import (
4+
"github.com/docker/cli/cli/command"
45
"github.com/docker/cli/cli/command/formatter"
56
"github.com/docker/cli/cli/command/stack/options"
67
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
78
)
89

9-
// GetStacks lists the kubernetes stacks.
10-
func GetStacks(kubeCli *KubeCli, opts options.List) ([]*formatter.Stack, error) {
11-
composeClient, err := kubeCli.composeClient()
10+
// GetStacks lists the kubernetes stacks
11+
func GetStacks(dockerCli command.Cli, opts options.List, kopts Options) ([]*formatter.Stack, error) {
12+
if opts.AllNamespaces || len(opts.Namespaces) == 0 {
13+
if dockerCli.ClientInfo().HasAll() {
14+
opts.AllNamespaces = true
15+
}
16+
return getStacks(dockerCli, opts, kopts)
17+
}
18+
return getStacksWithNamespaces(dockerCli, opts, kopts)
19+
}
20+
21+
func getStacks(dockerCli command.Cli, opts options.List, kopts Options) ([]*formatter.Stack, error) {
22+
kli, err := WrapCli(dockerCli, kopts)
23+
if err != nil {
24+
return nil, err
25+
}
26+
composeClient, err := kli.composeClient()
1227
if err != nil {
1328
return nil, err
1429
}
@@ -31,3 +46,28 @@ func GetStacks(kubeCli *KubeCli, opts options.List) ([]*formatter.Stack, error)
3146
}
3247
return formattedStacks, nil
3348
}
49+
50+
func getStacksWithNamespaces(dockerCli command.Cli, opts options.List, kopts Options) ([]*formatter.Stack, error) {
51+
stacks := []*formatter.Stack{}
52+
for _, namespace := range removeDuplicates(opts.Namespaces) {
53+
kopts.Namespace = namespace
54+
ss, err := getStacks(dockerCli, opts, kopts)
55+
if err != nil {
56+
return nil, err
57+
}
58+
stacks = append(stacks, ss...)
59+
}
60+
return stacks, nil
61+
}
62+
63+
func removeDuplicates(namespaces []string) []string {
64+
mnms := map[string]struct{}{}
65+
for _, nm := range namespaces {
66+
mnms[nm] = struct{}{}
67+
}
68+
namespaces = []string{}
69+
for nm := range mnms {
70+
namespaces = append(namespaces, nm)
71+
}
72+
return namespaces
73+
}

cli/command/stack/list.go

Lines changed: 8 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -47,27 +47,16 @@ func runList(cmd *cobra.Command, dockerCli command.Cli, opts options.List) error
4747
stacks = append(stacks, ss...)
4848
}
4949
if dockerCli.ClientInfo().HasKubernetes() {
50-
kopts := kubernetes.NewOptions(cmd.Flags())
51-
if opts.AllNamespaces || len(opts.Namespaces) == 0 {
52-
if dockerCli.ClientInfo().HasAll() {
53-
opts.AllNamespaces = true
54-
}
55-
ss, err := getStacks(dockerCli, opts, kopts)
56-
if err != nil {
57-
return err
58-
}
59-
stacks = append(stacks, ss...)
60-
} else {
61-
for _, nm := range removeDuplicates(opts.Namespaces) {
62-
kopts.Namespace = nm
63-
ss, err := getStacks(dockerCli, opts, kopts)
64-
if err != nil {
65-
return err
66-
}
67-
stacks = append(stacks, ss...)
68-
}
50+
ss, err := kubernetes.GetStacks(dockerCli, opts, kubernetes.NewOptions(cmd.Flags()))
51+
if err != nil {
52+
return err
6953
}
54+
stacks = append(stacks, ss...)
7055
}
56+
return format(dockerCli, opts, stacks)
57+
}
58+
59+
func format(dockerCli command.Cli, opts options.List, stacks []*formatter.Stack) error {
7160
format := opts.Format
7261
if format == "" || format == formatter.TableFormatKey {
7362
format = formatter.SwarmStackTableFormat
@@ -86,27 +75,3 @@ func runList(cmd *cobra.Command, dockerCli command.Cli, opts options.List) error
8675
})
8776
return formatter.StackWrite(stackCtx, stacks)
8877
}
89-
90-
func getStacks(dockerCli command.Cli, opts options.List, kopts kubernetes.Options) ([]*formatter.Stack, error) {
91-
kli, err := kubernetes.WrapCli(dockerCli, kopts)
92-
if err != nil {
93-
return nil, err
94-
}
95-
ss, err := kubernetes.GetStacks(kli, opts)
96-
if err != nil {
97-
return nil, err
98-
}
99-
return ss, nil
100-
}
101-
102-
func removeDuplicates(namespaces []string) []string {
103-
mnms := map[string]struct{}{}
104-
for _, nm := range namespaces {
105-
mnms[nm] = struct{}{}
106-
}
107-
namespaces = []string{}
108-
for nm := range mnms {
109-
namespaces = append(namespaces, nm)
110-
}
111-
return namespaces
112-
}

0 commit comments

Comments
 (0)