diff --git a/generator/main.go b/generator/main.go index 2bf868b..a442ec2 100644 --- a/generator/main.go +++ b/generator/main.go @@ -482,13 +482,12 @@ func prepareProbes(name string, s types.ServiceConfig, container *helm.Container } } else { // it's a command - container.LivenessProbe = &helm.Probe{ - Exec: &helm.Exec{ - Command: []string{ - "sh", - "-c", - check, - }, + container.LivenessProbe = helm.NewProbe(0, 0, 0, 0) + container.LivenessProbe.Exec = &helm.Exec{ + Command: []string{ + "sh", + "-c", + check, }, } } @@ -501,15 +500,21 @@ func prepareProbes(name string, s types.ServiceConfig, container *helm.Container } func buildProtoProbe(u *url.URL) *helm.Probe { - probe := helm.Probe{} + probe := helm.NewProbe(0, 0, 0, 0) port, err := strconv.Atoi(u.Port()) if err != nil { port = 80 } + + path := "/" + if u.Path != "" { + path = u.Path + } + switch u.Scheme { case "http", "https": probe.HttpGet = &helm.HttpGet{ - Path: u.Path, + Path: path, Port: port, } case "tcp": @@ -520,30 +525,28 @@ func buildProtoProbe(u *url.URL) *helm.Probe { logger.Redf("Error while parsing healthcheck url %s\n", u.String()) os.Exit(1) } - return &probe + return probe } func buildCommandProbe(s types.ServiceConfig) *helm.Probe { // Get the first element of the command from ServiceConfig first := s.HealthCheck.Test[0] + p := helm.NewProbe(0, 0, 0, 0) switch first { case "CMD", "CMD-SHELL": // CMD or CMD-SHELL - return &helm.Probe{ - Exec: &helm.Exec{ - Command: s.HealthCheck.Test[1:], - }, + p.Exec = &helm.Exec{ + Command: s.HealthCheck.Test[1:], } + return p default: // badly made but it should work... - return &helm.Probe{ - Exec: &helm.Exec{ - Command: []string(s.HealthCheck.Test), - }, + p.Exec = &helm.Exec{ + Command: []string(s.HealthCheck.Test), } + return p } - } // prepareEnvFromFiles generate configMap or secrets from environment files. diff --git a/helm/deployment.go b/helm/deployment.go index 172871d..d10b48e 100644 --- a/helm/deployment.go +++ b/helm/deployment.go @@ -77,13 +77,27 @@ type Probe struct { InitialDelay int `yaml:"initialDelaySeconds"` } +// Create a new Probe object that can be apply to HttpProbe or TCPProbe. func NewProbe(period, initialDelaySeconds, success, failure int) *Probe { - return &Probe{ + probe := &Probe{ Period: period, Success: success, Failure: failure, InitialDelay: initialDelaySeconds, } + + // fix default values from + // https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/ + if period == 0 { + probe.Period = 10 + } + if success == 0 { + probe.Success = 1 + } + if failure == 0 { + probe.Failure = 3 + } + return probe } func NewContainer(name, image string, environment types.MappingWithEquals, labels map[string]string) *Container {