feat/add-postgres-database (#20)
All checks were successful
continuous-integration/drone/push Build is passing

feat: add postgres database

Signed-off-by: kjuulh <contact@kjuulh.io>

feat: add postgres and more templates

Signed-off-by: kjuulh <contact@kjuulh.io>

Reviewed-on: https://git.front.kjuulh.io/kjuulh/cuddle-clusters/pulls/20
Co-authored-by: kjuulh <contact@kjuulh.io>
Co-committed-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
2024-11-29 09:05:50 +01:00
committed by Kasper Juul Hermansen
parent 943cfcef2e
commit 3956366d28
24 changed files with 316 additions and 20 deletions

View File

@@ -3,4 +3,4 @@
some = {
thing = "some"
}
}
}

View File

@@ -1 +1 @@
env: dev
env: dev

View File

@@ -1 +1 @@
env: prod
env: prod

View File

@@ -1 +1 @@
some_file: 4
some_file: 4

View File

@@ -1 +1 @@
service
service

View File

@@ -1 +1 @@
service
service

View File

@@ -6,7 +6,7 @@ mod cuddle_vars;
use cuddle_clusters::{
catalog::{
cluster_vars::ClusterVars, crdb_database::CockroachDB, cuddle_vars::CuddleVars,
ingress::Ingress, vault_secret::VaultSecret,
ingress::Ingress, postgres_database::PostgresDatabase, vault_secret::VaultSecret,
},
IntoComponent,
};
@@ -125,3 +125,21 @@ async fn with_ingress() -> anyhow::Result<()> {
Ok(())
}
#[tokio::test]
async fn with_postgres_databse() -> anyhow::Result<()> {
let current_dir = std::env::current_dir()?.join("tests/with_postgres_database");
run_test_with_components(
"with_postgres_database",
vec![
CuddleVars::new(&current_dir).await?.into_component(),
ClusterVars::default().into_component(),
VaultSecret::default().into_component(),
PostgresDatabase::new(&current_dir).await?.into_component(),
],
)
.await?;
Ok(())
}

View File

@@ -6,4 +6,4 @@ metadata:
namespace: dev
data:
DATABASE_URL: postgresql://root@dev-cluster:26257/service

View File

@@ -36,4 +36,4 @@ spec:
- containerPort: 3001
name: internal-http
- containerPort: 3002
name: internal-grpc
name: internal-grpc

View File

@@ -118,4 +118,4 @@ spec:
tls:
- hosts:
- grpc.service.dev.internal.kjuulh.app
secretName: tls-service-kjuulh-app-internal-grpc-ingress-dns
secretName: tls-service-kjuulh-app-internal-grpc-ingress-dns

View File

@@ -27,4 +27,4 @@ spec:
- containerPort: 3001
name: internal-http
- containerPort: 3002
name: internal-grpc
name: internal-grpc

View File

@@ -118,4 +118,4 @@ spec:
tls:
- hosts:
- grpc.service.prod.internal.kjuulh.app
secretName: tls-service-kjuulh-app-internal-grpc-ingress-dns
secretName: tls-service-kjuulh-app-internal-grpc-ingress-dns

View File

@@ -27,4 +27,4 @@ spec:
- containerPort: 3001
name: internal-http
- containerPort: 3002
name: internal-grpc
name: internal-grpc

View File

@@ -0,0 +1,7 @@
vars:
service: service
database:
postgres: "true"
cuddle/clusters:
dev:

View File

@@ -0,0 +1,12 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: service-cuddle-postgres
namespace: dev
data:
DATABASE_TYPE: postgresql
DATABASE_HOST: dev.postgresql.kjuulh.app
DATABASE_PORT: 5433
DATABASE_USER: service
DATABASE_DB: service

View File

@@ -0,0 +1,54 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: service
name: service
spec:
replicas: 3
selector:
matchLabels:
app: service
template:
metadata:
labels:
app: service
spec:
containers:
- args:
- serve
command:
- service
image: kasperhermansen/service:main-1715336504
name: service
envFrom:
- configMapRef:
name: service-config
env:
- name: DATABASE_HOST
valueFrom:
secretKeyRef:
name: service-cuddle-postgres
key: DATABASE_HOST
- name: DATABASE_PORT
valueFrom:
secretKeyRef:
name: service-cuddle-postgres
key: DATABASE_PORT
- name: DATABASE_USER
valueFrom:
secretKeyRef:
name: service-cuddle-postgres
key: DATABASE_USER
- name: DATABASE_DB
valueFrom:
secretKeyRef:
name: service-cuddle-postgres
key: DATABASE_DB
ports:
- containerPort: 3000
name: external-http
- containerPort: 3001
name: internal-http
- containerPort: 3002
name: internal-grpc

View File

@@ -0,0 +1,56 @@
{%- set service_name = vars.cuddle_vars.service -%}
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: {{ service_name }}
name: {{ service_name }}
spec:
replicas: 3
selector:
matchLabels:
app: {{ service_name }}
template:
metadata:
labels:
app: {{ service_name }}
spec:
containers:
- args:
- serve
command:
- {{ service_name }}
image: kasperhermansen/{{ service_name }}:main-1715336504
name: {{ service_name }}
envFrom:
- configMapRef:
name: {{service_name}}-config
{%- if vars.vault_secret.has_values or vars.cuddle_postgres.has_values %}
env:
{%- if vars.vault_secret.has_values %}
{%- for secret in vars.vault_secret.secrets %}
- name: {{secret | upper | replace(".", "_") | replace("-", "_") }}
valueFrom:
secretKeyRef:
name: {{ vars.vault_secret.file_name(service_name) }}
key: {{ secret }}
{%- endfor %}
{%- endif %}
{%- if vars.cuddle_postgres.has_values %}
{%- for env in vars.cuddle_postgres.env %}
- name: {{ env }}
valueFrom:
secretKeyRef:
name: {{ vars.cuddle_postgres.file_name(service_name) }}
key: {{ env }}
{%- endfor %}
{%- endif %}
{%- endif %}
ports:
- containerPort: 3000
name: external-http
- containerPort: 3001
name: internal-http
- containerPort: 3002
name: internal-grpc

View File

@@ -36,4 +36,4 @@ spec:
- containerPort: 3001
name: internal-http
- containerPort: 3002
name: internal-grpc
name: internal-grpc

View File

@@ -10,4 +10,4 @@ spec:
mount: kvv2
path: service/dev
refreshAfter: 30s
type: kv-v2
type: kv-v2