diff --git a/library/common-test/tests/cnpg/db_wait_test.yaml b/library/common-test/tests/cnpg/db_wait_test.yaml new file mode 100644 index 00000000..499df3e8 --- /dev/null +++ b/library/common-test/tests/cnpg/db_wait_test.yaml @@ -0,0 +1,155 @@ +suite: cnpg db-wait test +templates: + - common.yaml +release: + name: test-release-name + namespace: test-release-namespace +tests: + - it: should generate correct db-wait script + set: + workload: &workload + my-workload: + type: Deployment + enabled: true + primary: true + podSpec: + my-container: + enabled: true + primary: true + cnpg: + my-pg: + enabled: true + user: test-user + database: test-db + asserts: + - documentIndex: &deployDoc 4 + isKind: + of: Deployment + - documentIndex: *deployDoc + isAPIVersion: + of: apps/v1 + - documentIndex: *deployDoc + equal: + path: spec.template.spec.initContainers[0].name + value: test-release-name-common-test-system-cnpg-wait + - documentIndex: *deployDoc + equal: + path: spec.template.spec.initContainers[0].command + value: + - /bin/sh + - -c + - |- + /bin/sh <<'EOF' + echo "Executing DB waits..." + echo "Testing Database availability on [CNPG RW]" + until + echo "Testing database on url: [test-release-name-common-test-cnpg-my-pg-rw]" + pg_isready -U test-user -d test-db -h test-release-name-common-test-cnpg-my-pg-rw + do sleep 5 + done + echo "Database available on url: [test-release-name-common-test-cnpg-my-pg-rw]" + echo "Done executing DB waits..." + EOF + + - it: should generate correct db-wait script with pooler, only rw + set: + workload: *workload + cnpg: + my-pg: + enabled: true + user: test-user + database: test-db + pooler: + enabled: true + createRO: false + asserts: + - documentIndex: &deployDoc 5 + isKind: + of: Deployment + - documentIndex: *deployDoc + isAPIVersion: + of: apps/v1 + - documentIndex: *deployDoc + equal: + path: spec.template.spec.initContainers[0].name + value: test-release-name-common-test-system-cnpg-wait + - documentIndex: *deployDoc + equal: + path: spec.template.spec.initContainers[0].command + value: + - /bin/sh + - -c + - |- + /bin/sh <<'EOF' + echo "Executing DB waits..." + echo "Testing Database availability on [CNPG RW]" + until + echo "Testing database on url: [test-release-name-common-test-cnpg-my-pg-rw]" + pg_isready -U test-user -d test-db -h test-release-name-common-test-cnpg-my-pg-rw + do sleep 5 + done + echo "Database available on url: [test-release-name-common-test-cnpg-my-pg-rw]" + echo "Testing Database availability on [CNPG Pooler RW]" + until + echo "Testing database on url: [test-release-name-common-test-cnpg-my-pg-pooler-rw]" + pg_isready -U test-user -d test-db -h test-release-name-common-test-cnpg-my-pg-pooler-rw + do sleep 5 + done + echo "Database available on url: [test-release-name-common-test-cnpg-my-pg-pooler-rw]" + echo "Done executing DB waits..." + EOF + + - it: should generate correct db-wait script with pooler rw and ro + set: + workload: *workload + cnpg: + my-pg: + enabled: true + user: test-user + database: test-db + pooler: + enabled: true + createRO: true + asserts: + - documentIndex: &deployDoc 6 + isKind: + of: Deployment + - documentIndex: *deployDoc + isAPIVersion: + of: apps/v1 + - documentIndex: *deployDoc + equal: + path: spec.template.spec.initContainers[0].name + value: test-release-name-common-test-system-cnpg-wait + - documentIndex: *deployDoc + equal: + path: spec.template.spec.initContainers[0].command + value: + - /bin/sh + - -c + - |- + /bin/sh <<'EOF' + echo "Executing DB waits..." + echo "Testing Database availability on [CNPG RW]" + until + echo "Testing database on url: [test-release-name-common-test-cnpg-my-pg-rw]" + pg_isready -U test-user -d test-db -h test-release-name-common-test-cnpg-my-pg-rw + do sleep 5 + done + echo "Database available on url: [test-release-name-common-test-cnpg-my-pg-rw]" + echo "Testing Database availability on [CNPG Pooler RW]" + until + echo "Testing database on url: [test-release-name-common-test-cnpg-my-pg-pooler-rw]" + pg_isready -U test-user -d test-db -h test-release-name-common-test-cnpg-my-pg-pooler-rw + do sleep 5 + done + echo "Database available on url: [test-release-name-common-test-cnpg-my-pg-pooler-rw]" + echo "Testing Database availability on [CNPG Pooler RO]" + until + echo "Testing database on url: [test-release-name-common-test-cnpg-my-pg-pooler-ro]" + pg_isready -U test-user -d test-db -h test-release-name-common-test-cnpg-my-pg-pooler-ro + do sleep 5 + done + echo "Database available on url: [test-release-name-common-test-cnpg-my-pg-pooler-ro]" + echo "Done executing DB waits..." + EOF diff --git a/library/common/templates/lib/dependencies/_dbWait.tpl b/library/common/templates/lib/dependencies/_dbWait.tpl index e01ea1e9..3de65c15 100644 --- a/library/common/templates/lib/dependencies/_dbWait.tpl +++ b/library/common/templates/lib/dependencies/_dbWait.tpl @@ -361,35 +361,41 @@ command: - "-c" - | /bin/sh <<'EOF' - {{ range $name, $cnpg := .Values.cnpg }} - {{ if $cnpg.enabled }} +{{- range $name, $cnpg := .Values.cnpg -}} + {{- if $cnpg.enabled }} echo "Executing DB waits..." - {{ $cnpgName := include "tc.v1.common.lib.chart.names.fullname" $ }} - {{ $cnpgName = printf "%v-cnpg-%v" $cnpgName $name }} - echo "Testing Database availability..." - until - echo "Testing database on url: {{ $cnpgName }}-rw" - pg_isready -U {{ .user }} -d {{ .database }} -h {{ $cnpgName }}-rw - do sleep 5 - done - {{ if and $cnpg.pooler $cnpg.pooler.enabled }} - echo "Detected RW pooler, testing RW pooler availability..." - until - echo "Testing database on url: {{ $cnpgName }}-pooler-rw" - pg_isready -U {{ .user }} -d {{ .database }} -h {{ $cnpgName }}-pooler-rw - do sleep 5 - done - {{ if $cnpg.pooler.createRO }} - echo "Detected RO pooler, testing RO pooler availability..." - until - echo "Testing database on url: {{ $cnpgName }}-pooler-ro" - pg_isready -U {{ .user }} -d {{ .database }} -h {{ $cnpgName }}-pooler-ro - do sleep 5 - done - {{ end }} - {{ end }} - {{ end }} - {{ end }} - sleep 5 + {{- $cnpgName := include "tc.v1.common.lib.chart.names.fullname" $ -}} + {{- $cnpgName = printf "%v-cnpg-%v" $cnpgName $name -}} + + {{/* Wait RW CNPG */}} + {{- include "cnpg.wait.script" (dict "url" (printf "%s-rw" $cnpgName) "user" .user "db" .database "on" "CNPG RW") | nindent 4 -}} + + {{- if and $cnpg.pooler $cnpg.pooler.enabled -}} + {{/* Wait RW Pooler */}} + {{- include "cnpg.wait.script" (dict "url" (printf "%s-pooler-rw" $cnpgName) "user" .user "db" .database "on" "CNPG Pooler RW") | nindent 4 -}} + + {{/* Wait RO Pooler */}} + {{- if $cnpg.pooler.createRO -}} + {{- include "cnpg.wait.script" (dict "url" (printf "%s-pooler-ro" $cnpgName) "user" .user "db" .database "on" "CNPG Pooler RO") | nindent 4 -}} + {{- end -}} + + {{- end -}} + {{- end -}} +{{- end }} + echo "Done executing DB waits..." EOF {{- end -}} + +{{- define "cnpg.wait.script" -}} + {{- $url := .url -}} + {{- $user := .user -}} + {{- $db := .db -}} + {{- $on := .on -}} +echo "Testing Database availability on [{{ $on }}]" +until + echo "Testing database on url: [{{ $url }}]" + pg_isready -U {{ $user }} -d {{ $db }} -h {{ $url }} + do sleep 5 +done +echo "Database available on url: [{{ $url }}]" +{{- end -}}