From 1c1300bef652847875daa8fdaf6279117e299af6 Mon Sep 17 00:00:00 2001 From: Mathieu Champlon Date: Tue, 15 May 2018 16:56:45 +0200 Subject: [PATCH] Imply all Kubernetes namespaces for docker stack list when orchestrator is all or Kubernetes * Add "kubernetes" struct in config file with "allNamespaces" option, to opt-out this behavior when set as "disabled" Signed-off-by: Mathieu Champlon --- cli/command/stack/kubernetes/list.go | 8 ++++++++ cli/config/configfile/file.go | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/cli/command/stack/kubernetes/list.go b/cli/command/stack/kubernetes/list.go index 4a429731a5..f6efd050aa 100644 --- a/cli/command/stack/kubernetes/list.go +++ b/cli/command/stack/kubernetes/list.go @@ -10,6 +10,7 @@ import ( "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command/formatter" "github.com/docker/cli/cli/command/stack/options" + "github.com/docker/cli/cli/config/configfile" "github.com/pkg/errors" core_v1 "k8s.io/api/core/v1" apierrs "k8s.io/apimachinery/pkg/api/errors" @@ -19,11 +20,18 @@ import ( // GetStacks lists the kubernetes stacks func GetStacks(kubeCli *KubeCli, opts options.List) ([]*formatter.Stack, error) { if opts.AllNamespaces || len(opts.Namespaces) == 0 { + if isAllNamespacesDisabled(kubeCli.ConfigFile().Kubernetes) { + opts.AllNamespaces = true + } return getStacksWithAllNamespaces(kubeCli, opts) } return getStacksWithNamespaces(kubeCli, opts, removeDuplicates(opts.Namespaces)) } +func isAllNamespacesDisabled(kubeCliConfig *configfile.KubernetesConfig) bool { + return kubeCliConfig == nil || kubeCliConfig != nil && kubeCliConfig.AllNamespaces != "disabled" +} + func getStacks(kubeCli *KubeCli, opts options.List) ([]*formatter.Stack, error) { composeClient, err := kubeCli.composeClient() if err != nil { diff --git a/cli/config/configfile/file.go b/cli/config/configfile/file.go index 5653306622..f658385e16 100644 --- a/cli/config/configfile/file.go +++ b/cli/config/configfile/file.go @@ -46,6 +46,7 @@ type ConfigFile struct { Proxies map[string]ProxyConfig `json:"proxies,omitempty"` Experimental string `json:"experimental,omitempty"` Orchestrator string `json:"orchestrator,omitempty"` + Kubernetes *KubernetesConfig `json:"kubernetes,omitempty"` } // ProxyConfig contains proxy configuration settings @@ -56,6 +57,11 @@ type ProxyConfig struct { FTPProxy string `json:"ftpProxy,omitempty"` } +// KubernetesConfig contains Kubernetes orchestrator settings +type KubernetesConfig struct { + AllNamespaces string `json:"allNamespaces,omitempty"` +} + // New initializes an empty configuration file for the given filename 'fn' func New(fn string) *ConfigFile { return &ConfigFile{