mirror of
https://github.com/docker/compose.git
synced 2025-07-22 13:14:29 +02:00
Add support for deploy.resources
Signed-off-by: aiordache <anca.iordache@docker.com> Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
parent
3706d8617f
commit
2ef1e28f1d
@ -117,6 +117,44 @@ services:
|
|||||||
assert.Check(t, s.DesiredCount == 10)
|
assert.Check(t, s.DesiredCount == 10)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTaskSizeConvert(t *testing.T) {
|
||||||
|
template := convertYaml(t, "test", `
|
||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
test:
|
||||||
|
image: nginx
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.5'
|
||||||
|
memory: 2048M
|
||||||
|
reservations:
|
||||||
|
cpus: '0.5'
|
||||||
|
memory: 2048M
|
||||||
|
`)
|
||||||
|
def := template.Resources["TestTaskDefinition"].(*ecs.TaskDefinition)
|
||||||
|
assert.Equal(t, def.Cpu, "512")
|
||||||
|
assert.Equal(t, def.Memory, "2048")
|
||||||
|
|
||||||
|
template = convertYaml(t, "test", `
|
||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
test:
|
||||||
|
image: nginx
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '4'
|
||||||
|
memory: 8192M
|
||||||
|
reservations:
|
||||||
|
cpus: '4'
|
||||||
|
memory: 8192M
|
||||||
|
`)
|
||||||
|
def = template.Resources["TestTaskDefinition"].(*ecs.TaskDefinition)
|
||||||
|
assert.Equal(t, def.Cpu, "4096")
|
||||||
|
assert.Equal(t, def.Memory, "8192")
|
||||||
|
}
|
||||||
|
|
||||||
func TestLoadBalancerTypeNetwork(t *testing.T) {
|
func TestLoadBalancerTypeNetwork(t *testing.T) {
|
||||||
template := convertYaml(t, "test", `
|
template := convertYaml(t, "test", `
|
||||||
version: "3"
|
version: "3"
|
||||||
|
@ -16,6 +16,12 @@ var compatibleComposeAttributes = []string{
|
|||||||
"services.depends_on",
|
"services.depends_on",
|
||||||
"services.deploy",
|
"services.deploy",
|
||||||
"services.deploy.replicas",
|
"services.deploy.replicas",
|
||||||
|
"services.deploy.resources.limits",
|
||||||
|
"services.deploy.resources.limits.cpus",
|
||||||
|
"services.deploy.resources.limits.memory",
|
||||||
|
"services.deploy.resources.reservations",
|
||||||
|
"services.deploy.resources.reservations.cpus",
|
||||||
|
"services.deploy.resources.reservations.memory",
|
||||||
"services.entrypoint",
|
"services.entrypoint",
|
||||||
"services.environment",
|
"services.environment",
|
||||||
"service.image",
|
"service.image",
|
||||||
|
@ -21,6 +21,10 @@ func Convert(project *types.Project, service types.ServiceConfig) (*ecs.TaskDefi
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
_, memReservation, err := toContainerReservation(service)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
credential := getRepoCredentials(service)
|
credential := getRepoCredentials(service)
|
||||||
|
|
||||||
// override resolve.conf search directive to also search <project>.local
|
// override resolve.conf search directive to also search <project>.local
|
||||||
@ -60,6 +64,7 @@ func Convert(project *types.Project, service types.ServiceConfig) (*ecs.TaskDefi
|
|||||||
"awslogs-stream-prefix": project.Name,
|
"awslogs-stream-prefix": project.Name,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
MemoryReservation: memReservation,
|
||||||
Name: service.Name,
|
Name: service.Name,
|
||||||
PortMappings: toPortMappings(service.Ports),
|
PortMappings: toPortMappings(service.Ports),
|
||||||
Privileged: service.Privileged,
|
Privileged: service.Privileged,
|
||||||
@ -111,6 +116,8 @@ func toSystemControls(sysctls types.Mapping) []ecs.TaskDefinition_SystemControl
|
|||||||
return sys
|
return sys
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Mb = 1024 * 1024
|
||||||
|
|
||||||
func toLimits(service types.ServiceConfig) (string, string, error) {
|
func toLimits(service types.ServiceConfig) (string, string, error) {
|
||||||
// All possible cpu/mem values for Fargate
|
// All possible cpu/mem values for Fargate
|
||||||
cpuToMem := map[int64][]types.UnitBytes{
|
cpuToMem := map[int64][]types.UnitBytes{
|
||||||
@ -142,9 +149,9 @@ func toLimits(service types.ServiceConfig) (string, string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for cpu, mem := range cpuToMem {
|
for cpu, mem := range cpuToMem {
|
||||||
if v <= cpu*1024*1024 {
|
if v <= cpu*Mb {
|
||||||
for _, m := range mem {
|
for _, m := range mem {
|
||||||
if limits.MemoryBytes <= m*1024*1024 {
|
if limits.MemoryBytes <= m*Mb {
|
||||||
cpuLimit = strconv.FormatInt(cpu, 10)
|
cpuLimit = strconv.FormatInt(cpu, 10)
|
||||||
memLimit = strconv.FormatInt(int64(m), 10)
|
memLimit = strconv.FormatInt(int64(m), 10)
|
||||||
return cpuLimit, memLimit, nil
|
return cpuLimit, memLimit, nil
|
||||||
@ -155,6 +162,21 @@ func toLimits(service types.ServiceConfig) (string, string, error) {
|
|||||||
return "", "", fmt.Errorf("unable to find cpu/mem for the required resources")
|
return "", "", fmt.Errorf("unable to find cpu/mem for the required resources")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toContainerReservation(service types.ServiceConfig) (string, int, error) {
|
||||||
|
cpuReservation := ".0"
|
||||||
|
memReservation := 0
|
||||||
|
|
||||||
|
if service.Deploy == nil {
|
||||||
|
return cpuReservation, memReservation, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
reservations := service.Deploy.Resources.Reservations
|
||||||
|
if reservations == nil {
|
||||||
|
return cpuReservation, memReservation, nil
|
||||||
|
}
|
||||||
|
return reservations.NanoCPUs, int(reservations.MemoryBytes / Mb), nil
|
||||||
|
}
|
||||||
|
|
||||||
func toRequiresCompatibilities(isolation string) []*string {
|
func toRequiresCompatibilities(isolation string) []*string {
|
||||||
if isolation == "" {
|
if isolation == "" {
|
||||||
return nil
|
return nil
|
||||||
@ -206,8 +228,6 @@ func toUlimits(ulimits map[string]*types.UlimitsConfig) []ecs.TaskDefinition_Uli
|
|||||||
return u
|
return u
|
||||||
}
|
}
|
||||||
|
|
||||||
const Mb = 1024 * 1024
|
|
||||||
|
|
||||||
func toLinuxParameters(service types.ServiceConfig) *ecs.TaskDefinition_LinuxParameters {
|
func toLinuxParameters(service types.ServiceConfig) *ecs.TaskDefinition_LinuxParameters {
|
||||||
return &ecs.TaskDefinition_LinuxParameters{
|
return &ecs.TaskDefinition_LinuxParameters{
|
||||||
Capabilities: toKernelCapabilities(service.CapAdd, service.CapDrop),
|
Capabilities: toKernelCapabilities(service.CapAdd, service.CapDrop),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user