Commit 55a10689 authored by Cong Nguyen's avatar Cong Nguyen Committed by Thong Kuah
Browse files

add worker liveness/readinessProbe

parent fd120639
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
apiVersion: v1
description: GitLab's Auto-deploy Helm Chart
name: auto-deploy-app
version: 1.0.7
version: 1.1.0
icon: https://gitlab.com/gitlab-com/gitlab-artwork/raw/master/logo/logo-square.png
+28 −12
Original line number Diff line number Diff line
@@ -64,30 +64,46 @@ items:
            value: {{ $.Values.application.database_url | quote }}
          - name: GITLAB_ENVIRONMENT_NAME
            value: {{ $.Values.gitlab.envName | quote }}
{{- with $livenessProbeConfig := default $.Values.livenessProbe $workerConfig.livenessProbe -}}
{{- if $livenessProbeConfig }}
          livenessProbe:
{{- if eq $.Values.livenessProbe.probeType "httpGet" }}
{{- if eq $livenessProbeConfig.probeType "httpGet" }}
            httpGet:
              path: {{ $.Values.livenessProbe.path }}
              scheme: {{ $.Values.livenessProbe.scheme }}
              path: {{ $livenessProbeConfig.path }}
              scheme: {{ $livenessProbeConfig.scheme }}
              port: {{ $.Values.service.internalPort }}
{{- else if eq $.Values.livenessProbe.probeType "tcpSocket" }}
{{- else if eq $livenessProbeConfig.probeType "tcpSocket" }}
            tcpSocket:
              port: {{ $.Values.service.internalPort }}
{{- else if eq $livenessProbeConfig.probeType "exec" }}
            exec:
              command:
{{ toYaml $livenessProbeConfig.command | indent 16 }}
{{- end }}
            initialDelaySeconds: {{ $livenessProbeConfig.initialDelaySeconds }}
            timeoutSeconds: {{ $livenessProbeConfig.timeoutSeconds }}
{{- end }}
{{- end }}
            initialDelaySeconds: {{ $.Values.livenessProbe.initialDelaySeconds }}
            timeoutSeconds: {{ $.Values.livenessProbe.timeoutSeconds }}
{{- with $readinessProbeConfig := default $.Values.readinessProbe $workerConfig.readinessProbe -}}
{{- if $readinessProbeConfig }}
          readinessProbe:
{{- if eq $.Values.readinessProbe.probeType "httpGet" }}
{{- if eq $readinessProbeConfig.probeType "httpGet" }}
            httpGet:
              path: {{ $.Values.readinessProbe.path }}
              scheme: {{ $.Values.readinessProbe.scheme }}
              path: {{ $readinessProbeConfig.path }}
              scheme: {{ $readinessProbeConfig.scheme }}
              port: {{ $.Values.service.internalPort }}
{{- else if eq $.Values.readinessProbe.probeType "tcpSocket" }}
{{- else if eq $readinessProbeConfig.probeType "tcpSocket" }}
            tcpSocket:
              port: {{ $.Values.service.internalPort }}
{{- else if eq $readinessProbeConfig.probeType "exec" }}
            exec:
              command:
{{ toYaml $readinessProbeConfig.command | indent 16 }}
{{- end }}
            initialDelaySeconds: {{ $readinessProbeConfig.initialDelaySeconds }}
            timeoutSeconds: {{ $readinessProbeConfig.timeoutSeconds }}
{{- end }}
{{- end }}
            initialDelaySeconds: {{ $.Values.readinessProbe.initialDelaySeconds }}
            timeoutSeconds: {{ $.Values.readinessProbe.timeoutSeconds }}
          {{- if $workerConfig.preStopCommand }}
          lifecycle:
            preStop:
+89 −1
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@ import (
)

const (
	chartName     = "auto-deploy-app-1.0.7"
	chartName     = "auto-deploy-app-1.1.0"
	helmChartPath = ".."
)

@@ -607,6 +607,66 @@ func TestWorkerDeploymentTemplate(t *testing.T) {
				},
			},
		},
		{
			CaseName: "enableWorkerLivenessProbe",
			Release:  "production",
			Values: map[string]string{
				"workers.worker1.command[0]":              "echo",
				"workers.worker1.command[1]":              "worker1",
				"workers.worker1.livenessProbe.path":      "/worker",
				"workers.worker1.livenessProbe.scheme":    "HTTP",
				"workers.worker1.livenessProbe.probeType": "httpGet",
				"workers.worker2.command[0]":              "echo",
				"workers.worker2.command[1]":              "worker2",
				"workers.worker2.livenessProbe.path":      "/worker",
				"workers.worker2.livenessProbe.scheme":    "HTTP",
				"workers.worker2.livenessProbe.probeType": "httpGet",
			},
			ExpectedDeployments: []workerDeploymentTestCase{
				{
					ExpectedName:           "production-worker1",
					ExpectedCmd:            []string{"echo", "worker1"},
					ExpectedLivenessProbe:  workerLivenessProbe(),
					ExpectedReadinessProbe: defaultReadinessProbe(),
				},
				{
					ExpectedName:           "production-worker2",
					ExpectedCmd:            []string{"echo", "worker2"},
					ExpectedLivenessProbe:  workerLivenessProbe(),
					ExpectedReadinessProbe: defaultReadinessProbe(),
				},
			},
		},
		{
			CaseName: "enableWorkerReadinessProbe",
			Release:  "production",
			Values: map[string]string{
				"workers.worker1.command[0]":               "echo",
				"workers.worker1.command[1]":               "worker1",
				"workers.worker1.readinessProbe.path":      "/worker",
				"workers.worker1.readinessProbe.scheme":    "HTTP",
				"workers.worker1.readinessProbe.probeType": "httpGet",
				"workers.worker2.command[0]":               "echo",
				"workers.worker2.command[1]":               "worker2",
				"workers.worker2.readinessProbe.path":      "/worker",
				"workers.worker2.readinessProbe.scheme":    "HTTP",
				"workers.worker2.readinessProbe.probeType": "httpGet",
			},
			ExpectedDeployments: []workerDeploymentTestCase{
				{
					ExpectedName:           "production-worker1",
					ExpectedCmd:            []string{"echo", "worker1"},
					ExpectedLivenessProbe:  defaultLivenessProbe(),
					ExpectedReadinessProbe: workerReadinessProbe(),
				},
				{
					ExpectedName:           "production-worker2",
					ExpectedCmd:            []string{"echo", "worker2"},
					ExpectedLivenessProbe:  defaultLivenessProbe(),
					ExpectedReadinessProbe: workerReadinessProbe(),
				},
			},
		},
	} {
		t.Run(tc.CaseName, func(t *testing.T) {
			namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId())
@@ -980,3 +1040,31 @@ func defaultReadinessProbe() *coreV1.Probe {
		TimeoutSeconds:      3,
	}
}

func workerLivenessProbe() *coreV1.Probe {
	return &coreV1.Probe{
		Handler: coreV1.Handler{
			HTTPGet: &coreV1.HTTPGetAction{
				Path:   "/worker",
				Port:   intstr.FromInt(5000),
				Scheme: coreV1.URISchemeHTTP,
			},
		},
		InitialDelaySeconds: 0,
		TimeoutSeconds:      0,
	}
}

func workerReadinessProbe() *coreV1.Probe {
	return &coreV1.Probe{
		Handler: coreV1.Handler{
			HTTPGet: &coreV1.HTTPGetAction{
				Path:   "/worker",
				Port:   intstr.FromInt(5000),
				Scheme: coreV1.URISchemeHTTP,
			},
		},
		InitialDelaySeconds: 0,
		TimeoutSeconds:      0,
	}
}
+12 −0
Original line number Diff line number Diff line
@@ -116,6 +116,18 @@ workers: {}
  #   - procfile
  #   - start
  #   - worker
  #   livenessProbe:
  #     path: "/"
  #     initialDelaySeconds: 15
  #     timeoutSeconds: 15
  #     scheme: "HTTP"
  #     probeType: "httpGet"
  #   readinessProbe:
  #     path: "/"
  #     initialDelaySeconds: 5
  #     timeoutSeconds: 3
  #     scheme: "HTTP"
  #     probeType: "httpGet"
  #   preStopCommand:
  #   - /bin/herokuish
  #   - procfile