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  }