blob: 7ad075082d8a6ea86a93960cb4125b089432725b [file] [log] [blame]
Radek Pietruszewskif5844312023-10-27 22:41:18 +02001local kube = import "../../kube/hscloud.libsonnet";
Piotr Dobrowolski0572fff2021-02-06 22:23:53 +01002local postgres = import "../../kube/postgres.libsonnet";
3
4{
5 local app = self,
6 local cfg = app.cfg,
7
8 cfg:: {
9 namespace: "redmine",
10 image: "registry.k0.hswaw.net/informatic/redmine@sha256:b04d1fd04549424e505722c9feb0b6741a057cb8f0fab68ad3730ecb167417df",
11 domain: error "domain must be set",
12 storageClassName: "waw-hdd-redundant-3",
13 database: {
14 host: "postgres",
15 name: "redmine",
16 username: "redmine",
17 password: { secretKeyRef: { name: "redmine", key: "postgres_password" } },
18 port: 5432,
19 },
20
Serge Bazanski877cf0a2021-02-08 00:34:34 +010021 b: {
22 domains: [],
23 image: "registry.k0.hswaw.net/q3k/b:315532800-6cc2f867951e123909b23955cd7bcbcc3ec24f8a",
24 },
25
Piotr Dobrowolski0572fff2021-02-06 22:23:53 +010026 storage: {
27 endpoint: error "storage.endpoint must be set",
28 region: error "storage.region must be set",
29 bucket: error "storage.bucket must be set",
30 accessKey: error "storage.accessKey must be set",
31 secretKey: error "storage.secretKey must be set",
32 },
33
34 oidc: {
35 server: error "oidc.server must be set",
36 clientID: error "oidc.clientID must be set",
37 clientSecret: error "oidc.clientSecret must be set",
38 },
Piotr Dobrowolski054c5b42021-02-09 10:05:59 +010039
40 # Mailing configuration object passed to smtp_settings
41 mailing: {
42 address: error "mailing.address must be set",
43 port: 465,
44 ssl: true,
45 domain: error "mailing.domain must be set",
46 authentication: ":login",
47 user_name: error "mailing.user_name must be set",
48 password: error "mailing.password must be set",
49 },
Piotr Dobrowolski0572fff2021-02-06 22:23:53 +010050 },
51
Piotr Dobrowolski054c5b42021-02-09 10:05:59 +010052 # Generates YAML file while preserving specified ruby-style symbols.
53 # (ie. removes surrounding quotes)
54 rubyYaml(obj, symbols):: std.foldr(function (symbol, str) std.strReplace(str, '"%s"' % symbol, symbol), symbols, std.manifestYamlDoc(obj)),
55
radex99ed6a72023-11-24 11:42:55 +010056 local ns = kube.Namespace(app.cfg.namespace),
Piotr Dobrowolski0572fff2021-02-06 22:23:53 +010057
58 postgres: postgres {
59 cfg+: {
60 namespace: cfg.namespace,
61 appName: "redmine",
62 database: cfg.database.name,
63 username: cfg.database.username,
64 password: cfg.database.password,
65 storageClassName: cfg.storageClassName,
66 },
67 },
68
radex99ed6a72023-11-24 11:42:55 +010069 deployment: ns.Contain(kube.Deployment("redmine")) {
Piotr Dobrowolski0572fff2021-02-06 22:23:53 +010070 spec+: {
71 replicas: 1,
72 template+: {
73 spec+: {
74 securityContext: {
75 runAsUser: 999,
76 runAsGroup: 999,
77 fsGroup: 999,
78 },
79 containers_: {
80 web: kube.Container("redmine") {
81 image: cfg.image,
Piotr Dobrowolski054c5b42021-02-09 10:05:59 +010082 args: ['sh', '-c', |||
83 set -e
84 echo "${X_EXTRA_CONFIGURATION}" > config/configuration.yml
85 exec /docker-entrypoint.sh rails server -b 0.0.0.0
86 |||],
Piotr Dobrowolski0572fff2021-02-06 22:23:53 +010087 ports_: {
88 http: { containerPort: 3000 },
89 },
90 env_: {
91 REDMINE_DB_POSTGRES: cfg.database.host,
92 REDMINE_DB_PORT: cfg.database.port,
93 REDMINE_DB_USERNAME: cfg.database.username,
94 REDMINE_DB_PASSWORD: cfg.database.password,
95 REDMINE_DB_DATABASE: cfg.database.name,
96
97 REDMINE_SECRET_KEY_BASE: { secretKeyRef: { name: "redmine", key: "secret_key" } },
98
99 REDMINE_OIDC_SERVER: cfg.oidc.server,
100 REDMINE_OIDC_CLIENT_ID: cfg.oidc.clientID,
101 REDMINE_OIDC_CLIENT_SECRET: cfg.oidc.clientSecret,
102 REDMINE_OIDC_ADMIN_GROUP: "issues-admin",
103
104 REDMINE_S3_ENDPOINT: cfg.storage.endpoint,
105 REDMINE_S3_BUCKET: cfg.storage.bucket,
106 REDMINE_S3_ACCESS_KEY_ID: cfg.storage.accessKey,
107 REDMINE_S3_SECRET_ACCESS_KEY: cfg.storage.secretKey,
108 REDMINE_S3_REGION: cfg.storage.region,
Piotr Dobrowolski054c5b42021-02-09 10:05:59 +0100109
110 REDMINE_MAILING_PASSWORD: cfg.mailing.password,
111 X_EXTRA_CONFIGURATION: app.rubyYaml({
112 production: {
113 email_delivery: {
114 delivery_method: ":smtp",
115 smtp_settings: cfg.mailing {
116 password: "$(REDMINE_MAILING_PASSWORD)",
117 },
118 }
119 },
120 }, [":smtp", ":login"]),
Piotr Dobrowolski0572fff2021-02-06 22:23:53 +0100121 },
122 },
123 },
124 },
125 },
126 },
127 },
128
radex99ed6a72023-11-24 11:42:55 +0100129 svc: ns.Contain(kube.Service("redmine")) {
radex8b8f3872023-11-24 11:09:46 +0100130 target:: app.deployment,
Piotr Dobrowolski0572fff2021-02-06 22:23:53 +0100131 },
132
radex99ed6a72023-11-24 11:42:55 +0100133 ingress: ns.Contain(kube.SimpleIngress("redmine")) {
Radek Pietruszewskif5844312023-10-27 22:41:18 +0200134 hosts:: [cfg.domain],
135 target_service:: app.svc,
Piotr Dobrowolski0572fff2021-02-06 22:23:53 +0100136 },
Serge Bazanski877cf0a2021-02-08 00:34:34 +0100137
138 b: (if std.length(cfg.b.domains) > 0 then {
radex99ed6a72023-11-24 11:42:55 +0100139 deployment: ns.Contain(kube.Deployment("b")) {
Serge Bazanski877cf0a2021-02-08 00:34:34 +0100140 spec+: {
141 replicas: 3,
142 template+: {
143 spec+: {
144 containers_: {
145 default: kube.Container("default") {
146 image: "registry.k0.hswaw.net/q3k/b:315532800-6cc2f867951e123909b23955cd7bcbcc3ec24f8a",
147 ports_: {
148 http: { containerPort: 8000 },
149 },
150 command: [
151 "/devtools/issues/b",
152 ],
153 },
154 },
155 },
156 },
157 },
158 },
radex99ed6a72023-11-24 11:42:55 +0100159 svc: ns.Contain(kube.Service("b")) {
radex8b8f3872023-11-24 11:09:46 +0100160 target:: app.b.deployment,
Serge Bazanski877cf0a2021-02-08 00:34:34 +0100161 },
radex99ed6a72023-11-24 11:42:55 +0100162 ingress: ns.Contain(kube.SimpleIngress("b")) {
Radek Pietruszewskif5844312023-10-27 22:41:18 +0200163 hosts:: cfg.b.domains,
164 target_service:: app.b.svc,
165 },
Serge Bazanski877cf0a2021-02-08 00:34:34 +0100166 } else {}),
167
Piotr Dobrowolski0572fff2021-02-06 22:23:53 +0100168}