Skip to content

Commit 4a1fc92

Browse files
committed
install schema
1 parent 1e343c3 commit 4a1fc92

21 files changed

+411
-26
lines changed

Makefile

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,11 @@ pgvector:
8181
schema: pgvector
8282
@echo "Running schema commands..."
8383
rm -rf ./db/generated-schema
84+
85+
mkdir -p ./db/generated-schema/extensions
86+
schemahero plan --driver postgres --uri $(CHARTSMITH_PG_URI) --spec-file ./db/schema/extensions --spec-type extension --out ./db/generated-schema/extensions
87+
schemahero apply --driver postgres --uri $(CHARTSMITH_PG_URI) --ddl ./db/generated-schema/extensions
88+
8489
mkdir -p ./db/generated-schema/tables
8590
schemahero plan --driver postgres --uri "$(CHARTSMITH_PG_URI)" --spec-file ./db/schema/tables --spec-type table --out ./db/generated-schema/tables
8691
schemahero apply --driver postgres --uri "$(CHARTSMITH_PG_URI)" --ddl ./db/generated-schema/tables
@@ -158,6 +163,10 @@ release:
158163
# Requires: GITHUB_TOKEN, OP_SERVICE_ACCOUNT_PRODUCTION
159164
.PHONY: replicated
160165
replicated:
166+
mkdir -p chart/chartsmith/db/schema/extensions
167+
mkdir -p chart/chartsmith/db/schema/tables
168+
cp db/schema/extensions/*.yaml chart/chartsmith/db/schema/extensions/
169+
cp db/schema/tables/*.yaml chart/chartsmith/db/schema/tables/
161170
dagger call release \
162171
--version $(version) \
163172
--build=false \

chart/chartsmith/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
db/

chart/chartsmith/templates/centrifugo-secret.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,16 @@ stringData:
1010
{
1111
{{- $existing := (lookup "v1" "Secret" .Release.Namespace "chartsmith-centrifugo-config") }}
1212
{{- $tokenHmacDefault := (randAlphaNum 32) }}
13-
{{- $tokenHmac := .Values.centrifugo.tokenHmacSecretKey.value | default ($existing.data.token_hmac_secret_key | b64dec | default $tokenHmacDefault) }}
13+
{{- $tokenHmac := .Values.centrifugo.tokenHmacSecretKey.value | default ((get (default dict $existing.data) "token_hmac_secret_key" | b64dec) | default $tokenHmacDefault) }}
1414
"token_hmac_secret_key": {{ $tokenHmac | quote }},
1515
{{- $adminPasswordDefault := (randAlphaNum 32) }}
16-
{{- $adminPassword := .Values.centrifugo.adminPassword.value | default ($existing.data.admin_password | b64dec | default $adminPasswordDefault) }}
16+
{{- $adminPassword := .Values.centrifugo.adminPassword.value | default ((get (default dict $existing.data) "admin_password" | b64dec) | default $adminPasswordDefault) }}
1717
"admin_password": {{ $adminPassword | quote }},
1818
{{- $adminSecretDefault := (randAlphaNum 32) }}
19-
{{- $adminSecret := .Values.centrifugo.adminSecret.value | default ($existing.data.admin_secret | b64dec | default $adminSecretDefault) }}
19+
{{- $adminSecret := .Values.centrifugo.adminSecret.value | default ((get (default dict $existing.data) "admin_secret" | b64dec) | default $adminSecretDefault) }}
2020
"admin_secret": {{ $adminSecret | quote }},
2121
{{- $apiKeyDefault := (randAlphaNum 32) }}
22-
{{- $apiKey := .Values.centrifugo.apiKey.value | default ($existing.data.api_key | b64dec | default $apiKeyDefault) }}
22+
{{- $apiKey := .Values.centrifugo.apiKey.value | default ((get (default dict $existing.data) "api_key" | b64dec) | default $apiKeyDefault) }}
2323
"api_key": {{ $apiKey | quote }},
2424
"allowed_origins": ["*"],
2525
"allow_user_limited_channels": true
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: {{ include "chartsmith.fullname" . }}-centrifugo
5+
labels:
6+
{{- include "chartsmith.labels" (dict "Chart" .Chart "Values" (merge .Values (dict "component" "centrifugo")) "Release" .Release "Files" .Files) | nindent 4 }}
7+
app.kubernetes.io/component: centrifugo
8+
spec:
9+
type: ClusterIP
10+
ports:
11+
- port: 8000
12+
targetPort: http
13+
protocol: TCP
14+
name: http
15+
selector:
16+
app.kubernetes.io/name: {{ include "chartsmith.name" . }}
17+
app.kubernetes.io/instance: {{ .Release.Name }}
18+
app.kubernetes.io/component: centrifugo
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: {{ include "chartsmith.fullname" . }}-worker
5+
labels:
6+
{{- include "chartsmith.labels" (dict "Chart" .Chart "Values" (merge .Values (dict "component" "worker")) "Release" .Release "Files" .Files) | nindent 4 }}
7+
app.kubernetes.io/component: worker
8+
spec:
9+
replicas: 1
10+
selector:
11+
matchLabels:
12+
{{- include "chartsmith.selectorLabels" (dict "Chart" .Chart "Values" (merge .Values (dict "component" "worker")) "Release" .Release "Files" .Files) | nindent 6 }}
13+
app.kubernetes.io/component: worker
14+
template:
15+
metadata:
16+
labels:
17+
{{- include "chartsmith.selectorLabels" (dict "Chart" .Chart "Values" (merge .Values (dict "component" "worker")) "Release" .Release "Files" .Files) | nindent 8 }}
18+
{{- include "chartsmith.labels" (dict "Chart" .Chart "Values" (merge .Values (dict "component" "worker")) "Release" .Release "Files" .Files) | nindent 8 }}
19+
app.kubernetes.io/component: worker
20+
{{- with .Values.podLabels }}
21+
{{- toYaml . | nindent 8 }}
22+
{{- end }}
23+
{{- with .Values.podAnnotations }}
24+
annotations:
25+
{{- toYaml . | nindent 8 }}
26+
{{- end }}
27+
spec:
28+
{{- if .Values.global.replicated.dockerconfigjson }}
29+
imagePullSecrets:
30+
- name: chartsmith-image-pull-secret
31+
{{- else if .Values.imagePullSecrets }}
32+
imagePullSecrets:
33+
{{- toYaml .Values.imagePullSecrets | nindent 8 }}
34+
{{- end }}
35+
serviceAccountName: {{ include "chartsmith.serviceAccountName" . }}
36+
securityContext:
37+
{{- toYaml .Values.podSecurityContext | nindent 8 }}
38+
containers:
39+
- name: worker
40+
securityContext:
41+
{{- toYaml .Values.securityContext | nindent 12 }}
42+
image: "{{ .Values.images.worker.registry }}/{{ .Values.images.worker.repository }}:{{ .Values.images.worker.tag }}"
43+
imagePullPolicy: {{ .Values.images.worker.pullPolicy }}
44+
args: ["run"]
45+
env:
46+
- name: CHARTSMITH_PG_URI
47+
value: "{{ if .Values.postgresql.enabled }}postgres://{{ .Values.postgresql.credentials.username }}:{{ .Values.postgresql.credentials.password }}@postgresql:5432/{{ .Values.postgresql.credentials.database }}{{ else }}{{ .Values.postgresql.externalUri }}{{ end }}"
48+
- name: CHARTSMITH_CENTRIFUGO_ADDRESS
49+
value: "http://{{ include "chartsmith.fullname" . }}-centrifugo:8000/api"
50+
- name: CHARTSMITH_CENTRIFUGO_API_KEY
51+
value: {{ .Values.centrifugo.apiKey.value | quote }}
52+
ports:
53+
- name: http
54+
containerPort: {{ .Values.service.port }}
55+
protocol: TCP
56+
livenessProbe:
57+
{{- toYaml .Values.livenessProbe | nindent 12 }}
58+
readinessProbe:
59+
{{- toYaml .Values.readinessProbe | nindent 12 }}
60+
resources:
61+
{{- toYaml .Values.resources | nindent 12 }}
62+
{{- with .Values.volumeMounts }}
63+
volumeMounts:
64+
{{- toYaml . | nindent 12 }}
65+
{{- end }}
66+
{{- with .Values.volumes }}
67+
volumes:
68+
{{- toYaml . | nindent 8 }}
69+
{{- end }}
70+
{{- with .Values.nodeSelector }}
71+
nodeSelector:
72+
{{- toYaml . | nindent 8 }}
73+
{{- end }}
74+
{{- with .Values.affinity }}
75+
affinity:
76+
{{- toYaml . | nindent 8 }}
77+
{{- end }}
78+
{{- with .Values.tolerations }}
79+
tolerations:
80+
{{- toYaml . | nindent 8 }}
81+
{{- end }}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: migrations-deployment
5+
labels:
6+
app.kubernetes.io/name: chartsmith
7+
spec:
8+
replicas: 1
9+
selector:
10+
matchLabels:
11+
app.kubernetes.io/name: chartsmith
12+
app.kubernetes.io/component: migrations
13+
template:
14+
metadata:
15+
labels:
16+
app.kubernetes.io/name: chartsmith
17+
app.kubernetes.io/component: migrations
18+
spec:
19+
restartPolicy: Always
20+
volumes:
21+
- name: plan
22+
emptyDir: {}
23+
- name: extensions
24+
emptyDir: {}
25+
- name: tables
26+
emptyDir: {}
27+
{{- $extensions := .Files.Glob "db/schema/extensions/*.yaml" }}
28+
{{- $tables := .Files.Glob "db/schema/tables/*.yaml" }}
29+
{{- range $path, $file := $extensions }}
30+
- name: ext-{{ base $path | replace ".yaml" "" | replace "." "-" }}
31+
configMap:
32+
name: schema-extension-{{ base $path | replace ".yaml" "" | replace "." "-" }}
33+
{{- end }}
34+
{{- range $path, $file := $tables }}
35+
- name: tbl-{{ base $path | replace ".yaml" "" | replace "." "-" }}
36+
configMap:
37+
name: schema-table-{{ base $path | replace ".yaml" "" | replace "." "-" }}
38+
{{- end }}
39+
initContainers:
40+
- name: plan
41+
image: schemahero/schemahero:0.19.0
42+
command: ["sh", "-c"]
43+
args:
44+
- |
45+
mkdir -p /plan/extensions
46+
/schemahero plan --driver postgres --uri $CHARTSMITH_PG_URI --spec-file /schema/extensions --spec-type extension --out /plan/extensions;
47+
mkdir -p /plan/tables
48+
/schemahero plan --driver postgres --uri $CHARTSMITH_PG_URI --spec-file /schema/tables --spec-type table --out /plan/tables;
49+
env:
50+
- name: CHARTSMITH_PG_URI
51+
value: "{{ if .Values.postgresql.enabled }}postgres://{{ .Values.postgresql.credentials.username }}:{{ .Values.postgresql.credentials.password }}@postgresql:5432/{{ .Values.postgresql.credentials.database }}{{ else }}{{ .Values.postgresql.externalUri }}{{ end }}"
52+
volumeMounts:
53+
- name: plan
54+
mountPath: /plan
55+
- name: extensions
56+
mountPath: /schema/extensions
57+
- name: tables
58+
mountPath: /schema/tables
59+
{{- range $path, $file := $extensions }}
60+
- name: ext-{{ base $path | replace ".yaml" "" | replace "." "-" }}
61+
mountPath: /schema/extensions/{{ base $path }}
62+
subPath: {{ base $path }}
63+
{{- end }}
64+
{{- range $path, $file := $tables }}
65+
- name: tbl-{{ base $path | replace ".yaml" "" | replace "." "-" }}
66+
mountPath: /schema/tables/{{ base $path }}
67+
subPath: {{ base $path }}
68+
{{- end }}
69+
- name: apply
70+
image: schemahero/schemahero:0.19.0
71+
command: ["sh", "-c"]
72+
args:
73+
- |
74+
/schemahero apply --driver postgres --uri $CHARTSMITH_PG_URI --ddl /plan/extensions;
75+
/schemahero apply --driver postgres --uri $CHARTSMITH_PG_URI --ddl /plan/tables;
76+
env:
77+
- name: CHARTSMITH_PG_URI
78+
value: "{{ if .Values.postgresql.enabled }}postgres://{{ .Values.postgresql.credentials.username }}:{{ .Values.postgresql.credentials.password }}@postgresql:5432/{{ .Values.postgresql.credentials.database }}{{ else }}{{ .Values.postgresql.externalUri }}{{ end }}"
79+
volumeMounts:
80+
- name: plan
81+
mountPath: /plan
82+
containers:
83+
- name: sleep
84+
image: schemahero/schemahero:0.19.0
85+
command: ["sh", "-c", "sleep infinity"]
86+
volumeMounts:
87+
- name: plan
88+
mountPath: /plan
89+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{{- if .Values.postgresql.enabled }}
2+
apiVersion: v1
3+
kind: Secret
4+
metadata:
5+
name: postgresql-secret
6+
labels:
7+
app: chartsmith
8+
component: postgresql
9+
type: Opaque
10+
stringData:
11+
username: {{ .Values.postgresql.credentials.username | quote }}
12+
password: {{ .Values.postgresql.credentials.password | quote }}
13+
database: {{ .Values.postgresql.credentials.database | quote }}
14+
{{- end }}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{{- if .Values.postgresql.enabled }}
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: postgresql
6+
labels:
7+
app: chartsmith
8+
component: postgresql
9+
spec:
10+
type: ClusterIP
11+
ports:
12+
- port: 5432
13+
targetPort: 5432
14+
name: postgres
15+
selector:
16+
app: chartsmith
17+
component: postgresql
18+
{{- end }}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
{{- if .Values.postgresql.enabled }}
2+
apiVersion: apps/v1
3+
kind: StatefulSet
4+
metadata:
5+
name: postgresql
6+
labels:
7+
app: chartsmith
8+
spec:
9+
serviceName: postgresql
10+
replicas: 1
11+
selector:
12+
matchLabels:
13+
app: chartsmith
14+
component: postgresql
15+
template:
16+
metadata:
17+
labels:
18+
app: chartsmith
19+
component: postgresql
20+
spec:
21+
{{- if .Values.global.replicated.dockerconfigjson }}
22+
imagePullSecrets:
23+
- name: chartsmith-image-pull-secret
24+
{{- else if .Values.imagePullSecrets }}
25+
imagePullSecrets:
26+
{{- toYaml .Values.imagePullSecrets | nindent 8 }}
27+
{{- end }}
28+
containers:
29+
- name: postgresql
30+
image: "{{ .Values.images.pgvector.registry }}/{{ .Values.images.pgvector.repository }}:{{ .Values.images.pgvector.tag }}"
31+
imagePullPolicy: {{ .Values.images.pgvector.pullPolicy }}
32+
env:
33+
- name: POSTGRES_DB
34+
valueFrom:
35+
secretKeyRef:
36+
name: postgresql-secret
37+
key: database
38+
- name: POSTGRES_USER
39+
valueFrom:
40+
secretKeyRef:
41+
name: postgresql-secret
42+
key: username
43+
- name: POSTGRES_PASSWORD
44+
valueFrom:
45+
secretKeyRef:
46+
name: postgresql-secret
47+
key: password
48+
ports:
49+
- containerPort: 5432
50+
name: postgres
51+
volumeMounts:
52+
- name: data
53+
mountPath: /var/lib/postgresql/data
54+
readinessProbe:
55+
exec:
56+
command:
57+
- pg_isready
58+
- -U
59+
- "$(POSTGRES_USER)"
60+
initialDelaySeconds: 10
61+
periodSeconds: 10
62+
livenessProbe:
63+
exec:
64+
command:
65+
- pg_isready
66+
- -U
67+
- "$(POSTGRES_USER)"
68+
initialDelaySeconds: 30
69+
periodSeconds: 10
70+
volumes:
71+
- name: data
72+
persistentVolumeClaim:
73+
claimName: postgresql-data
74+
---
75+
apiVersion: v1
76+
kind: PersistentVolumeClaim
77+
metadata:
78+
name: postgresql-data
79+
spec:
80+
accessModes:
81+
- ReadWriteOnce
82+
resources:
83+
requests:
84+
storage: {{ .Values.postgresql.storage.size | default "10Gi" }}
85+
{{- if .Values.postgresql.storage.className }}
86+
storageClassName: {{ .Values.postgresql.storage.className | quote }}
87+
{{- end }}
88+
{{- end }}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{{- $extensions := .Files.Glob "db/schema/extensions/*.yaml" }}
2+
{{- $tables := .Files.Glob "db/schema/tables/*.yaml" }}
3+
{{- range $path, $val := $extensions }}
4+
---
5+
apiVersion: v1
6+
kind: ConfigMap
7+
metadata:
8+
name: schema-extension-{{ base $path | replace ".yaml" "" | replace "." "-" }}
9+
labels:
10+
app.kubernetes.io/name: chartsmith
11+
chartsmith.io/schema: extension
12+
chartsmith.io/schema-file: {{ base $path }}
13+
data:
14+
{{ base $path }}: |
15+
{{ $.Files.Get $path | indent 4 }}
16+
{{- end }}
17+
{{- range $path, $val := $tables }}
18+
---
19+
apiVersion: v1
20+
kind: ConfigMap
21+
metadata:
22+
name: schema-table-{{ base $path | replace ".yaml" "" | replace "." "-" }}
23+
labels:
24+
app.kubernetes.io/name: chartsmith
25+
chartsmith.io/schema: table
26+
chartsmith.io/schema-file: {{ base $path }}
27+
data:
28+
{{ base $path }}: |
29+
{{ $.Files.Get $path | indent 4 }}
30+
{{- end }}

0 commit comments

Comments
 (0)