1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Add support for healthcheck in composefile v3

`docker stack deploy` now supports a composefile v3 format that have a
healthcheck.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
(cherry picked from commit 3bd64de7a9)
Signed-off-by: Victor Vieux <victorvieux@gmail.com>
This commit is contained in:
Vincent Demeester 2016-11-18 15:09:13 +01:00 committed by Victor Vieux
parent a0df810219
commit c8e2552827
2 changed files with 50 additions and 0 deletions

View file

@ -6,6 +6,7 @@ import (
"os" "os"
"sort" "sort"
"strings" "strings"
"time"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"golang.org/x/net/context" "golang.org/x/net/context"
@ -13,6 +14,7 @@ import (
"github.com/aanand/compose-file/loader" "github.com/aanand/compose-file/loader"
composetypes "github.com/aanand/compose-file/types" composetypes "github.com/aanand/compose-file/types"
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/mount" "github.com/docker/docker/api/types/mount"
networktypes "github.com/docker/docker/api/types/network" networktypes "github.com/docker/docker/api/types/network"
"github.com/docker/docker/api/types/swarm" "github.com/docker/docker/api/types/swarm"
@ -492,6 +494,11 @@ func convertService(
return swarm.ServiceSpec{}, err return swarm.ServiceSpec{}, err
} }
healthcheck, err := convertHealthcheck(service.HealthCheck)
if err != nil {
return swarm.ServiceSpec{}, err
}
serviceSpec := swarm.ServiceSpec{ serviceSpec := swarm.ServiceSpec{
Annotations: swarm.Annotations{ Annotations: swarm.Annotations{
Name: name, Name: name,
@ -504,6 +511,7 @@ func convertService(
Args: service.Command, Args: service.Command,
Hostname: service.Hostname, Hostname: service.Hostname,
Hosts: convertExtraHosts(service.ExtraHosts), Hosts: convertExtraHosts(service.ExtraHosts),
Healthcheck: healthcheck,
Env: convertEnvironment(service.Environment), Env: convertEnvironment(service.Environment),
Labels: getStackLabels(namespace.name, service.Labels), Labels: getStackLabels(namespace.name, service.Labels),
Dir: service.WorkingDir, Dir: service.WorkingDir,
@ -536,6 +544,47 @@ func convertExtraHosts(extraHosts map[string]string) []string {
return hosts return hosts
} }
func convertHealthcheck(healthcheck *composetypes.HealthCheckConfig) (*container.HealthConfig, error) {
if healthcheck == nil {
return nil, nil
}
var (
err error
timeout, interval time.Duration
retries int
)
if healthcheck.Disable {
if len(healthcheck.Test) != 0 {
return nil, fmt.Errorf("command and disable key can't be set at the same time")
}
return &container.HealthConfig{
Test: []string{"NONE"},
}, nil
}
if healthcheck.Timeout != "" {
timeout, err = time.ParseDuration(healthcheck.Timeout)
if err != nil {
return nil, err
}
}
if healthcheck.Interval != "" {
interval, err = time.ParseDuration(healthcheck.Interval)
if err != nil {
return nil, err
}
}
if healthcheck.Retries != nil {
retries = int(*healthcheck.Retries)
}
return &container.HealthConfig{
Test: healthcheck.Test,
Timeout: timeout,
Interval: interval,
Retries: retries,
}, nil
}
func convertRestartPolicy(restart string, source *composetypes.RestartPolicy) (*swarm.RestartPolicy, error) { func convertRestartPolicy(restart string, source *composetypes.RestartPolicy) (*swarm.RestartPolicy, error) {
// TODO: log if restart is being ignored // TODO: log if restart is being ignored
if source == nil { if source == nil {

View file

@ -128,6 +128,7 @@ type HealthCheckConfig struct {
Timeout string Timeout string
Interval string Interval string
Retries *uint64 Retries *uint64
Disable bool
} }
type UpdateConfig struct { type UpdateConfig struct {