github.com/docker/app@v0.9.1-beta3.0.20210611140623-a48f773ab002/internal/cliopts/installerContext.go (about) 1 package cliopts 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/docker/cli/cli/command" 8 "github.com/docker/cli/cli/config" 9 "github.com/docker/cli/cli/flags" 10 "github.com/pkg/errors" 11 "github.com/sirupsen/logrus" 12 "github.com/spf13/pflag" 13 ) 14 15 type InstallerContextOptions struct { 16 installerContext string 17 } 18 19 func (o *InstallerContextOptions) AddFlags(flags *pflag.FlagSet) { 20 defaultContext, ok := os.LookupEnv("DOCKER_INSTALLER_CONTEXT") 21 if !ok { 22 defaultContext = "default" 23 } 24 flags.StringVar(&o.installerContext, "installer-context", defaultContext, "Context on which the installer image is ran") 25 flags.SetAnnotation("installer-context", "experimentalCLI", []string{"true"}) //nolint:errcheck 26 } 27 28 func (o *InstallerContextOptions) SetInstallerContext(dockerCli command.Cli) (command.Cli, error) { 29 if o.installerContext != dockerCli.CurrentContext() { 30 if _, err := dockerCli.ContextStore().GetMetadata(o.installerContext); err != nil { 31 return nil, errors.Wrapf(err, "Unknown docker context %s", o.installerContext) 32 } 33 fmt.Fprintf(dockerCli.Out(), "Using context %q to run installer image", o.installerContext) 34 cli, err := command.NewDockerCli() 35 if err != nil { 36 return nil, err 37 } 38 opts := flags.ClientOptions{ 39 Common: &flags.CommonOptions{ 40 Context: o.installerContext, 41 LogLevel: logrus.GetLevel().String(), 42 }, 43 ConfigDir: config.Dir(), 44 } 45 if err = cli.Apply( 46 command.WithInputStream(dockerCli.In()), 47 command.WithOutputStream(dockerCli.Out()), 48 command.WithErrorStream(dockerCli.Err())); err != nil { 49 return nil, err 50 } 51 if err = cli.Initialize(&opts); err != nil { 52 return nil, err 53 } 54 return cli, nil 55 } 56 return dockerCli, nil 57 }