func setupNetworking(netMode string, launchConfig *rancherClient.LaunchConfig) { if netMode == "" { launchConfig.NetworkMode = "managed" } else if runconfig.IpcMode(netMode).IsContainer() { // For some reason NetworkMode object is gone runconfig, but IpcMode works the same for this launchConfig.NetworkMode = "container" launchConfig.NetworkLaunchConfig = strings.TrimPrefix(netMode, "container:") } else { launchConfig.NetworkMode = netMode } }
func createLaunchConfig(r *RancherService, name string, serviceConfig *project.ServiceConfig) (rancherClient.LaunchConfig, error) { var result rancherClient.LaunchConfig rancherConfig := r.context.RancherConfig[name] schemasUrl := strings.SplitN(r.Context().Client.Schemas.Links["self"], "/schemas", 2)[0] scriptsUrl := schemasUrl + "/scripts/transform" config, hostConfig, err := docker.Convert(serviceConfig) if err != nil { return result, err } dockerContainer := &ContainerInspect{ Config: config, HostConfig: hostConfig, } dockerContainer.HostConfig.NetworkMode = runconfig.NetworkMode("") dockerContainer.Name = "/" + name err = r.Context().Client.Post(scriptsUrl, dockerContainer, &result) if err != nil { return result, err } setupNetworking(serviceConfig.Net, &result) setupVolumesFrom(serviceConfig.VolumesFrom, &result) err = setupBuild(r, name, &result, serviceConfig) if result.Labels == nil { result.Labels = map[string]interface{}{} } result.Kind = rancherConfig.Type result.Vcpu = rancherConfig.Vcpu result.Userdata = rancherConfig.Userdata result.MemoryMb = rancherConfig.Memory result.Disks = []interface{}{} for _, i := range rancherConfig.Disks { result.Disks = append(result.Disks, i) } if strings.EqualFold(result.Kind, "virtual_machine") || strings.EqualFold(result.Kind, "virtualmachine") { result.Kind = "virtualMachine" } return result, err }
func populateLbFields(r *RancherService, launchConfig *rancherClient.LaunchConfig, service *CompositeService) error { config, ok := r.context.RancherConfig[r.name] if ok { service.LoadBalancerConfig = config.LoadBalancerConfig } if err := populateCerts(r.context.Client, service, &config); err != nil { return err } if FindServiceType(r) == LbServiceType { launchConfig.ImageUuid = "" // Write back to the ports passed in because the Docker parsing logic changes then launchConfig.Ports = r.serviceConfig.Ports launchConfig.Expose = r.serviceConfig.Expose } return nil }
func createLaunchConfig(r *RancherService, serviceConfig *project.ServiceConfig) (rancherClient.LaunchConfig, error) { var result rancherClient.LaunchConfig schemasUrl := strings.SplitN(r.Context().Client.Schemas.Links["self"], "/schemas", 2)[0] scriptsUrl := schemasUrl + "/scripts/transform" config, hostConfig, err := docker.Convert(serviceConfig) if err != nil { return result, err } dockerContainer := &ContainerInspect{ Config: config, HostConfig: hostConfig, } dockerContainer.HostConfig.NetworkMode = runconfig.NetworkMode("") if serviceConfig.Name != "" { dockerContainer.Name = "/" + serviceConfig.Name } else { dockerContainer.Name = "/" + r.name } err = r.Context().Client.Post(scriptsUrl, dockerContainer, &result) if err != nil { return result, err } result.HealthCheck = r.HealthCheck() setupNetworking(serviceConfig.Net, &result) setupVolumesFrom(serviceConfig.VolumesFrom, &result) err = r.setupBuild(&result, serviceConfig) if result.Labels == nil { result.Labels = map[string]interface{}{} } return result, err }
func (r *RancherService) setupBuild(result *rancherClient.LaunchConfig, serviceConfig *project.ServiceConfig) error { if serviceConfig.Build != "" { result.Build = &rancherClient.DockerBuild{ Remote: serviceConfig.Build, Dockerfile: serviceConfig.Dockerfile, } needBuild := true for _, remote := range project.ValidRemotes { if strings.HasPrefix(serviceConfig.Build, remote) { needBuild = false break } } if needBuild { image, url, err := Upload(r.context, r.name) if err != nil { return err } logrus.Infof("Build for %s available at %s", r.name, url) serviceConfig.Build = url if serviceConfig.Image == "" { serviceConfig.Image = image } result.Build = &rancherClient.DockerBuild{ Context: url, Dockerfile: serviceConfig.Dockerfile, } result.ImageUuid = "docker:" + image } else if result.ImageUuid == "" { result.ImageUuid = fmt.Sprintf("docker:%s_%s_%d", r.context.ProjectName, r.name, time.Now().UnixNano()/int64(time.Millisecond)) } } return nil }
func setupVolumesFrom(volumesFrom []string, launchConfig *rancherClient.LaunchConfig) { launchConfig.DataVolumesFromLaunchConfigs = volumesFrom }