func (store *GardenStore) Create(logger lager.Logger, container executor.Container) (executor.Container, error) { if container.State != executor.StateInitializing { return executor.Container{}, executor.ErrInvalidTransition } container.State = executor.StateCreated logStreamer := log_streamer.New( container.LogConfig.Guid, container.LogConfig.SourceName, container.LogConfig.Index, ) fmt.Fprintf(logStreamer.Stdout(), "Creating container\n") container, err := store.exchanger.CreateInGarden(logger, store.gardenClient, container) if err != nil { fmt.Fprintf(logStreamer.Stderr(), "Failed to create container\n") return executor.Container{}, err } fmt.Fprintf(logStreamer.Stdout(), "Successfully created container\n") return container, nil }
Context("when given an LRP container", func() { var container executor.Container BeforeEach(func() { container = newLRPContainer(expectedLrpKey, expectedInstanceKey, expectedNetInfo) }) JustBeforeEach(func() { processor.Process(logger, container) }) Context("and the container is INVALID", func() { BeforeEach(func() { expectedSessionName = sessionPrefix + "process-invalid-container" container.State = executor.StateInvalid }) It("logs an error", func() { Expect(logger).To(Say(expectedSessionName)) }) }) Context("and the container is RESERVED", func() { BeforeEach(func() { bbsClient.DesiredLRPByProcessGuidReturns(desiredLRP, nil) expectedSessionName = sessionPrefix + "process-reserved-container" container.State = executor.StateReserved }) It("claims the actualLRP in the bbs", func() {
func garden2executor(handle string, info garden.ContainerInfo) (executor.Container, error) { executorContainer := executor.Container{ Guid: handle, Tags: executor.Tags{}, ExternalIP: info.ExternalIP, } executorContainer.Ports = make([]executor.PortMapping, len(info.MappedPorts)) for key, value := range info.Properties { switch key { case ContainerStateProperty: state := executor.State(value) if state == executor.StateReserved || state == executor.StateInitializing || state == executor.StateCreated || state == executor.StateRunning || state == executor.StateCompleted { executorContainer.State = state } else { return executor.Container{}, InvalidStateError{value} } case ContainerAllocatedAtProperty: _, err := fmt.Sscanf(value, "%d", &executorContainer.AllocatedAt) if err != nil { return executor.Container{}, MalformedPropertyError{ Property: ContainerAllocatedAtProperty, Value: value, } } case ContainerRootfsProperty: executorContainer.RootFSPath = value case ContainerLogProperty: err := json.Unmarshal([]byte(value), &executorContainer.LogConfig) if err != nil { return executor.Container{}, InvalidJSONError{ Property: key, Value: value, UnmarshalErr: err, } } case ContainerMetricsConfigProperty: err := json.Unmarshal([]byte(value), &executorContainer.MetricsConfig) if err != nil { return executor.Container{}, InvalidJSONError{ Property: key, Value: value, UnmarshalErr: err, } } case ContainerResultProperty: err := json.Unmarshal([]byte(value), &executorContainer.RunResult) if err != nil { return executor.Container{}, InvalidJSONError{ Property: key, Value: value, UnmarshalErr: err, } } case ContainerMemoryMBProperty: memoryMB, err := strconv.Atoi(value) if err != nil { return executor.Container{}, MalformedPropertyError{ Property: key, Value: value, } } executorContainer.MemoryMB = memoryMB case ContainerDiskMBProperty: diskMB, err := strconv.Atoi(value) if err != nil { return executor.Container{}, MalformedPropertyError{ Property: key, Value: value, } } executorContainer.DiskMB = diskMB case ContainerCPUWeightProperty: cpuWeight, err := strconv.Atoi(value) if err != nil { return executor.Container{}, MalformedPropertyError{ Property: key, Value: value, } } executorContainer.CPUWeight = uint(cpuWeight) case ContainerStartTimeoutProperty: startTimeout, err := strconv.Atoi(value) if err != nil { return executor.Container{}, MalformedPropertyError{ Property: key, Value: value, } } executorContainer.StartTimeout = uint(startTimeout) default: if strings.HasPrefix(key, TagPropertyPrefix) { executorContainer.Tags[key[len(TagPropertyPrefix):]] = value } } } for i, mapping := range info.MappedPorts { executorContainer.Ports[i] = executor.PortMapping{ HostPort: uint16(mapping.HostPort), ContainerPort: uint16(mapping.ContainerPort), } } return executorContainer, nil }