func newCoreServiceProject(cfg *config.CloudConfig, useNetwork, loadConsole bool) (*project.Project, error) { environmentLookup := rosDocker.NewConfigEnvironment(cfg) authLookup := rosDocker.NewConfigAuthLookup(cfg) p, err := newProject("os", cfg, environmentLookup, authLookup) if err != nil { return nil, err } projectEvents := make(chan events.Event) p.AddListener(project.NewDefaultListener(p)) p.AddListener(projectEvents) p.ReloadCallback = projectReload(p, &useNetwork, loadConsole, environmentLookup, authLookup) go func() { for event := range projectEvents { if event.EventType == events.ContainerStarted && event.ServiceName == "ntp" { useNetwork = true } } }() err = p.ReloadCallback() if err != nil { log.Errorf("Failed to reload os: %v", err) return nil, err } return p, nil }
func newProject(name string, cfg *config.CloudConfig, environmentLookup project.EnvironmentLookup) (*project.Project, error) { clientFactory, err := rosDocker.NewClientFactory(docker.ClientOpts{}) if err != nil { return nil, err } if environmentLookup == nil { environmentLookup = rosDocker.NewConfigEnvironment(cfg) } serviceFactory := &rosDocker.ServiceFactory{ Deps: map[string][]string{}, } context := &docker.Context{ ClientFactory: clientFactory, Context: project.Context{ ProjectName: name, NoRecreate: true, // for libcompose to not recreate on project reload, looping up the boot :) EnvironmentLookup: environmentLookup, ServiceFactory: serviceFactory, Log: cfg.Rancher.Log, LoggerFactory: logger.NewColorLoggerFactory(), }, } serviceFactory.Context = context return docker.NewProject(context) }
func newProject(name string, cfg *config.CloudConfig, environmentLookup composeConfig.EnvironmentLookup, authLookup *rosDocker.ConfigAuthLookup) (*project.Project, error) { clientFactory, err := rosDocker.NewClientFactory(composeClient.Options{}) if err != nil { return nil, err } if environmentLookup == nil { environmentLookup = rosDocker.NewConfigEnvironment(cfg) } if authLookup == nil { authLookup = rosDocker.NewConfigAuthLookup(cfg) } serviceFactory := &rosDocker.ServiceFactory{ Deps: map[string][]string{}, } context := &docker.Context{ ClientFactory: clientFactory, AuthLookup: authLookup, Context: project.Context{ ProjectName: name, EnvironmentLookup: environmentLookup, ServiceFactory: serviceFactory, LoggerFactory: logger.NewColorLoggerFactory(), }, } serviceFactory.Context = context authLookup.SetContext(context) return docker.NewProject(context, &composeConfig.ParseOptions{ Interpolate: true, Validate: false, Preprocess: preprocessServiceMap, }) }
func newProject(name string, cfg *config.CloudConfig) (*project.Project, error) { clientFactory, err := rosDocker.NewClientFactory(docker.ClientOpts{}) if err != nil { return nil, err } serviceFactory := &rosDocker.ServiceFactory{ Deps: map[string][]string{}, } context := &docker.Context{ ClientFactory: clientFactory, Context: project.Context{ ProjectName: name, EnvironmentLookup: rosDocker.NewConfigEnvironment(cfg), ServiceFactory: serviceFactory, Rebuild: true, Log: cfg.Rancher.Log, LoggerFactory: logger.NewColorLoggerFactory(), }, } serviceFactory.Context = context return docker.NewProject(context) }
func newCoreServiceProject(cfg *config.CloudConfig, network bool) (*project.Project, error) { projectEvents := make(chan project.Event) enabled := map[interface{}]interface{}{} environmentLookup := rosDocker.NewConfigEnvironment(cfg) p, err := newProject("os", cfg, environmentLookup) if err != nil { return nil, err } p.AddListener(project.NewDefaultListener(p)) p.AddListener(projectEvents) p.ReloadCallback = func() error { var err error cfg, err = config.LoadConfig() if err != nil { return err } environmentLookup.SetConfig(cfg) enabled = addServices(p, enabled, cfg.Rancher.Services) for service, serviceEnabled := range cfg.Rancher.ServicesInclude { if _, ok := enabled[service]; ok || !serviceEnabled { continue } bytes, err := LoadServiceResource(service, network, cfg) if err != nil { if err == util.ErrNoNetwork { log.Debugf("Can not load %s, networking not enabled", service) } else { log.Errorf("Failed to load %s : %v", service, err) } continue } m := map[interface{}]interface{}{} if err := yaml.Unmarshal(bytes, &m); err != nil { log.Errorf("Failed to parse YAML configuration: %s : %v", service, err) continue } bytes, err = yaml.Marshal(adjustContainerNames(config.StringifyValues(m))) if err != nil { log.Errorf("Failed to marshal YAML configuration: %s : %v", service, err) continue } err = p.Load(bytes) if err != nil { log.Errorf("Failed to load %s : %v", service, err) continue } enabled[service] = service } return nil } go func() { for event := range projectEvents { if event.EventType == project.EventContainerStarted && event.ServiceName == "ntp" { network = true } } }() err = p.ReloadCallback() if err != nil { log.Errorf("Failed to reload os: %v", err) return nil, err } return p, nil }