// NewProject creates a Project with the specified context. func NewProject(context *ctx.Context, parseOptions *config.ParseOptions) (project.APIProject, error) { if context.AuthLookup == nil { context.AuthLookup = auth.NewConfigLookup(context.ConfigFile) } if context.ServiceFactory == nil { context.ServiceFactory = service.NewFactory(context) } if context.ClientFactory == nil { factory, err := client.NewDefaultFactory(client.Options{}) if err != nil { return nil, err } context.ClientFactory = factory } if context.NetworksFactory == nil { networksFactory := &network.DockerFactory{ ClientFactory: context.ClientFactory, } context.NetworksFactory = networksFactory } if context.VolumesFactory == nil { volumesFactory := &volume.DockerFactory{ ClientFactory: context.ClientFactory, } context.VolumesFactory = volumesFactory } // FIXME(vdemeester) Remove the context duplication ? runtime := &Project{ clientFactory: context.ClientFactory, } p := project.NewProject(&context.Context, runtime, parseOptions) err := p.Parse() if err != nil { return nil, err } if err = context.LookupConfig(); err != nil { logrus.Errorf("Failed to open project %s: %v", p.Name, err) return nil, err } return p, err }
// Populate updates the specified docker context based on command line arguments and subcommands. func Populate(context *ctx.Context, c *cli.Context) { command.Populate(&context.Context, c) context.ConfigDir = c.String("configdir") opts := client.Options{} opts.TLS = c.GlobalBool("tls") opts.TLSVerify = c.GlobalBool("tlsverify") opts.TLSOptions.CAFile = c.GlobalString("tlscacert") opts.TLSOptions.CertFile = c.GlobalString("tlscert") opts.TLSOptions.KeyFile = c.GlobalString("tlskey") clientFactory, err := client.NewDefaultFactory(opts) if err != nil { logrus.Fatalf("Failed to construct Docker client: %v", err) } context.ClientFactory = clientFactory }