// boot chain dependencies // TODO: this currently only supports simple services (with no further dependencies) func bootDependencies(chain *definitions.Chain, do *definitions.Do) error { if chain.Dependencies != nil { name := do.Name logger.Infoln("Booting chain dependencies", chain.Dependencies.Services, chain.Dependencies.Chains) for _, srvName := range chain.Dependencies.Services { do.Name = srvName srv, err := loaders.LoadServiceDefinition(do.Name, false, do.Operations.ContainerNumber) if err != nil { return err } // Start corresponding service. if !services.IsServiceRunning(srv.Service, srv.Operations) { name := strings.ToUpper(do.Name) logger.Infof("%s is not running. Starting now. Waiting for %s to become available \n", name, name) if err = perform.DockerRunService(srv.Service, srv.Operations); err != nil { return err } } } do.Name = name // undo side effects for _, chainName := range chain.Dependencies.Chains { chn, err := loaders.LoadChainDefinition(chainName, false, do.Operations.ContainerNumber) if err != nil { return err } if !IsChainRunning(chn) { return fmt.Errorf("chain %s depends on chain %s but %s is not running", chain.Name, chainName, chainName) } } } return nil }
// boot chain dependencies // TODO: this currently only supports simple services (with no further dependencies) func bootDependencies(chain *definitions.Chain, do *definitions.Do) error { if do.Logsrotate { chain.Dependencies.Services = append(chain.Dependencies.Services, "logsrotate") } if chain.Dependencies != nil { name := do.Name log.WithFields(log.Fields{ "services": chain.Dependencies.Services, "chains": chain.Dependencies.Chains, }).Info("Booting chain dependencies") for _, srvName := range chain.Dependencies.Services { do.Name = srvName srv, err := loaders.LoadServiceDefinition(do.Name, false, do.Operations.ContainerNumber) if err != nil { return err } // Start corresponding service. if !services.IsServiceRunning(srv.Service, srv.Operations) { name := strings.ToUpper(do.Name) log.WithField("=>", name).Info("Dependency not running. Starting now") if err = perform.DockerRunService(srv.Service, srv.Operations); err != nil { return err } } } do.Name = name // undo side effects for _, chainName := range chain.Dependencies.Chains { chn, err := loaders.LoadChainDefinition(chainName, false, do.Operations.ContainerNumber) if err != nil { return err } if !IsChainRunning(chn) { return fmt.Errorf("chain %s depends on chain %s but %s is not running", chain.Name, chainName, chainName) } } } return nil }