blob: 14a0366855da2e91f57df1891543796fe564bb0d [file] [log] [blame]
Piotr Dobrowolskibabcb802021-01-31 18:57:21 +01001local matrix = import "lib/matrix-ng.libsonnet";
Serge Bazanski60076c72020-11-03 19:17:25 +01002local irc = import "lib/appservice-irc.libsonnet";
3local telegram = import "lib/appservice-telegram.libsonnet";
4
5matrix {
6 local app = self,
7 local cfg = app.cfg,
8 cfg+:: {
9 namespace: "matrix",
10 webDomain: "matrix.hackerspace.pl",
11 serverName: "hackerspace.pl",
Piotr Dobrowolskibabcb802021-01-31 18:57:21 +010012 oidc+: {
Serge Bazanskiace32c02020-11-03 22:04:06 +010013 enable: true,
Piotr Dobrowolskibabcb802021-01-31 18:57:21 +010014 config+: {
15 allow_existing_users: true,
16 issuer: "https://sso.hackerspace.pl",
17 client_id: "matrix",
18 client_secret: { secretKeyRef: { name: "oauth2-cas-proxy", key: "oauth2_secret" } },
19 user_profile_method: "userinfo_endpoint",
Piotr Dobrowolski5ff2ccf2022-04-27 03:39:36 +020020 userinfo_endpoint: "https://sso.hackerspace.pl/api/1/userinfo",
Piotr Dobrowolskibabcb802021-01-31 18:57:21 +010021 client_auth_method: "client_secret_post",
Piotr Dobrowolski5ff2ccf2022-04-27 03:39:36 +020022 scopes: ["profile:read"],
Serge Bazanski8483d372020-11-10 22:07:30 +010023 },
Serge Bazanskiace32c02020-11-03 22:04:06 +010024 },
Piotr Dobrowolski8b9c8f92021-09-15 21:27:42 +020025 mediaRepo+: {
26 enable: true,
Piotr Dobrowolski21c8cd62021-09-16 13:07:54 +020027 route: true,
Piotr Dobrowolski8b9c8f92021-09-15 21:27:42 +020028 s3+: {
29 endpoint: std.strReplace((import "secrets/plain/media-repo-matrix-ceph.json").Endpoint, "http://", ""),
30 accessKey: (import "secrets/plain/media-repo-matrix-ceph.json").AccessKey,
31 secretKey: (import "secrets/plain/media-repo-matrix-ceph.json").SecretKey,
32 bucketName: "media-repo-matrix",
33 region: "eu",
34 },
35 db+: {
36 password: std.strReplace(importstr "secrets/plain/media-repo-matrix-postgres", "\n", ""),
37 },
38 },
Serge Bazanski60076c72020-11-03 19:17:25 +010039 },
40
Piotr Dobrowolski95da3d52021-02-06 11:55:34 +010041 riot+: {
42 config+: {
43 showLabsSettings: true,
44 },
45 },
46
Piotr Dobrowolski2e191ea2021-09-14 19:59:37 +020047 synapse+: {
Piotr Dobrowolski529e1812021-02-13 19:44:37 +010048 cfg+: {
49 appserviceWorker: true,
50 federationWorker: false,
51 },
52
53 config+: {
54 federation_metrics_domains: ["matrix.org", "evolved.systems", "narupo.pl", "staging-matrix.inf.re"]
55 },
56
Piotr Dobrowolski77af94d2021-09-16 22:17:58 +020057 genericWorker+: {
58 deployment+: {
59 spec+: {
60 replicas: 4,
61 },
62 },
63 },
64
65 // Synapse media worker has been replaced by matrix-media-repo deployment
Piotr Dobrowolski2e191ea2021-09-14 19:59:37 +020066 mediaWorker+: {
67 deployment+: {
68 spec+: {
Piotr Dobrowolski21c8cd62021-09-16 13:07:54 +020069 replicas: 0,
Piotr Dobrowolski2e191ea2021-09-14 19:59:37 +020070 },
71 },
72 },
73 },
74
Serge Bazanskied421912021-06-30 12:16:01 +000075 // Bump up storage to 200Gi from default 100Gi, use different name. The
76 // new name corresponds to a manually migrated and sized-up PVC that
77 // contains data from the original waw3-postgres PVC.
78 postgres3+: {
79 volumeClaim+: {
80 metadata+: {
81 name: "waw3-postgres-2",
82 },
83 spec+: {
84 resources+: {
85 requests+: {
86 storage: "200Gi",
87 },
88 },
89 },
90 },
91 },
92
Serge Bazanski60076c72020-11-03 19:17:25 +010093 appservices: {
94 "irc-freenode": irc.AppServiceIrc("freenode") {
95 cfg+: {
Serge Bazanskiace32c02020-11-03 22:04:06 +010096 image: cfg.images.appserviceIRC,
Serge Bazanski61f978a2021-01-22 16:26:07 +010097 storageClassName: "waw-hdd-redundant-3",
Serge Bazanski60076c72020-11-03 19:17:25 +010098 metadata: app.metadata("appservice-irc-freenode"),
99 // TODO(q3k): add labels to blessed nodes
100 nodeSelector: {
Piotr Dobrowolski356dd6d2021-01-31 18:09:49 +0100101 "kubernetes.io/hostname": "bc01n02.hswaw.net",
Serge Bazanski60076c72020-11-03 19:17:25 +0100102 },
Serge Bazanskie7f14472021-05-19 16:07:30 +0000103 bootstrapJob: false,
Serge Bazanski60076c72020-11-03 19:17:25 +0100104 config+: {
105 homeserver+: {
106 url: "https://%s" % [cfg.webDomain],
107 domain: "%s" % [cfg.serverName],
108 },
109 ircService+: {
Serge Bazanski6be8b2e2021-05-19 16:32:20 +0000110 permissions: {
111 "@q3k:hackerspace.pl": "admin",
112 "@informatic:hackerspace.pl": "admin",
113 },
Serge Bazanskib387f572021-05-24 13:53:18 +0200114 ident: {
115 enabled: true,
116 port: 1113,
117 },
Serge Bazanski60076c72020-11-03 19:17:25 +0100118 servers+: {
Serge Bazanski77112242021-05-26 19:42:47 +0000119 local servers = self,
Serge Bazanski60076c72020-11-03 19:17:25 +0100120 "irc.freenode.net"+: {
Serge Bazanski1431d1d2021-06-06 12:50:37 +0000121 mappings+: {},
Serge Bazanski60076c72020-11-03 19:17:25 +0100122 ircClients+: {
123 maxClients: 150,
124 },
125 },
Serge Bazanski77112242021-05-26 19:42:47 +0000126 "irc.libera.chat": servers["irc.freenode.net"] {
Serge Bazanski1431d1d2021-06-06 12:50:37 +0000127 mappings+: import "secrets/plain/appservice-irc-libera-mappings.jsonnet",
Serge Bazanski77112242021-05-26 19:42:47 +0000128 ircClients+: {
Serge Bazanski1431d1d2021-06-06 12:50:37 +0000129 maxClients: 150,
Serge Bazanski77112242021-05-26 19:42:47 +0000130 },
131 name: "Libera Chat",
132 networkId: "libera",
133 dynamicChannels+: {
134 groupId: "+libera:hackerspace.pl",
135 aliasTemplate: "#libera_$CHANNEL",
136 },
137 matrixClients+: {
138 userTemplate:"@libera_$NICK",
139 },
140 },
Serge Bazanski60076c72020-11-03 19:17:25 +0100141 },
142 },
143 },
Piotr Dobrowolski37fbff72021-02-13 20:17:33 +0100144 passwordEncryptionKeySecret: "appservice-irc-password-encryption-key",
Serge Bazanski60076c72020-11-03 19:17:25 +0100145 },
146 },
147 "telegram-prod": telegram.AppServiceTelegram("prod") {
148 cfg+: {
Serge Bazanskiace32c02020-11-03 22:04:06 +0100149 image: cfg.images.appserviceTelegram,
Serge Bazanski60076c72020-11-03 19:17:25 +0100150 storageClassName: cfg.storageClassName,
151 metadata: app.metadata("appservice-telegram-prod"),
Serge Bazanskie7f14472021-05-19 16:07:30 +0000152 bootstrapJob: false,
Serge Bazanski60076c72020-11-03 19:17:25 +0100153
154 config+: {
155 homeserver+: {
156 address: "https://%s" % [cfg.webDomain],
157 domain: cfg.serverName,
158 },
159 appservice+: {
160 id: "telegram",
161 },
162 telegram+: {
163 api_id: (std.split(importstr "secrets/plain/appservice-telegram-prod-api-id", "\n"))[0],
164 api_hash: (std.split(importstr "secrets/plain/appservice-telegram-prod-api-hash", "\n"))[0],
165 bot_token: (std.split(importstr "secrets/plain/appservice-telegram-prod-token", "\n"))[0],
166 },
167 bridge+: {
168 permissions+: {
169 "hackerspace.pl": "puppeting",
170 "@q3k:hackerspace.pl": "admin",
171 },
172 },
173 },
174 },
175 },
176 },
177}