github.com/cspotcode/docker-cli@v20.10.0-rc1.0.20201201121459-3faad7acc5b8+incompatible/cli/command/context/use.go (about)

     1  package context
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  
     7  	"github.com/docker/cli/cli/command"
     8  	"github.com/spf13/cobra"
     9  )
    10  
    11  func newUseCommand(dockerCli command.Cli) *cobra.Command {
    12  	cmd := &cobra.Command{
    13  		Use:   "use CONTEXT",
    14  		Short: "Set the current docker context",
    15  		Args:  cobra.ExactArgs(1),
    16  		RunE: func(cmd *cobra.Command, args []string) error {
    17  			name := args[0]
    18  			return RunUse(dockerCli, name)
    19  		},
    20  	}
    21  	return cmd
    22  }
    23  
    24  // RunUse set the current Docker context
    25  func RunUse(dockerCli command.Cli, name string) error {
    26  	if err := validateContextName(name); err != nil && name != "default" {
    27  		return err
    28  	}
    29  	if _, err := dockerCli.ContextStore().GetMetadata(name); err != nil && name != "default" {
    30  		return err
    31  	}
    32  	configValue := name
    33  	if configValue == "default" {
    34  		configValue = ""
    35  	}
    36  	dockerConfig := dockerCli.ConfigFile()
    37  	dockerConfig.CurrentContext = configValue
    38  	if err := dockerConfig.Save(); err != nil {
    39  		return err
    40  	}
    41  	fmt.Fprintln(dockerCli.Out(), name)
    42  	fmt.Fprintf(dockerCli.Err(), "Current context is now %q\n", name)
    43  	if os.Getenv("DOCKER_HOST") != "" {
    44  		fmt.Fprintf(dockerCli.Err(), "Warning: DOCKER_HOST environment variable overrides the active context. "+
    45  			"To use %q, either set the global --context flag, or unset DOCKER_HOST environment variable.\n", name)
    46  	}
    47  	return nil
    48  }