12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package project
- import (
- "strings"
- "github.com/docker/engine-api/types/container"
- )
- // DefaultDependentServices return the dependent services (as an array of ServiceRelationship)
- // for the specified project and service. It looks for : links, volumesFrom, net and ipc configuration.
- func DefaultDependentServices(p *Project, s Service) []ServiceRelationship {
- config := s.Config()
- if config == nil {
- return []ServiceRelationship{}
- }
- result := []ServiceRelationship{}
- for _, link := range config.Links {
- result = append(result, NewServiceRelationship(link, RelTypeLink))
- }
- for _, volumesFrom := range config.VolumesFrom {
- result = append(result, NewServiceRelationship(volumesFrom, RelTypeVolumesFrom))
- }
- for _, dependsOn := range config.DependsOn {
- result = append(result, NewServiceRelationship(dependsOn, RelTypeDependsOn))
- }
- result = appendNs(p, result, s.Config().NetworkMode, RelTypeNetNamespace)
- result = appendNs(p, result, s.Config().Ipc, RelTypeIpcNamespace)
- return result
- }
- func appendNs(p *Project, rels []ServiceRelationship, conf string, relType ServiceRelationshipType) []ServiceRelationship {
- service := GetContainerFromIpcLikeConfig(p, conf)
- if service != "" {
- rels = append(rels, NewServiceRelationship(service, relType))
- }
- return rels
- }
- // NameAlias returns the name and alias based on the specified string.
- // If the name contains a colon (like name:alias) it will split it, otherwise
- // it will return the specified name as name and alias.
- func NameAlias(name string) (string, string) {
- parts := strings.SplitN(name, ":", 2)
- if len(parts) == 2 {
- return parts[0], parts[1]
- }
- return parts[0], parts[0]
- }
- // GetContainerFromIpcLikeConfig returns name of the service that shares the IPC
- // namespace with the specified service.
- func GetContainerFromIpcLikeConfig(p *Project, conf string) string {
- ipc := container.IpcMode(conf)
- if !ipc.IsContainer() {
- return ""
- }
- name := ipc.Container()
- if name == "" {
- return ""
- }
- if p.ServiceConfigs.Has(name) {
- return name
- }
- return ""
- }
|