Introduce docker context store
This PR adds a store to the CLI, that can be leveraged to persist and retrieve credentials for various API endpoints, as well as context-specific settings (initially, default stack orchestrator, but we could expand that). This comes with the logic to persist and retrieve endpoints configs for both Docker and Kubernetes APIs. Signed-off-by: Simon Ferquel <simon.ferquel@docker.com>
This commit is contained in:
@ -11,6 +11,7 @@ import (
|
||||
|
||||
"github.com/docker/cli/cli"
|
||||
"github.com/docker/cli/cli/command"
|
||||
kubecontext "github.com/docker/cli/cli/context/kubernetes"
|
||||
"github.com/docker/cli/templates"
|
||||
kubernetes "github.com/docker/compose-on-kubernetes/api"
|
||||
"github.com/docker/docker/api/types"
|
||||
@ -18,6 +19,7 @@ import (
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/spf13/cobra"
|
||||
kubernetesClient "k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
)
|
||||
|
||||
var versionTemplate = `{{with .Client -}}
|
||||
@ -126,7 +128,7 @@ func runVersion(dockerCli command.Cli, opts *versionOptions) error {
|
||||
return cli.StatusError{StatusCode: 64, Status: err.Error()}
|
||||
}
|
||||
|
||||
orchestrator, err := command.GetStackOrchestrator("", dockerCli.ConfigFile().StackOrchestrator, dockerCli.Err())
|
||||
orchestrator, err := dockerCli.StackOrchestrator("")
|
||||
if err != nil {
|
||||
return cli.StatusError{StatusCode: 64, Status: err.Error()}
|
||||
}
|
||||
@ -151,7 +153,7 @@ func runVersion(dockerCli command.Cli, opts *versionOptions) error {
|
||||
vd.Server = &sv
|
||||
var kubeVersion *kubernetesVersion
|
||||
if orchestrator.HasKubernetes() {
|
||||
kubeVersion = getKubernetesVersion(opts.kubeConfig)
|
||||
kubeVersion = getKubernetesVersion(dockerCli, opts.kubeConfig)
|
||||
}
|
||||
foundEngine := false
|
||||
foundKubernetes := false
|
||||
@ -230,17 +232,29 @@ func getDetailsOrder(v types.ComponentVersion) []string {
|
||||
return out
|
||||
}
|
||||
|
||||
func getKubernetesVersion(kubeConfig string) *kubernetesVersion {
|
||||
func getKubernetesVersion(dockerCli command.Cli, kubeConfig string) *kubernetesVersion {
|
||||
version := kubernetesVersion{
|
||||
Kubernetes: "Unknown",
|
||||
StackAPI: "Unknown",
|
||||
}
|
||||
clientConfig := kubernetes.NewKubernetesConfig(kubeConfig)
|
||||
config, err := clientConfig.ClientConfig()
|
||||
var (
|
||||
clientConfig clientcmd.ClientConfig
|
||||
err error
|
||||
)
|
||||
if dockerCli.CurrentContext() == command.ContextDockerHost {
|
||||
clientConfig = kubernetes.NewKubernetesConfig(kubeConfig)
|
||||
} else {
|
||||
clientConfig, err = kubecontext.ConfigFromContext(dockerCli.CurrentContext(), dockerCli.ContextStore())
|
||||
}
|
||||
if err != nil {
|
||||
logrus.Debugf("failed to get Kubernetes configuration: %s", err)
|
||||
return &version
|
||||
}
|
||||
config, err := clientConfig.ClientConfig()
|
||||
if err != nil {
|
||||
logrus.Debugf("failed to get Kubernetes client config: %s", err)
|
||||
return &version
|
||||
}
|
||||
kubeClient, err := kubernetesClient.NewForConfig(config)
|
||||
if err != nil {
|
||||
logrus.Debugf("failed to get Kubernetes client: %s", err)
|
||||
|
||||
Reference in New Issue
Block a user