| local mirko = import "../../kube/mirko.libsonnet"; |
| local kube = import "../../kube/kube.libsonnet"; |
| local postgres = import "../../kube/postgres.libsonnet"; |
| |
| { |
| local cfg = self.cfg, |
| cfg:: { |
| # Manually built from code.hackerspace.pl/q3k/ldap-web-public. |
| image: "frab/frab@sha256:30051f5153c4f02a8a1bee4b306bd696e2b018f2b13d16bd9c681fc1d633de3e", |
| storageClassName: error "storageClassName must be set!", |
| webFQDN: error "webFQDN must be set!", |
| |
| secret: { |
| secretKeyBase: error "secretKeyBase must be set!", |
| smtpPassword: error "smtpPassword must be set!", |
| }, |
| |
| smtp: { |
| server: "mail.hackerspace.pl", |
| from: "frab@hackerspace.pl", |
| username: "frab", |
| }, |
| }, |
| |
| component(cfg, env): mirko.Component(env, "frab") { |
| local frab = self, |
| cfg+: { |
| image: cfg.image, |
| volumes+: { |
| public: kube.PersistentVolumeClaimVolume(frab.volumePublic), |
| }, |
| |
| pgpass:: { secretKeyRef: { name: frab.makeName("-postgres"), key: "postgres_password", } }, |
| |
| container: frab.Container("main") { |
| volumeMounts_+: { |
| public: { mountPath: "/home/frab/app/public", }, |
| }, |
| // order matters (for POSTGRES_PASS substitution), we don't use env_ |
| env: [ |
| { name: "TZ", value: "Europe/Warsaw" }, |
| { name: "POSTGRES_PASS", valueFrom: frab.cfg.pgpass }, |
| { name: "DATABASE_URL", value: "postgresql://frab:$(POSTGRES_PASS)@%s/frab" % [frab.postgres.svc.host] }, |
| { name: "SECRET_KEY_BASE", valueFrom: kube.SecretKeyRef(frab.secret, "secretKeyBase") }, |
| { name: "FROM_EMAIL", value: cfg.smtp.from }, |
| { name: "SMTP_ADDRESS", value: cfg.smtp.server }, |
| { name: "SMTP_USERNAME", value: cfg.smtp.username }, |
| { name: "SMTP_PASSWORD", valueFrom: kube.SecretKeyRef(frab.secret, "smtpPassword") }, |
| { name: "SMTP_PORT", value: "587" }, |
| { name: "SMTP_NOTLS", value: "false" }, |
| ], |
| resources: { |
| // thicc RoR |
| requests: { |
| cpu: "100m", |
| memory: "512Mi", |
| }, |
| limits: { |
| cpu: "1", |
| memory: "1Gi", |
| }, |
| }, |
| }, |
| ports+: { |
| publicHTTP: { |
| web: { |
| port: 3000, |
| dns: cfg.webFQDN, |
| }, |
| }, |
| }, |
| }, |
| |
| secret: kube.Secret(frab.makeName("-secret")) { |
| metadata+: frab.metadata, |
| data: cfg.secret, |
| }, |
| |
| postgres: postgres { |
| cfg+: { |
| namespace: frab.metadata.namespace, |
| appName: "frab", |
| storageClassName: cfg.storageClassName, |
| prefix: frab.makeName("-postgres") + "-", |
| database: "frab", |
| username: "frab", |
| password: frab.cfg.pgpass, |
| }, |
| }, |
| |
| volumePublic: kube.PersistentVolumeClaim(frab.makeName("-public")) { |
| metadata+: frab.metadata, |
| spec+: { |
| storageClassName: cfg.storageClassName, |
| accessModes: ["ReadWriteOnce"], |
| resources: { |
| requests: { |
| storage: "5Gi", |
| }, |
| }, |
| }, |
| }, |
| }, |
| } |