// convertToContainerDef transforms each service in the compose yml // to an equivalent container definition func convertToContainerDef(inputCfg *libcompose.ServiceConfig, volumes map[string]string, outputContDef *ecs.ContainerDefinition) error { // setting memory var mem int64 if inputCfg.MemLimit != 0 { mem = inputCfg.MemLimit / kiB / kiB // convert bytes to MiB } if mem == 0 { mem = defaultMemLimit } // convert environment variables // TODO, read env file environment := []*ecs.KeyValuePair{} for _, env := range inputCfg.Environment.Slice() { parts := strings.SplitN(env, "=", 2) name := &parts[0] var value *string if len(parts) > 1 { value = &parts[1] } environment = append(environment, &ecs.KeyValuePair{ Name: name, Value: value, }) } // convert port mappings portMappings, err := convertToPortMappings(*outputContDef.Name, inputCfg.Ports) if err != nil { return err } // convert volumes from volumesFrom := []*ecs.VolumeFrom{} for _, val := range inputCfg.VolumesFrom { volumeFrom := &ecs.VolumeFrom{ SourceContainer: aws.String(val), } volumesFrom = append(volumesFrom, volumeFrom) } // convert mount points mountPoints, err := convertToMountPoints(inputCfg.Volumes, volumes) if err != nil { return err } // populating container definition, offloading the validation to aws-sdk outputContDef.Cpu = aws.Int64(inputCfg.CpuShares) outputContDef.Memory = aws.Int64(mem) outputContDef.EntryPoint = aws.StringSlice(inputCfg.Entrypoint.Slice()) outputContDef.Command = aws.StringSlice(inputCfg.Command.Slice()) outputContDef.Environment = environment outputContDef.Image = aws.String(inputCfg.Image) outputContDef.Links = aws.StringSlice(inputCfg.Links.Slice()) //TODO, read from external links outputContDef.MountPoints = mountPoints outputContDef.PortMappings = portMappings outputContDef.VolumesFrom = volumesFrom return nil }
// convertToContainerDef transforms each service in the compose yml // to an equivalent container definition func convertToContainerDef(inputCfg *libcompose.ServiceConfig, volumes map[string]string, outputContDef *ecs.ContainerDefinition) error { // setting memory var mem int64 if inputCfg.MemLimit != 0 { mem = inputCfg.MemLimit / kiB / kiB // convert bytes to MiB } if mem == 0 { mem = defaultMemLimit } // convert environment variables // TODO, read env file environment := []*ecs.KeyValuePair{} for _, env := range inputCfg.Environment.Slice() { parts := strings.SplitN(env, "=", 2) name := &parts[0] var value *string if len(parts) > 1 { value = &parts[1] } environment = append(environment, &ecs.KeyValuePair{ Name: name, Value: value, }) } // convert port mappings portMappings, err := convertToPortMappings(*outputContDef.Name, inputCfg.Ports) if err != nil { return err } // convert volumes from volumesFrom := []*ecs.VolumeFrom{} for _, val := range inputCfg.VolumesFrom { volumeFrom := &ecs.VolumeFrom{ SourceContainer: aws.String(val), } volumesFrom = append(volumesFrom, volumeFrom) } // convert mount points mountPoints, err := convertToMountPoints(inputCfg.Volumes, volumes) if err != nil { return err } // convert extra hosts extraHosts, err := convertToExtraHosts(inputCfg.ExtraHosts) if err != nil { return err } // convert log configuration var logConfig *ecs.LogConfiguration if inputCfg.LogDriver != "" { logConfig = &ecs.LogConfiguration{ LogDriver: aws.String(inputCfg.LogDriver), Options: aws.StringMap(inputCfg.LogOpt), } } // convert ulimits ulimits, err := convertToULimits(inputCfg.ULimits) if err != nil { return err } // populating container definition, offloading the validation to aws-sdk outputContDef.Cpu = aws.Int64(inputCfg.CpuShares) outputContDef.Command = aws.StringSlice(inputCfg.Command.Slice()) outputContDef.DnsSearchDomains = aws.StringSlice(inputCfg.DNSSearch.Slice()) outputContDef.DnsServers = aws.StringSlice(inputCfg.DNS.Slice()) outputContDef.DockerLabels = aws.StringMap(inputCfg.Labels.MapParts()) outputContDef.DockerSecurityOptions = aws.StringSlice(inputCfg.SecurityOpt) outputContDef.EntryPoint = aws.StringSlice(inputCfg.Entrypoint.Slice()) outputContDef.Environment = environment outputContDef.ExtraHosts = extraHosts if inputCfg.Hostname != "" { outputContDef.Hostname = aws.String(inputCfg.Hostname) } outputContDef.Image = aws.String(inputCfg.Image) outputContDef.Links = aws.StringSlice(inputCfg.Links.Slice()) //TODO, read from external links outputContDef.LogConfiguration = logConfig outputContDef.Memory = aws.Int64(mem) outputContDef.MountPoints = mountPoints outputContDef.Privileged = aws.Bool(inputCfg.Privileged) outputContDef.PortMappings = portMappings outputContDef.ReadonlyRootFilesystem = aws.Bool(inputCfg.ReadOnly) outputContDef.Ulimits = ulimits if inputCfg.User != "" { outputContDef.User = aws.String(inputCfg.User) } outputContDef.VolumesFrom = volumesFrom if inputCfg.WorkingDir != "" { outputContDef.WorkingDirectory = aws.String(inputCfg.WorkingDir) } return nil }
// convertToContainerDef transforms each service in the compose yml // to an equivalent container definition func convertToContainerDef(context *project.Context, inputCfg *config.ServiceConfig, volumes map[string]string, outputContDef *ecs.ContainerDefinition) error { // setting memory var mem int64 if inputCfg.MemLimit != 0 { mem = int64(inputCfg.MemLimit) / kiB / kiB // convert bytes to MiB } if mem == 0 { mem = defaultMemLimit } // convert environment variables environment := convertToKeyValuePairs(context, inputCfg.Environment, *outputContDef.Name) // convert port mappings portMappings, err := convertToPortMappings(*outputContDef.Name, inputCfg.Ports) if err != nil { return err } // convert volumes from volumesFrom, err := convertToVolumesFrom(inputCfg.VolumesFrom) if err != nil { return err } // convert mount points mountPoints, err := convertToMountPoints(inputCfg.Volumes, volumes) if err != nil { return err } // convert extra hosts extraHosts, err := convertToExtraHosts(inputCfg.ExtraHosts) if err != nil { return err } // convert log configuration var logConfig *ecs.LogConfiguration if inputCfg.Logging.Driver != "" { logConfig = &ecs.LogConfiguration{ LogDriver: aws.String(inputCfg.Logging.Driver), Options: aws.StringMap(inputCfg.Logging.Options), } } // convert ulimits ulimits, err := convertToULimits(inputCfg.Ulimits) if err != nil { return err } // populating container definition, offloading the validation to aws-sdk outputContDef.Cpu = aws.Int64(int64(inputCfg.CPUShares)) outputContDef.Command = aws.StringSlice(inputCfg.Command) outputContDef.DnsSearchDomains = aws.StringSlice(inputCfg.DNSSearch) outputContDef.DnsServers = aws.StringSlice(inputCfg.DNS) outputContDef.DockerLabels = aws.StringMap(inputCfg.Labels) outputContDef.DockerSecurityOptions = aws.StringSlice(inputCfg.SecurityOpt) outputContDef.EntryPoint = aws.StringSlice(inputCfg.Entrypoint) outputContDef.Environment = environment outputContDef.ExtraHosts = extraHosts if inputCfg.Hostname != "" { outputContDef.Hostname = aws.String(inputCfg.Hostname) } outputContDef.Image = aws.String(inputCfg.Image) outputContDef.Links = aws.StringSlice(inputCfg.Links) //TODO, read from external links outputContDef.LogConfiguration = logConfig outputContDef.Memory = aws.Int64(mem) outputContDef.MountPoints = mountPoints outputContDef.Privileged = aws.Bool(inputCfg.Privileged) outputContDef.PortMappings = portMappings outputContDef.ReadonlyRootFilesystem = aws.Bool(inputCfg.ReadOnly) outputContDef.Ulimits = ulimits if inputCfg.User != "" { outputContDef.User = aws.String(inputCfg.User) } outputContDef.VolumesFrom = volumesFrom if inputCfg.WorkingDir != "" { outputContDef.WorkingDirectory = aws.String(inputCfg.WorkingDir) } return nil }