1
0
mirror of https://github.com/rancher/os.git synced 2025-07-06 03:26:12 +00:00

Merge pull request #527 from imikushin/fix-bad-service-deps

Do not link to services that do not exist in the project
This commit is contained in:
Ivan Mikushin 2015-08-26 14:59:01 +05:00
commit 4df78bbca1
2 changed files with 12 additions and 7 deletions

View File

@ -14,32 +14,34 @@ type Service struct {
*docker.Service
deps map[string][]string
context *docker.Context
project *project.Project
}
func NewService(factory *ServiceFactory, name string, serviceConfig *project.ServiceConfig, context *docker.Context) *Service {
func NewService(factory *ServiceFactory, name string, serviceConfig *project.ServiceConfig, context *docker.Context, project *project.Project) *Service {
return &Service{
Service: docker.NewService(name, serviceConfig, context),
deps: factory.Deps,
context: context,
project: project,
}
}
func (s *Service) DependentServices() []project.ServiceRelationship {
rels := s.Service.DependentServices()
for _, dep := range s.deps[s.Name()] {
rels = appendLink(rels, dep, true)
rels = appendLink(rels, dep, true, s.project)
}
if s.requiresSyslog() {
rels = appendLink(rels, "syslog", false)
rels = appendLink(rels, "syslog", false, s.project)
}
if s.requiresUserDocker() {
// Linking to cloud-init is a hack really. The problem is we need to link to something
// that will trigger a reload
rels = appendLink(rels, "cloud-init", false)
rels = appendLink(rels, "cloud-init", false, s.project)
} else if s.missingImage() {
rels = appendLink(rels, "network", false)
rels = appendLink(rels, "network", false, s.project)
}
return rels
}
@ -62,7 +64,10 @@ func (s *Service) requiresUserDocker() bool {
return s.Config().Labels.MapParts()[config.SCOPE] != config.SYSTEM
}
func appendLink(deps []project.ServiceRelationship, name string, optional bool) []project.ServiceRelationship {
func appendLink(deps []project.ServiceRelationship, name string, optional bool, p *project.Project) []project.ServiceRelationship {
if _, ok := p.Configs[name]; !ok {
return deps
}
rel := project.NewServiceRelationship(name, project.REL_TYPE_LINK)
rel.Optional = optional
return append(deps, rel)

View File

@ -23,5 +23,5 @@ func (s *ServiceFactory) Create(project *project.Project, name string, serviceCo
}
}
return NewService(s, name, serviceConfig, s.Context), nil
return NewService(s, name, serviceConfig, s.Context, project), nil
}