1
0
mirror of https://github.com/rancher/os.git synced 2025-08-31 22:32:14 +00:00

Services as compose format

This commit is contained in:
Darren Shepherd
2015-04-15 23:16:23 -07:00
parent 61b5525d5b
commit be8fa8e5b7
6 changed files with 101 additions and 47 deletions

View File

@@ -110,40 +110,51 @@ func loadImages(cfg *config.Config) error {
}
func runServices(name string, cfg *config.Config, configs map[string]*project.ServiceConfig) error {
project := project.NewProject(name, docker.NewContainerFactory(cfg))
network := false
projectEvents := make(chan project.ProjectEvent)
p := project.NewProject(name, docker.NewContainerFactory(cfg))
p.AddListener(projectEvents)
enabled := make(map[string]bool)
for name, serviceConfig := range configs {
if err := project.AddConfig(name, serviceConfig); err != nil {
if err := p.AddConfig(name, serviceConfig); err != nil {
log.Infof("Failed loading service %s", name)
}
}
project.ReloadCallback = func() error {
p.ReloadCallback = func() error {
err := cfg.Reload()
if err != nil {
return err
}
for _, service := range cfg.EnabledServices {
for service, serviceEnabled := range cfg.Services {
if !serviceEnabled {
continue
}
if _, ok := enabled[service]; ok {
continue
}
if config, ok := cfg.Services[service]; ok {
if config, ok := cfg.BundledServices[service]; ok {
for name, s := range config.SystemContainers {
if err := project.AddConfig(name, s); err != nil {
if err := p.AddConfig(name, s); err != nil {
log.Errorf("Failed to load %s : %v", name, err)
}
}
} else {
bytes, err := util.LoadResource(service)
bytes, err := util.LoadResource(service, network)
if err != nil {
log.Errorf("Failed to load %s : %v", service, err)
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
}
err = project.Load(bytes)
err = p.Load(bytes)
if err != nil {
log.Errorf("Failed to load %s : %v", service, err)
continue
@@ -156,12 +167,20 @@ func runServices(name string, cfg *config.Config, configs map[string]*project.Se
return nil
}
err := project.ReloadCallback()
go func() {
for event := range projectEvents {
if event.Event == project.CONTAINER_STARTED && event.Service.Name() == "network" {
network = true
}
}
}()
err := p.ReloadCallback()
if err != nil {
log.Errorf("Failed to reload %s : %v", name, err)
return err
}
return project.Up()
return p.Up()
}
func runContainers(cfg *config.Config) error {