func ExecService(do *definitions.Do) error { service, err := loaders.LoadServiceDefinition(do.Name, false, do.Operations.ContainerNumber) if err != nil { return err } util.Merge(service.Operations, do.Operations) // Get the main service container name, check if it's running. main := util.FindServiceContainer(do.Name, do.Operations.ContainerNumber, false) if main != nil { if service.Service.ExecHost == "" { log.Info("exec_host not found in service definition file") log.WithField("service", do.Name).Info("May not be able to communicate with the service") } else { service.Service.Environment = append(service.Service.Environment, fmt.Sprintf("%s=%s", service.Service.ExecHost, do.Name)) } // Use service's short name as a link alias. service.Service.Links = append(service.Service.Links, fmt.Sprintf("%s:%s", main.FullName, do.Name)) } // Override links on the command line. if len(do.Links) > 0 { service.Service.Links = do.Links } return perform.DockerExecService(service.Service, service.Operations) }
func parseContainers(service *definitions.Service, ops *definitions.Operation, all bool) bool { // populate service container specifics cName := util.FindServiceContainer(service.Name, ops.ContainerNumber, all) if cName == nil { return false } ops.SrvContainerName = cName.DockersName ops.SrvContainerID = cName.ContainerID // populate data container specifics if service.AutoData && ops.DataContainerID == "" { dName := util.FindDataContainer(service.Name, ops.ContainerNumber) if dName != nil { ops.DataContainerName = dName.DockersName ops.DataContainerID = dName.ContainerID } } return true }
// These are things we want to *always* control. Should be last // called before a return... func ServiceFinalizeLoad(srv *definitions.ServiceDefinition) { // If no name use image name if srv.Name == "" { logger.Debugf("Service definition has no name. ") if srv.Service.Name != "" { logger.Debugf("Defaulting to service name =>\t%s\n", srv.Service.Name) srv.Name = srv.Service.Name } else { if srv.Service.Image != "" { srv.Name = strings.Replace(srv.Service.Image, "/", "_", -1) srv.Service.Name = srv.Name logger.Debugf("Defaulting to image name =>\t%s\n", srv.Name) } else { panic("Service's Image should have been set before reaching ServiceFinalizeLoad") } } } container := util.FindServiceContainer(srv.Name, srv.Operations.ContainerNumber, true) if container != nil { logger.Debugf("Setting SrvCont Names =>\t%s:%s\n", container.FullName, container.ContainerID) srv.Operations.SrvContainerName = container.FullName srv.Operations.SrvContainerID = container.ContainerID } else { srv.Operations.SrvContainerName = util.ServiceContainersName(srv.Name, srv.Operations.ContainerNumber) srv.Operations.DataContainerName = util.ServiceToDataContainer(srv.Operations.SrvContainerName) } if srv.Service.AutoData { dataContainer := util.FindDataContainer(srv.Name, srv.Operations.ContainerNumber) if dataContainer != nil { logger.Debugf("Setting DataCont Names =>\t%s:%s\n", dataContainer.FullName, dataContainer.ContainerID) srv.Operations.DataContainerName = dataContainer.FullName srv.Operations.DataContainerID = dataContainer.ContainerID } else { srv.Operations.SrvContainerName = util.ServiceContainersName(srv.Name, srv.Operations.ContainerNumber) srv.Operations.DataContainerName = util.ServiceToDataContainer(srv.Operations.SrvContainerName) } } }
// These are things we want to *always* control. Should be last // called before a return... func ServiceFinalizeLoad(srv *definitions.ServiceDefinition) { if srv.Name == "" && srv.Service.Name == "" && srv.Service.Image == "" { // If no name or image, panic panic("Service's Image should have been set before reaching ServiceFinalizeLoad") } else if srv.Name == "" && srv.Service.Name == "" && srv.Service.Image != "" { // If no name use image srv.Name = strings.Replace(srv.Service.Image, "/", "_", -1) srv.Service.Name = srv.Name log.WithField("image", srv.Name).Debug("Defaulting to image") } else if srv.Service.Name != "" && srv.Name == "" { // harmonize names srv.Name = srv.Service.Name log.WithField("service", srv.Service.Name).Debug("Defaulting to service") } else if srv.Service.Name == "" && srv.Name != "" { srv.Service.Name = srv.Name log.WithField("service", srv.Name).Debug("Defaulting to service") } container := util.FindServiceContainer(srv.Name, srv.Operations.ContainerNumber, true) if container != nil { log.WithField("=>", container.FullName).Debug("Setting service container name") srv.Operations.SrvContainerName = container.FullName srv.Operations.SrvContainerID = container.ContainerID } else { srv.Operations.SrvContainerName = util.ServiceContainersName(srv.Name, srv.Operations.ContainerNumber) srv.Operations.DataContainerName = util.ServiceToDataContainer(srv.Operations.SrvContainerName) } if srv.Service.AutoData { dataContainer := util.FindDataContainer(srv.Name, srv.Operations.ContainerNumber) if dataContainer != nil { log.WithField("=>", dataContainer.FullName).Debug("Setting data container name") srv.Operations.DataContainerName = dataContainer.FullName srv.Operations.DataContainerID = dataContainer.ContainerID } else { srv.Operations.SrvContainerName = util.ServiceContainersName(srv.Name, srv.Operations.ContainerNumber) srv.Operations.DataContainerName = util.ServiceToDataContainer(srv.Operations.SrvContainerName) } } }