in ecs-cli/modules/cli/local/converter/converter.go [123:180]
func createComposeServices(taskDefinition *ecs.TaskDefinition, metadata *LocalCreateMetadata) ([]composeV3.ServiceConfig, error) {
networkMode := aws.StringValue(taskDefinition.NetworkMode)
if networkMode != "" {
log.WithFields(log.Fields{
"networkMode": networkMode,
}).Info("Task Definition network mode is ignored when running containers locally. Tasks will be run in the ecs-local-network.")
}
pid := aws.StringValue(taskDefinition.PidMode)
ipc := aws.StringValue(taskDefinition.IpcMode)
if pid != "" && pid != ecs.PidModeHost {
log.WithFields(log.Fields{
"pid": pid,
}).Info("PID mode can only be set to 'host' when running tasks locally.")
pid = "" // set to empty
}
if ipc != "" && ipc != ecs.IpcModeHost && ipc != ecs.IpcModeNone {
log.WithFields(log.Fields{
"ipc": ipc,
}).Info("IPC mode can only be set to 'host' or 'none' when running tasks locally.")
ipc = "" // set to empty
}
commonValues := &CommonContainerValues{
Pid: pid,
Ipc: ipc,
Volumes: taskDefinition.Volumes,
Creds: resolveCredentials(aws.StringValue(taskDefinition.TaskRoleArn), metadata.UseRole),
}
if len(taskDefinition.ContainerDefinitions) < 1 {
return nil, fmt.Errorf("task definition must include at least one container definition")
}
var services []composeV3.ServiceConfig
for _, containerDefinition := range taskDefinition.ContainerDefinitions {
service, err := convertToComposeService(containerDefinition, commonValues)
if err != nil {
return nil, err
}
services = append(services, service)
}
// NOTE metadata should always be set on project when task definition is read
if metadata == nil {
return nil, fmt.Errorf("Unable to set service labels")
}
for _, service := range services {
service.Labels[TaskDefinitionLabelType] = metadata.InputType
service.Labels[TaskDefinitionLabelValue] = metadata.Value
}
return services, nil
}