cluster

Infrastructure files for Nordgedanken and Midnightthoughts.
git clone git://archive.git.mtrnord.blog/MTRNord/cluster.git
Log | Files | Refs | README

commit b0059fdd588e082056da4e737ec2688e6d3d7a2a
parent 19eae5793cabd57144385e49b6cd85f3ac5fedab
Author: MTRNord <mtrnord1@gmail.com>
Date:   Wed,  9 Apr 2025 19:22:05 +0200

Prepare mariadb for irc

Diffstat:
Aapps/2024_cluster/namespaces/irc.yaml | 4++++
Mapps/2024_cluster/namespaces/kustomization.yaml | 1+
Aapps/2024_cluster/secrets/irc.yaml | 28++++++++++++++++++++++++++++
Mapps/2024_cluster/secrets/kustomization.yaml | 1+
Mapps/2024_cluster/secrets/mariadb-operator.yaml | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
Mapps/base/envoy-gateway/release.yaml | 20++++++++++++++++++++
Mapps/base/gerrit/gerrit_cluster.yaml | 246++++++++++++++++++++++++++++++++++++++++----------------------------------------
Aapps/base/irc/files/ircd.motd | 14++++++++++++++
Aapps/base/irc/files/ircd.yaml | 648+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aapps/base/irc/kustomization.yaml | 12++++++++++++
Aapps/base/irc/resources.yaml | 172+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mapps/base/mariadb-operator/mariadb.yaml | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12 files changed, 1144 insertions(+), 150 deletions(-)

diff --git a/apps/2024_cluster/namespaces/irc.yaml b/apps/2024_cluster/namespaces/irc.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: irc diff --git a/apps/2024_cluster/namespaces/kustomization.yaml b/apps/2024_cluster/namespaces/kustomization.yaml @@ -35,3 +35,4 @@ resources: #- changedetection.yaml - xandikos.yaml - plane.yaml + - irc.yaml diff --git a/apps/2024_cluster/secrets/irc.yaml b/apps/2024_cluster/secrets/irc.yaml @@ -0,0 +1,28 @@ +apiVersion: v1 +kind: Secret +metadata: + name: irc-db + namespace: irc +type: Opaque +stringData: + password: ENC[AES256_GCM,data:JpwnlR+R4O0b7fVyzh51XOggeqvzr2hokerSAgLZWBaZj85O1BGZY/c4jEnqn+g3DxApNd5rrpjuChuaZy7Eqg==,iv:eCwTnJnnCafI17fQlI07vBVI7GcelTwcfOslggzDTqo=,tag:LO6B2mL6/WsAagj1pYzEAg==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNRmc3YXh4dEYrTjczMVpZ + U0lMeERpVlY3endXRER1S1FtWjBjSEFuaEhJCmZYTk1mMHRhVldidjdIYVdvN1d1 + dDdzNndWdWJIZlAxSjNvc2RsRUp4dDQKLS0tIHkzbkZpUzZOenB6b0dUSm9XdEtB + cm1Cd1lsZGtKa29rMmFGQTcrVmV3U3MKUBCIvT2JDh/38UcwGgFXx7Ow/nqnINmc + iOr4cXl8yjU4RP6Cq0L1f/ibRPfGutOFo4SjgSqm7CLckjPmJ7br7Q== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-04-09T17:03:54Z" + mac: ENC[AES256_GCM,data:EiPm13lRimo+691Jc4TuaMBAl+EZVN/TO9QBSDkZo9yeOxgjvhHVXndEzROqj2bOFk2x4eHlSrXuUhlSjp9RSnvJbKIJkc7sE9BGLutqTbwewYcQDe2mqHJ/DzpchmSK8RjzqCANz88VBAf4Hg5BMH5kcWbvEzQzFhcTCPMbn0M=,iv:ZuonCaRnh/TZVpFGns4CXHXKT2tZ+X2hJ1le69US7P8=,tag:Rycco6OrsH3d0wXaZDGrwQ==,type:str] + pgp: [] + encrypted_regex: ^(root_password|pgdb_password|pgdb_remote_url|hmac_secret_key|adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ + version: 3.9.1 diff --git a/apps/2024_cluster/secrets/kustomization.yaml b/apps/2024_cluster/secrets/kustomization.yaml @@ -20,3 +20,4 @@ resources: - rundeck.yaml - hubzilla.yaml - archivebox.yaml + - irc.yaml diff --git a/apps/2024_cluster/secrets/mariadb-operator.yaml b/apps/2024_cluster/secrets/mariadb-operator.yaml @@ -1,6 +1,6 @@ apiVersion: v1 stringData: - password: ENC[AES256_GCM,data:1n57UxVIMT7iqjLdmXJGFrwNoPWQOdjUnNryTxUWgoJg5Cdyp+szCpdcaGckw/PSxwGiZD8AYuJqThyO8GclFQ==,iv:tWK2VP4AMFeGN5pqYsrcf0b7kHjU2q8xLT27hncNupc=,tag:pvUVVG8wk6n5Eyybx3g0XQ==,type:str] + password: ENC[AES256_GCM,data:+mlr+JyQLQq9v4MBB2XYSAGQPyV/co/ogItD/06Bd+oegJ9w124tMH1SLwKrY1X8ZbBf9rZavQhnsrBflzweTQ==,iv:U31QA9LHuqADo1KpQ1Pc9xAxDou8gQjFJ8NyztSIg2w=,tag:ft9oVEILSkWNlHOUHCT6pA==,type:str] kind: Secret metadata: name: mariadb-osticket @@ -14,21 +14,21 @@ sops: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGMklRb2pBRk13TWQ0OGgy - RGF0eWZEYko4eTcxUkhqRjQ4eXRGaE9kcEVBClU5eDFLV1UrbzdJVFBSQ0NIaG5u - ekpQSllYQXdIclJPeFpkb1BCWUtFQUkKLS0tIElLbCtQNUppT2NDNjBXMHJGTDd2 - dlA2bzBzTE9RZEdpSmIvTEtzWmtSNFEKoh0Ro4Bm3Cx+6fmhxuLHl4kJ3hVMnC7r - 2ZxZIcDYxvfJa4HNUPPhgvW07GPxcOsFpVY3Rk2eprLIIo/jVGEkwA== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5TnBUUnJnTUsza0NEVXMw + SUZVRExtdFF6bjlQczN1eXF5RzQwZ2lwM0J3Ck1qOWE0cEZGdEpKOTAxZ3MxeWpz + UStrWUhVSFEzRWRrcFJtTFRyYmcra28KLS0tIHdrcEZ5a2xKRE1SZWhrL1c5c0Nk + TURid1M2ckV0RUZrM3lHNmxnZnNDcDAKewPFv461u2mJe9VzwApHCQWx7TlorYcE + 5ORGnz1BvwK6qudR5rLiK+NyQKSUrxjm3QTUb/6IONzlmdu+SfletQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-03-31T14:00:12Z" - mac: ENC[AES256_GCM,data:VaeS7DrpBcfbRY7waA6pJMq+sARW1qteqJyQvvWf2OsMenii+pZvDkxqeXkccDSnuPBKQskOx1lZRWTBTyUWG5elAo4BhGh2+nok5M/vixGnWCNZwuFrZ9y9wJ22tORPbueHSxOUR1Gs1DktlvEtpaX2/rWQfnMNU00dwnEh8EA=,iv:Qf32meXfuOs9KtQeuCp9KGfHI4HTJrxYszBIMgDGcHY=,tag:LJtSL/uIIuDVB8M/0uDhOg==,type:str] + lastmodified: "2025-04-09T17:03:24Z" + mac: ENC[AES256_GCM,data:jFEa7eeL+cGwDO1BPjbfYfbpZ9mL5cyIlTrUduf0abMyVQQYTG8xU5pSWWfGe5+jeggHRL0Ji22fAP2yVvCKmHB2QBcuzQykp4q68J389Wj9jlITwBRiVrBg9/iRmuJl2K4bJJpzDm4llAP+AYiTrULnSyst+vrRvSsv3x58k5o=,iv:N6Wx5xc8NRg4/0hiOSH7CZf/oO2nsq/MFkQxFW5IEF0=,tag:ss+PZCGmzZ8ht7SwDtgHbg==,type:str] pgp: [] - encrypted_regex: ^(adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ + encrypted_regex: ^(root_password|pgdb_password|pgdb_remote_url|hmac_secret_key|adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ version: 3.9.1 --- apiVersion: v1 stringData: - password: ENC[AES256_GCM,data:g5PIyg/qjUpxqCD5zPIqJKtqpJh9q0ecCafV2elA3LxqLxAvYKP0MxT8t+Y8f61V2WKPW4xVp0DPLz1pMEc3PA==,iv:fu/ueCNA9EAnQ+cMbCXnaI0QWGLXNB6yq35D2pHFnoc=,tag:O1dETNJVpmT+Ngue7N2tOA==,type:str] + password: ENC[AES256_GCM,data:uBjl614oyva46lYb9xNyje0D/rs4F8fGXFYh5vTnrqunOLnxW1ANuW63nQ7sgB32jQ8cz05wrNhc5z2CAsB+Rg==,iv:y/EAFJ4bivZExIJuAa/077qrCKqcKXjLpECKewGqDrM=,tag:G/KnRCAN2DWMZnMgs3hv8A==,type:str] kind: Secret metadata: name: mariadb-hubzilla @@ -42,21 +42,21 @@ sops: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGMklRb2pBRk13TWQ0OGgy - RGF0eWZEYko4eTcxUkhqRjQ4eXRGaE9kcEVBClU5eDFLV1UrbzdJVFBSQ0NIaG5u - ekpQSllYQXdIclJPeFpkb1BCWUtFQUkKLS0tIElLbCtQNUppT2NDNjBXMHJGTDd2 - dlA2bzBzTE9RZEdpSmIvTEtzWmtSNFEKoh0Ro4Bm3Cx+6fmhxuLHl4kJ3hVMnC7r - 2ZxZIcDYxvfJa4HNUPPhgvW07GPxcOsFpVY3Rk2eprLIIo/jVGEkwA== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5TnBUUnJnTUsza0NEVXMw + SUZVRExtdFF6bjlQczN1eXF5RzQwZ2lwM0J3Ck1qOWE0cEZGdEpKOTAxZ3MxeWpz + UStrWUhVSFEzRWRrcFJtTFRyYmcra28KLS0tIHdrcEZ5a2xKRE1SZWhrL1c5c0Nk + TURid1M2ckV0RUZrM3lHNmxnZnNDcDAKewPFv461u2mJe9VzwApHCQWx7TlorYcE + 5ORGnz1BvwK6qudR5rLiK+NyQKSUrxjm3QTUb/6IONzlmdu+SfletQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-03-31T14:00:12Z" - mac: ENC[AES256_GCM,data:VaeS7DrpBcfbRY7waA6pJMq+sARW1qteqJyQvvWf2OsMenii+pZvDkxqeXkccDSnuPBKQskOx1lZRWTBTyUWG5elAo4BhGh2+nok5M/vixGnWCNZwuFrZ9y9wJ22tORPbueHSxOUR1Gs1DktlvEtpaX2/rWQfnMNU00dwnEh8EA=,iv:Qf32meXfuOs9KtQeuCp9KGfHI4HTJrxYszBIMgDGcHY=,tag:LJtSL/uIIuDVB8M/0uDhOg==,type:str] + lastmodified: "2025-04-09T17:03:24Z" + mac: ENC[AES256_GCM,data:jFEa7eeL+cGwDO1BPjbfYfbpZ9mL5cyIlTrUduf0abMyVQQYTG8xU5pSWWfGe5+jeggHRL0Ji22fAP2yVvCKmHB2QBcuzQykp4q68J389Wj9jlITwBRiVrBg9/iRmuJl2K4bJJpzDm4llAP+AYiTrULnSyst+vrRvSsv3x58k5o=,iv:N6Wx5xc8NRg4/0hiOSH7CZf/oO2nsq/MFkQxFW5IEF0=,tag:ss+PZCGmzZ8ht7SwDtgHbg==,type:str] pgp: [] - encrypted_regex: ^(adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ + encrypted_regex: ^(root_password|pgdb_password|pgdb_remote_url|hmac_secret_key|adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ version: 3.9.1 --- apiVersion: v1 stringData: - password: ENC[AES256_GCM,data:0OI6Avd7zUJLUF7pFWOUEalPFJI5/29PKZjdUyKJYuAbWy8bIk4Qt9/u34k8J/lzd+pM2QOZWs/FBfR+ppYn+w==,iv:6jPq3BLZNEkf/miCk2A6GFHY+X+UozgyV7m3gy8+Gpw=,tag:nu3kRSomYpSps5tq7qPrnw==,type:str] + password: ENC[AES256_GCM,data:QpHthgwtTMMKgsD0EYX8qpyaHpTckNJMGTVJCZwls62sR6dFhqgZQeDVTAePdOswm30iSSRaIYR9xi52vfbByg==,iv:w9Yc7l9df3spVBUj6X1vimiPLB/U1Urffwg+/arQ6ko=,tag:CSvX1ORwGUIR9y5QSA6I0w==,type:str] kind: Secret metadata: name: mariadb-bugzilla @@ -70,14 +70,42 @@ sops: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGMklRb2pBRk13TWQ0OGgy - RGF0eWZEYko4eTcxUkhqRjQ4eXRGaE9kcEVBClU5eDFLV1UrbzdJVFBSQ0NIaG5u - ekpQSllYQXdIclJPeFpkb1BCWUtFQUkKLS0tIElLbCtQNUppT2NDNjBXMHJGTDd2 - dlA2bzBzTE9RZEdpSmIvTEtzWmtSNFEKoh0Ro4Bm3Cx+6fmhxuLHl4kJ3hVMnC7r - 2ZxZIcDYxvfJa4HNUPPhgvW07GPxcOsFpVY3Rk2eprLIIo/jVGEkwA== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5TnBUUnJnTUsza0NEVXMw + SUZVRExtdFF6bjlQczN1eXF5RzQwZ2lwM0J3Ck1qOWE0cEZGdEpKOTAxZ3MxeWpz + UStrWUhVSFEzRWRrcFJtTFRyYmcra28KLS0tIHdrcEZ5a2xKRE1SZWhrL1c5c0Nk + TURid1M2ckV0RUZrM3lHNmxnZnNDcDAKewPFv461u2mJe9VzwApHCQWx7TlorYcE + 5ORGnz1BvwK6qudR5rLiK+NyQKSUrxjm3QTUb/6IONzlmdu+SfletQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-03-31T14:00:12Z" - mac: ENC[AES256_GCM,data:VaeS7DrpBcfbRY7waA6pJMq+sARW1qteqJyQvvWf2OsMenii+pZvDkxqeXkccDSnuPBKQskOx1lZRWTBTyUWG5elAo4BhGh2+nok5M/vixGnWCNZwuFrZ9y9wJ22tORPbueHSxOUR1Gs1DktlvEtpaX2/rWQfnMNU00dwnEh8EA=,iv:Qf32meXfuOs9KtQeuCp9KGfHI4HTJrxYszBIMgDGcHY=,tag:LJtSL/uIIuDVB8M/0uDhOg==,type:str] + lastmodified: "2025-04-09T17:03:24Z" + mac: ENC[AES256_GCM,data:jFEa7eeL+cGwDO1BPjbfYfbpZ9mL5cyIlTrUduf0abMyVQQYTG8xU5pSWWfGe5+jeggHRL0Ji22fAP2yVvCKmHB2QBcuzQykp4q68J389Wj9jlITwBRiVrBg9/iRmuJl2K4bJJpzDm4llAP+AYiTrULnSyst+vrRvSsv3x58k5o=,iv:N6Wx5xc8NRg4/0hiOSH7CZf/oO2nsq/MFkQxFW5IEF0=,tag:ss+PZCGmzZ8ht7SwDtgHbg==,type:str] pgp: [] - encrypted_regex: ^(adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ + encrypted_regex: ^(root_password|pgdb_password|pgdb_remote_url|hmac_secret_key|adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ + version: 3.9.1 +--- +apiVersion: v1 +stringData: + password: ENC[AES256_GCM,data:hA2iajmGzfZ2jtDK/g7WaWkFByW9QdbtvwKvOcAIFTxDnZDgR7huxF8ODMKF7TSg3Bgot5g9UmdLNuSwf/WoFA==,iv:i8ixgNWivyLeW3NaXvPapnWIwVM/SvBdWXuWsBIIeJ8=,tag:v4WInC3ZSnsL3xQjkkR7iA==,type:str] +kind: Secret +metadata: + name: mariadb-irc + namespace: mariadb-operator +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5TnBUUnJnTUsza0NEVXMw + SUZVRExtdFF6bjlQczN1eXF5RzQwZ2lwM0J3Ck1qOWE0cEZGdEpKOTAxZ3MxeWpz + UStrWUhVSFEzRWRrcFJtTFRyYmcra28KLS0tIHdrcEZ5a2xKRE1SZWhrL1c5c0Nk + TURid1M2ckV0RUZrM3lHNmxnZnNDcDAKewPFv461u2mJe9VzwApHCQWx7TlorYcE + 5ORGnz1BvwK6qudR5rLiK+NyQKSUrxjm3QTUb/6IONzlmdu+SfletQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-04-09T17:03:24Z" + mac: ENC[AES256_GCM,data:jFEa7eeL+cGwDO1BPjbfYfbpZ9mL5cyIlTrUduf0abMyVQQYTG8xU5pSWWfGe5+jeggHRL0Ji22fAP2yVvCKmHB2QBcuzQykp4q68J389Wj9jlITwBRiVrBg9/iRmuJl2K4bJJpzDm4llAP+AYiTrULnSyst+vrRvSsv3x58k5o=,iv:N6Wx5xc8NRg4/0hiOSH7CZf/oO2nsq/MFkQxFW5IEF0=,tag:ss+PZCGmzZ8ht7SwDtgHbg==,type:str] + pgp: [] + encrypted_regex: ^(root_password|pgdb_password|pgdb_remote_url|hmac_secret_key|adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ version: 3.9.1 diff --git a/apps/base/envoy-gateway/release.yaml b/apps/base/envoy-gateway/release.yaml @@ -454,6 +454,18 @@ spec: certificateRefs: - kind: Secret name: plane.midnightthoughts.space + - name: https-midnightthoughts-irc + protocol: HTTPS + hostname: "irc.midnightthoughts.space" + port: 443 + allowedRoutes: + namespaces: + from: "All" + tls: + mode: Terminate + certificateRefs: + - kind: Secret + name: irc.midnightthoughts.space - name: https-nordgedanken-root protocol: HTTPS hostname: "nordgedanken.dev" @@ -536,6 +548,14 @@ spec: - kind: TCPRoute namespaces: from: All + - name: ircs + protocol: TCP + port: 6697 + allowedRoutes: + kinds: + - kind: TCPRoute + namespaces: + from: All --- apiVersion: gateway.envoyproxy.io/v1alpha1 kind: ClientTrafficPolicy diff --git a/apps/base/gerrit/gerrit_cluster.yaml b/apps/base/gerrit/gerrit_cluster.yaml @@ -38,126 +38,126 @@ spec: gerrits: # A primary Gerrit - metadata: - name: gerrit - labels: - app: gerrit + name: gerrit + labels: + app: gerrit spec: - mode: PRIMARY - serviceAccount: gerrit - replicas: 2 - resources: - requests: - cpu: 1 - memory: 5Gi - limits: - cpu: 1 - memory: 6Gi - service: - type: NodePort - httpPort: 80 - sshPort: 29418 - site: - size: 1Gi - startupProbe: - initialDelaySeconds: 30 - periodSeconds: 10 - timeoutSeconds: 10 - successThreshold: 1 - failureThreshold: 10 - readinessProbe: - initialDelaySeconds: 30 - periodSeconds: 10 - timeoutSeconds: 10 - successThreshold: 1 - failureThreshold: 10 - livenessProbe: - initialDelaySeconds: 120 - periodSeconds: 10 - timeoutSeconds: 10 - successThreshold: 1 - failureThreshold: 3 - plugins: - # This way plugins are installed from the Gerrit-war file - - name: download-commands - - name: delete-project - - name: replication - - name: checks - url: https://gerrit-ci.gerritforge.com/job/plugin-checks-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/checks/checks.jar - sha1: 727c916e7c16ef0e6f2a8b4daec45589003a7906 - - name: oauth - url: https://gerrit-ci.gerritforge.com/job/plugin-oauth-bazel-master-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/oauth/oauth.jar - sha1: 2d516d0d0d64a117b4ef5e7b09c0d19aefc1c6be - - name: branch-network - url: https://gerrit-ci.gerritforge.com/job/plugin-branch-network-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/branch-network/branch-network.jar - sha1: 8238b877c1233708b8b64293dbf3e978e61e2d32 - - name: checks-jenkins - url: https://gerrit-ci.gerritforge.com/job/plugin-checks-jenkins-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/checks-jenkins/checks-jenkins.jar - sha1: f689cbea071af4fd2416abad482b90ea362920c7 - - name: events-log - url: https://gerrit-ci.gerritforge.com/job/plugin-events-log-bazel-master-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/events-log/events-log.jar - sha1: be0b61eaf61b8529b248e829db89b7a732d05afd - #- name: replication-status - # url: https://gerrit-ci.gerritforge.com/job/plugin-replication-status-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/replication-status/replication-status.jar - # sha1: 5eb04d2238ce7d130d8b9cf0cd79f14e68e7ddfd - configFiles: - checks-jenkins.config: |- - [jenkins "main-jenkins"] - url = "https://jenkins.midnightthoughts.space" - # Some configuration options are specific to the k8sgerrit setup. These - # will be set by the Gerrit Operator. - gerrit.config: ENC[AES256_GCM,data:/aXn80PMx2idk3GilYPYDjwMsTSDq84BzZVjrW0WZk/kP4RlrCZ6gEl6bN2n8N6g4E8iPL9Xu6U7utcXdaqu+lreSH7NZkhsQh8C/uPOgS3KHw0d7MNzU5MpVyF3y86qtJD7TXiPXCl/IFv0e9vCjTl9+5q4e14Y07h3c1YvLhi7BXK37IIniplIdADfHLKodEQgJWvkY2fye2EQEqlkSAnCJWk6mZUDS6jE4OzqOqIFsXVx6NIQzQAeXO5kB3BMg5cvFCw+Hp/bFUBvR6eGJddZrIHR+/LpFUcyP+Wi/bau/U8vN5BC5udvbL5GLebUSZazRkkJEZLoefByAcWSK0zd6IqeXw3q7VHPu0w0OgDs1VCqn2bSlH+6mCaFfq+WsTf91thUi/4PMCSiiMRZgeaSD5m7McbeLwH4XtzIZh0xHJDtFW0LUjLGlBirAncaySN4A5VG557MOq6NHj8zlEj741XmCaj0mWKqeZ2zS97B4yG8X50tQSkMwbDTbY+UY9dqdE2ON4D0v3lfNmLvyGQEdTPEmcoFkGTPRPyrwd+Zz2x8MiyH9B2imQ3V2eCRN9qe10DU9tzjwzeM0jHJWCfbqrjNh3e3VjqCY6SIRU9GadVWQxaRuUMvci5TRABFzjwy6da4X0VxKHKYsNiLpvl+tVlp/SrCMxo4FNBpyM7pGEOTZEtz3utgf+a8uJatGoD/Se4kpsuoCZdoPH+9p6Oic2cxOIXfHiSmFAhXfeNJG/PaTtO7YxLBOHJ7Z8SHGq/WT4Y4uEhjt3foaUy+qCGVHm6dYbtFJS7RH9/6ReAW1d2gJhPzYuOI5lUJgKDGIgpFYbrEEyosXUyavDE+G4p41GbvwdyBhbXITkNJwBJe570ZIa87/NkqWiayOJjZP5er2p/xx+8R5O2QiXZrNx+LdxeosG4fYtBk5MpibY+zAb46FptGFBRHsSjcSKEA5meonDhBFWAynuPYvNZC3+qwLVkSQuMLUUuKQWYbilrBgzL6EJdfakPqI1T63OgPusCB5ChTutom7Ok6R7VW64eYdxabE2NXN60ehBmGYmj8mCvsp0x1QBQ6tPbAMc5yAsCDBx742aVaEhVmA631TjJa3RR99jPTCktwyuFlFc8eJWpw3jrKYKNbHjaOSJIny/j/MBYGtMpZY/0mksZBW6YbjiZderrlfXQHx7Le0iBll9HwxSGi96PPjqEXuc0J4VpdLk09OFux45Md58DiX6LioheF0HDGkff1ttEHhR8bC5tnKsurWvuV89wl9LGzoOchsJmWQYlfYiHfAHv4QEnBTnPPl8T+Enud/LT1EvxazskP3jZdDLv+lASzw8jLUQwejqe1TqwDG/QUIvqcRnGJJ8zqIEkcadaE+OgmDZgcTD+JzWOV5ciOk0n+LzdBRs0UNfP2Svvhzr5a73YEncPrrVQoxUfMpvJRW9PHtNI8PJCBDwMV+zHyhC5wBEV9rjt6mCN2LVGamcHDvNQB3BANjvBoxhll2g/U4l5jhl4Da8DgigPE0AkMsf/t2hTIM9P/nTr45jMOxgUR9xR5psuf5qSiiai4ULITwQ4MH3H4dVD5IB26E4t8ZYDNnzoJGjnPSDE9CQHN1qWnf3+GeLyXUMk7xXoDK8w+wdofci5Ae+rw3plVh8qFvaek,iv:QXDR0f5R5qdIrs27dRSJPc0ufd7aKTyKHwR5wa2ftEM=,tag:CdUtfP39GX/wboOxQSOowQ==,type:str] - # Reference by name to the Secret containing secret files to be mounted to - # $SITE/etc - secretRef: gerrit-secure-config + mode: PRIMARY + serviceAccount: gerrit + replicas: 2 + resources: + requests: + cpu: 1 + memory: 5Gi + limits: + cpu: 1 + memory: 6Gi + service: + type: NodePort + httpPort: 80 + sshPort: 29418 + site: + size: 1Gi + startupProbe: + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 10 + successThreshold: 1 + failureThreshold: 10 + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 10 + successThreshold: 1 + failureThreshold: 10 + livenessProbe: + initialDelaySeconds: 120 + periodSeconds: 10 + timeoutSeconds: 10 + successThreshold: 1 + failureThreshold: 3 + plugins: + # This way plugins are installed from the Gerrit-war file + - name: download-commands + - name: delete-project + - name: replication + - name: checks + url: https://gerrit-ci.gerritforge.com/job/plugin-checks-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/checks/checks.jar + sha1: 727c916e7c16ef0e6f2a8b4daec45589003a7906 + - name: oauth + url: https://gerrit-ci.gerritforge.com/job/plugin-oauth-bazel-master-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/oauth/oauth.jar + sha1: 2d516d0d0d64a117b4ef5e7b09c0d19aefc1c6be + - name: branch-network + url: https://gerrit-ci.gerritforge.com/job/plugin-branch-network-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/branch-network/branch-network.jar + sha1: 8238b877c1233708b8b64293dbf3e978e61e2d32 + - name: checks-jenkins + url: https://gerrit-ci.gerritforge.com/job/plugin-checks-jenkins-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/checks-jenkins/checks-jenkins.jar + sha1: f689cbea071af4fd2416abad482b90ea362920c7 + - name: events-log + url: https://gerrit-ci.gerritforge.com/job/plugin-events-log-bazel-master-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/events-log/events-log.jar + sha1: be0b61eaf61b8529b248e829db89b7a732d05afd + #- name: replication-status + # url: https://gerrit-ci.gerritforge.com/job/plugin-replication-status-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/replication-status/replication-status.jar + # sha1: 5eb04d2238ce7d130d8b9cf0cd79f14e68e7ddfd + configFiles: + checks-jenkins.config: |- + [jenkins "main-jenkins"] + url = "https://jenkins.midnightthoughts.space" + # Some configuration options are specific to the k8sgerrit setup. These + # will be set by the Gerrit Operator. + gerrit.config: ENC[AES256_GCM,data:/aXn80PMx2idk3GilYPYDjwMsTSDq84BzZVjrW0WZk/kP4RlrCZ6gEl6bN2n8N6g4E8iPL9Xu6U7utcXdaqu+lreSH7NZkhsQh8C/uPOgS3KHw0d7MNzU5MpVyF3y86qtJD7TXiPXCl/IFv0e9vCjTl9+5q4e14Y07h3c1YvLhi7BXK37IIniplIdADfHLKodEQgJWvkY2fye2EQEqlkSAnCJWk6mZUDS6jE4OzqOqIFsXVx6NIQzQAeXO5kB3BMg5cvFCw+Hp/bFUBvR6eGJddZrIHR+/LpFUcyP+Wi/bau/U8vN5BC5udvbL5GLebUSZazRkkJEZLoefByAcWSK0zd6IqeXw3q7VHPu0w0OgDs1VCqn2bSlH+6mCaFfq+WsTf91thUi/4PMCSiiMRZgeaSD5m7McbeLwH4XtzIZh0xHJDtFW0LUjLGlBirAncaySN4A5VG557MOq6NHj8zlEj741XmCaj0mWKqeZ2zS97B4yG8X50tQSkMwbDTbY+UY9dqdE2ON4D0v3lfNmLvyGQEdTPEmcoFkGTPRPyrwd+Zz2x8MiyH9B2imQ3V2eCRN9qe10DU9tzjwzeM0jHJWCfbqrjNh3e3VjqCY6SIRU9GadVWQxaRuUMvci5TRABFzjwy6da4X0VxKHKYsNiLpvl+tVlp/SrCMxo4FNBpyM7pGEOTZEtz3utgf+a8uJatGoD/Se4kpsuoCZdoPH+9p6Oic2cxOIXfHiSmFAhXfeNJG/PaTtO7YxLBOHJ7Z8SHGq/WT4Y4uEhjt3foaUy+qCGVHm6dYbtFJS7RH9/6ReAW1d2gJhPzYuOI5lUJgKDGIgpFYbrEEyosXUyavDE+G4p41GbvwdyBhbXITkNJwBJe570ZIa87/NkqWiayOJjZP5er2p/xx+8R5O2QiXZrNx+LdxeosG4fYtBk5MpibY+zAb46FptGFBRHsSjcSKEA5meonDhBFWAynuPYvNZC3+qwLVkSQuMLUUuKQWYbilrBgzL6EJdfakPqI1T63OgPusCB5ChTutom7Ok6R7VW64eYdxabE2NXN60ehBmGYmj8mCvsp0x1QBQ6tPbAMc5yAsCDBx742aVaEhVmA631TjJa3RR99jPTCktwyuFlFc8eJWpw3jrKYKNbHjaOSJIny/j/MBYGtMpZY/0mksZBW6YbjiZderrlfXQHx7Le0iBll9HwxSGi96PPjqEXuc0J4VpdLk09OFux45Md58DiX6LioheF0HDGkff1ttEHhR8bC5tnKsurWvuV89wl9LGzoOchsJmWQYlfYiHfAHv4QEnBTnPPl8T+Enud/LT1EvxazskP3jZdDLv+lASzw8jLUQwejqe1TqwDG/QUIvqcRnGJJ8zqIEkcadaE+OgmDZgcTD+JzWOV5ciOk0n+LzdBRs0UNfP2Svvhzr5a73YEncPrrVQoxUfMpvJRW9PHtNI8PJCBDwMV+zHyhC5wBEV9rjt6mCN2LVGamcHDvNQB3BANjvBoxhll2g/U4l5jhl4Da8DgigPE0AkMsf/t2hTIM9P/nTr45jMOxgUR9xR5psuf5qSiiai4ULITwQ4MH3H4dVD5IB26E4t8ZYDNnzoJGjnPSDE9CQHN1qWnf3+GeLyXUMk7xXoDK8w+wdofci5Ae+rw3plVh8qFvaek,iv:QXDR0f5R5qdIrs27dRSJPc0ufd7aKTyKHwR5wa2ftEM=,tag:CdUtfP39GX/wboOxQSOowQ==,type:str] + # Reference by name to the Secret containing secret files to be mounted to + # $SITE/etc + secretRef: gerrit-secure-config # Gerrit Replica - metadata: - name: gerrit-replica - labels: - app: gerrit-replica + name: gerrit-replica + labels: + app: gerrit-replica spec: - mode: REPLICA - replicas: 2 - resources: - requests: - cpu: 1 - memory: 5Gi - limits: - cpu: 1 - memory: 6Gi - service: - type: NodePort - httpPort: 80 - sshPort: 29418 - site: - size: 1Gi - plugins: - - name: oauth - url: https://gerrit-ci.gerritforge.com/job/plugin-oauth-bazel-master-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/oauth/oauth.jar - sha1: 2d516d0d0d64a117b4ef5e7b09c0d19aefc1c6be - startupProbe: - initialDelaySeconds: 30 - periodSeconds: 10 - timeoutSeconds: 10 - successThreshold: 1 - failureThreshold: 10 - readinessProbe: - initialDelaySeconds: 30 - periodSeconds: 10 - timeoutSeconds: 10 - successThreshold: 1 - failureThreshold: 10 - livenessProbe: - initialDelaySeconds: 120 - periodSeconds: 10 - timeoutSeconds: 10 - successThreshold: 1 - failureThreshold: 3 - configFiles: - gerrit.config: ENC[AES256_GCM,data:ONWBaGukHdMcTz50F1R5MjIWWHg1Omqfaae5PvPAxCBRaODGRVdj9WzMR74kZchbAVn7GrnZ+QCrjE2sq2JpCdSbdd6GV4quubtYYK8Ot2EDiJwZvSLVSgXXECYLOAgOcKhPhxopvyhilAWJ7w06TVZ08p6AwqF5w7F8sO+b2FJsq7jJfl12b0xcgFmOCbyRe9e4kidParaw232tne8m6QmBl7pMStXJ6JHtaek8NUymn6b9htad7aJW9IdDdx5j+35oPDIbHla/4lIZ9fAJQlxsSKcXhp22nUXBpfwn0cuiq+38u+HAMIo/bmPSJ2eWdfDyl84VeucrlYNZdVJRv6JRsU6cQ2+fTfjAgeLCOdDXT58nCZFEcH5xWboNkqSfYRA8Oql9xOuOLgSxZQ75jJrFZZzwU9KSD5XwuaD4R6F1Ts3jW2AuqrVM5s7vAJqpi81GzS9ql/cHl7ySoAACGcbXJcPfRR/Kwm/4GimB+ewCOZNxhqSivdbaxMEfe/oRgoIrS9iTobHWQKKWUDzWbQT9B6Bocnud1YnwdytcfWJ5VPVj008f07uSb5R1XuYAtHAhjO28Knv/yFWt6qq41Gz6gOsTVEk5Sbk8WLZbmYbM4uNGZQqxIx6Oq7GbrYNlPN2gEuWnnnbiDroZjYMa1kxHwFd2FmxjjfXZTd8TLKb8vbOFbUPNkZK0FpzDI7qwCFQxOZ3F9iIuJPv47nKG0jQ/36/R7ec/1zC/RMTBQZBsyRZeglrUorMSlNDmvSpzbekkWDXQl2Y2WkUIbJ+AVCdrhGRJtunIx67kkaTismOxEAXCHa2mO3BGnflj2cP3rTcGAB97b5FsDHqEoph3gSMDwDFDNLPjECKGCgvq3Zdg6SDT6XXE0fLeL8Ap3DACE8Cz8mI3UUQbftgdZK4P6S5YvjBMCPRcmrozdPPiwjhjvdKEyq1w/m1DI4pdzWXMkCCaBsnsW059aDPP3y+0Uw/25bHu73HD7mQu1VdaEQTx7pjy2VHCb1cTw2maOy6vErARiA0T0dCaL1c+Ww54H2SI0Y6zQvG6Ms6A2Cqn3PwBZOPiz6BOy82yAH8CnQj36PSXMuYfmPB3JJDxyE5LURvs9p6XfEsS+oZtiE1Iu7QjPHUGgwhqOlxheI+C9ne92r7XbdxAJH58IT7BZPiJlLVjtyP89qm4BN5XBktTbmchRBxsNmgzHLC0bgRlLkC8kJKkWeEsmB4DYWj6im0P4Q0uKobB6VyAk5ZCggl6X8IqfGjL0qWylxA2rfXdRWvlVZO+mNUzABJq10T2dkjxgP6wmfnQE4ZpQeq2aF43B/0DyYFVmw+v0Z7Gwa58ZK1BtUWDDRtQwREAwB/2/VBza1MP6J6CI0xJjxhzmWhuZQMJshidCl9KMkZCYhVvCv/tzL/QDeMcrvwgYZui7wIjDhKhk8g20qOUjKyGF1OPGbY3So3WGthCUMOBV0exHB22QM1qEhsPHc/lRKYW7j34C86r4sE3eXTj36QqCz2K7yRubuNbsYFMCXPCDFyTRRKB8sIAfT+Cif6esdmj08Wu/hvTJusaagTzo8odalav04xrKfprhFMs1TVlgzZ6cTAcoejvAGTWHe1YId5aTx7E6XOAbeCyIcKASsR4v+Lh0gDPWDejNLLUcVW7kqu3,iv:1PLzFCQ8LpS0IR7e3aesXvl/IvOExkvuhM7SxlB3lcg=,tag:+fLag80GzG/akf4Fo8U3TQ==,type:str] - healthcheck.config: |- - [healthcheck "auth"] - enabled = false - secretRef: gerrit-secure-config + mode: REPLICA + replicas: 2 + resources: + requests: + cpu: 1 + memory: 5Gi + limits: + cpu: 1 + memory: 6Gi + service: + type: NodePort + httpPort: 80 + sshPort: 29418 + site: + size: 1Gi + plugins: + - name: oauth + url: https://gerrit-ci.gerritforge.com/job/plugin-oauth-bazel-master-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/oauth/oauth.jar + sha1: 2d516d0d0d64a117b4ef5e7b09c0d19aefc1c6be + startupProbe: + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 10 + successThreshold: 1 + failureThreshold: 10 + readinessProbe: + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 10 + successThreshold: 1 + failureThreshold: 10 + livenessProbe: + initialDelaySeconds: 120 + periodSeconds: 10 + timeoutSeconds: 10 + successThreshold: 1 + failureThreshold: 3 + configFiles: + gerrit.config: ENC[AES256_GCM,data:ONWBaGukHdMcTz50F1R5MjIWWHg1Omqfaae5PvPAxCBRaODGRVdj9WzMR74kZchbAVn7GrnZ+QCrjE2sq2JpCdSbdd6GV4quubtYYK8Ot2EDiJwZvSLVSgXXECYLOAgOcKhPhxopvyhilAWJ7w06TVZ08p6AwqF5w7F8sO+b2FJsq7jJfl12b0xcgFmOCbyRe9e4kidParaw232tne8m6QmBl7pMStXJ6JHtaek8NUymn6b9htad7aJW9IdDdx5j+35oPDIbHla/4lIZ9fAJQlxsSKcXhp22nUXBpfwn0cuiq+38u+HAMIo/bmPSJ2eWdfDyl84VeucrlYNZdVJRv6JRsU6cQ2+fTfjAgeLCOdDXT58nCZFEcH5xWboNkqSfYRA8Oql9xOuOLgSxZQ75jJrFZZzwU9KSD5XwuaD4R6F1Ts3jW2AuqrVM5s7vAJqpi81GzS9ql/cHl7ySoAACGcbXJcPfRR/Kwm/4GimB+ewCOZNxhqSivdbaxMEfe/oRgoIrS9iTobHWQKKWUDzWbQT9B6Bocnud1YnwdytcfWJ5VPVj008f07uSb5R1XuYAtHAhjO28Knv/yFWt6qq41Gz6gOsTVEk5Sbk8WLZbmYbM4uNGZQqxIx6Oq7GbrYNlPN2gEuWnnnbiDroZjYMa1kxHwFd2FmxjjfXZTd8TLKb8vbOFbUPNkZK0FpzDI7qwCFQxOZ3F9iIuJPv47nKG0jQ/36/R7ec/1zC/RMTBQZBsyRZeglrUorMSlNDmvSpzbekkWDXQl2Y2WkUIbJ+AVCdrhGRJtunIx67kkaTismOxEAXCHa2mO3BGnflj2cP3rTcGAB97b5FsDHqEoph3gSMDwDFDNLPjECKGCgvq3Zdg6SDT6XXE0fLeL8Ap3DACE8Cz8mI3UUQbftgdZK4P6S5YvjBMCPRcmrozdPPiwjhjvdKEyq1w/m1DI4pdzWXMkCCaBsnsW059aDPP3y+0Uw/25bHu73HD7mQu1VdaEQTx7pjy2VHCb1cTw2maOy6vErARiA0T0dCaL1c+Ww54H2SI0Y6zQvG6Ms6A2Cqn3PwBZOPiz6BOy82yAH8CnQj36PSXMuYfmPB3JJDxyE5LURvs9p6XfEsS+oZtiE1Iu7QjPHUGgwhqOlxheI+C9ne92r7XbdxAJH58IT7BZPiJlLVjtyP89qm4BN5XBktTbmchRBxsNmgzHLC0bgRlLkC8kJKkWeEsmB4DYWj6im0P4Q0uKobB6VyAk5ZCggl6X8IqfGjL0qWylxA2rfXdRWvlVZO+mNUzABJq10T2dkjxgP6wmfnQE4ZpQeq2aF43B/0DyYFVmw+v0Z7Gwa58ZK1BtUWDDRtQwREAwB/2/VBza1MP6J6CI0xJjxhzmWhuZQMJshidCl9KMkZCYhVvCv/tzL/QDeMcrvwgYZui7wIjDhKhk8g20qOUjKyGF1OPGbY3So3WGthCUMOBV0exHB22QM1qEhsPHc/lRKYW7j34C86r4sE3eXTj36QqCz2K7yRubuNbsYFMCXPCDFyTRRKB8sIAfT+Cif6esdmj08Wu/hvTJusaagTzo8odalav04xrKfprhFMs1TVlgzZ6cTAcoejvAGTWHe1YId5aTx7E6XOAbeCyIcKASsR4v+Lh0gDPWDejNLLUcVW7kqu3,iv:1PLzFCQ8LpS0IR7e3aesXvl/IvOExkvuhM7SxlB3lcg=,tag:+fLag80GzG/akf4Fo8U3TQ==,type:str] + healthcheck.config: |- + [healthcheck "auth"] + enabled = false + secretRef: gerrit-secure-config sops: kms: [] gcp_kms: [] @@ -166,13 +166,13 @@ sops: age: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvelB4eDFRWHRKOExTbWMy - eG8zdXpiMVU4UDB4OHROeXpTNXhWdEpVUFV3CkFMTURNNm9vdEZZS2MzSURFSit3 - b29iRHRYd2NnVU05cDdsajcwNmFqTFkKLS0tIE9CalFEWkcwSHRpNm1sVUhEVFhM - QjU5alNnRUE4aTNXRkRTd3lNbW52bTgKekBBurjQx7iKWOhWDV+TYUH+L5tjSM7r - KcakagouQFRGd3Ymchl3yOY8O3OBN5gd1wCGwUYruphgfG5/sDm7Cw== - -----END AGE ENCRYPTED FILE----- + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvelB4eDFRWHRKOExTbWMy + eG8zdXpiMVU4UDB4OHROeXpTNXhWdEpVUFV3CkFMTURNNm9vdEZZS2MzSURFSit3 + b29iRHRYd2NnVU05cDdsajcwNmFqTFkKLS0tIE9CalFEWkcwSHRpNm1sVUhEVFhM + QjU5alNnRUE4aTNXRkRTd3lNbW52bTgKekBBurjQx7iKWOhWDV+TYUH+L5tjSM7r + KcakagouQFRGd3Ymchl3yOY8O3OBN5gd1wCGwUYruphgfG5/sDm7Cw== + -----END AGE ENCRYPTED FILE----- lastmodified: "2024-12-22T02:54:18Z" mac: ENC[AES256_GCM,data:mXJxz/vHrQQYkuanhK89xF40WpMGhoPdLaXJVZxEXnH8cch/IIPF9M2ZDKaWL5MbMuUOYgLmfHR5h838tNlS5lzhPfoLbjf13+VoaGfs3qKVEITrgJrJmXLIWm1KufW9r21lfbAgJgJCVfIynTc5wp1eI4lOB28fbwlfEeK0YAA=,iv:O7yc3i5VrhBbAKJKDvear2l8ZmmBpmODg5Ua+BYYEXg=,tag:bXT+G1RCi3mmNBpjRbs4YA==,type:str] pgp: [] diff --git a/apps/base/irc/files/ircd.motd b/apps/base/irc/files/ircd.motd @@ -0,0 +1,14 @@ + _ _ __ + _| || |_ | | Welcome to #!. This network has three rules: +|_ __ _|| | + _| || |_ | | 1. When people need help, teach. Don't do it for them +|_ __ _||__| 2. Don't use our resources for closed source projects + |_||_| (__) 3. Be excellent to each other + +----------------------------------------------------------------------------- + Server: irc.midnightthoughts.space - Port: 6697 - SSL: Required +----------------------------------------------------------------------------- + +Please register your nick: /msg nickserv register somepassword some@email.com + +----------------------------------------------------------------------------- diff --git a/apps/base/irc/files/ircd.yaml b/apps/base/irc/files/ircd.yaml @@ -0,0 +1,648 @@ +# ergo IRCd config + +# network configuration +network: + # name of the network + name: midnightthoughts.space +# server configuration +server: + # server name + name: irc.midnightthoughts.space + # addresses to listen on + listeners: + # The standard plaintext port for IRC is 6667. This will listen on all interfaces: + ":6667": + sts-only: true + # Allowing plaintext over the public Internet poses security and privacy issues, + # so if possible, we recommend that you comment out the above line and replace + # it with these two, which listen only on local interfaces: + #"127.0.0.1:6667": # (loopback ipv4, localhost-only) + #"[::1]:6667": # (loopback ipv6, localhost-only) + # Alternately, if you have a TLS certificate issued by a recognized CA, + # you can configure port 6667 as an STS-only listener that only serves + # "redirects" to the TLS port, but doesn't allow chat. See the manual + # for details. + + # The standard SSL/TLS port for IRC is 6697. This will listen on all interfaces: + ":6697": + proxy: true + # No tls here as we have a reverse proxy + + # Add another SSL/TLS port for internal traffic on port 16697. + ":16697": + tls: + key: /ircd/tls/tls.key + cert: /ircd/tls/tls.crt + proxy: true + # 'proxy' is false here because internal traffic won't be routed through + # the Kubernetes LoadBalancer. Relevant links: + # https://github.com/kubernetes/kubernetes/issues/66607 + # https://github.com/kubernetes/kubernetes/pull/92312 + # Native websockets over TLS: + ":443": + websocket: true + proxy: true + # No tls here as we have a reverse proxy + # Example of a Unix domain socket for proxying: + # "/tmp/ergo_sock": + # Example of a Tor listener: any connection that comes in on this listener will + # be considered a Tor connection. It is strongly recommended that this listener + # *not* be on a public interface --- it should be on 127.0.0.0/8 or unix domain: + # "/hidden_service_sockets/ergo_tor_sock": + # tor: true + + # sets the permissions for Unix listen sockets. on a typical Linux system, + # the default is 0775 or 0755, which prevents other users/groups from connecting + # to the socket. With 0777, it behaves like a normal TCP socket + # where anyone can connect. + unix-bind-mode: 0777 + # configure the behavior of Tor listeners (ignored if you didn't enable any): + tor-listeners: + # if this is true, connections from Tor must authenticate with SASL + require-sasl: false + # what hostname should be displayed for Tor connections? + vhost: "tor-network.onion" + # allow at most this many connections at once (0 for no limit): + max-connections: 64 + # connection throttling (limit how many connection attempts are allowed at once): + throttle-duration: 10m + # set to 0 to disable throttling: + max-connections-per-duration: 64 + # strict transport security, to get clients to automagically use TLS + sts: + # whether to advertise STS + # + # to stop advertising STS, leave this enabled and set 'duration' below to "0". this will + # advertise to connecting users that the STS policy they have saved is no longer valid + enabled: true + # how long clients should be forced to use TLS for. + # setting this to a too-long time will mean bad things if you later remove your TLS. + # the default duration below is 1 month, 2 days and 5 minutes. + duration: 1mo2d5m + # tls port - you should be listening on this port above + port: 6697 + # should clients include this STS policy when they ship their inbuilt preload lists? + preload: true + websockets: + # Restrict the origin of WebSocket connections by matching the "Origin" HTTP + # header. This setting makes ergo reject every WebSocket connection, + # except when it originates from one of the hosts in this list. Use this to + # prevent malicious websites from making their visitors connect to ergo + # without their knowledge. An empty list means that there are no restrictions. + allowed-origins: + - "https://midnightthoughts.space" + - "https://*.midnightthoughts.space" + # casemapping controls what kinds of strings are permitted as identifiers (nicknames, + # channel names, account names, etc.), and how they are normalized for case. + # with the recommended default of 'precis', utf-8 identifiers that are "sane" + # (according to RFC 8265) are allowed, and the server additionally tries to protect + # against confusable characters ("homoglyph attacks"). + # the other options are 'ascii' (traditional ASCII-only identifiers), and 'permissive', + # which allows identifiers to contain unusual characters like emoji, but makes users + # vulnerable to homoglyph attacks. unless you're really confident in your decision, + # we recommend leaving this value at its default (changing it once the network is + # already up and running is problematic). + casemapping: "precis" + # enforce-utf8 controls whether the server allows non-UTF8 bytes in messages + # (as in traditional IRC) or preemptively discards non-UTF8 messages (since + # they cannot be relayed to websocket clients). + enforce-utf8: true + # whether to look up user hostnames with reverse DNS + # (to suppress this for privacy purposes, use the ip-cloaking options below) + lookup-hostnames: false + # whether to confirm hostname lookups using "forward-confirmed reverse DNS", i.e., for + # any hostname returned from reverse DNS, resolve it back to an IP address and reject it + # unless it matches the connecting IP + forward-confirm-hostnames: true + # use ident protocol to get usernames + check-ident: false + # ignore the supplied user/ident string from the USER command; always set the value to + # `~user` (literally) instead. this can potentially reduce confusion and simplify bans. + coerce-ident: "~u" + # password to login to the server + # generated using "ergo genpasswd" + #password: "" + + # motd filename + # if you change the motd, you should move it to ircd.motd + motd: ircd.motd + # motd formatting codes + # if this is true, the motd is escaped using formatting codes like $c, $b, and $i + motd-formatting: true + # relaying using the RELAYMSG command + relaymsg: + # is relaymsg enabled at all? + enabled: true + # which character(s) are reserved for relayed nicks? + separators: "/" + # can channel operators use RELAYMSG in their channels? + # our implementation of RELAYMSG makes it safe for chanops to use without the + # possibility of real users being silently spoofed + available-to-chanops: true + # addresses/CIDRs the PROXY command can be used from + # this should be restricted to 127.0.0.1/8 and ::1/128 (unless you have a good reason) + # you should also add these addresses to the connection limits and throttling exemption lists + proxy-allowed-from: + - 0.0.0.0/0 + # controls the use of the WEBIRC command (by IRC<->web interfaces, bouncers and similar) + # webirc: + # # one webirc block -- should correspond to one set of gateways + # - + # # SHA-256 fingerprint of the TLS certificate the gateway must use to connect + # # (comment this out to use passwords only) + # fingerprint: "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789" + + # # password the gateway uses to connect, made with ergo genpasswd + # password: "$2a$04$sLEFDpIOyUp55e6gTMKbOeroT6tMXTjPFvA0eGvwvImVR9pkwv7ee" + + # # addresses/CIDRs that can use this webirc command + # # you should also add these addresses to the connection limits and throttling exemption lists + # hosts: + # # - localhost + # # - "192.168.1.1" + # # - "192.168.10.1/24" + + # allow use of the RESUME extension over plaintext connections: + # do not enable this unless the ircd is only accessible over internal networks + allow-plaintext-resume: false + # maximum length of clients' sendQ in bytes + # this should be big enough to hold bursts of channel/direct messages + max-sendq: 96k + # compatibility with legacy clients + compatibility: + # many clients require that the final parameter of certain messages be an + # RFC1459 trailing parameter, i.e., prefixed with :, whether or not this is + # actually required. this forces Oragono to send those parameters + # as trailings. this is recommended unless you're testing clients for conformance; + # defaults to true when unset for that reason. + force-trailing: true + # some clients (ZNC 1.6.x and lower, Pidgin 2.12 and lower) do not + # respond correctly to SASL messages with the server name as a prefix: + # https://github.com/znc/znc/issues/1212 + # this works around that bug, allowing them to use SASL. + send-unprefixed-sasl: true + # IP-based DoS protection + ip-limits: + # whether to limit the total number of concurrent connections per IP/CIDR + count: true + # maximum concurrent connections per IP/CIDR + max-concurrent-connections: 64 + # whether to restrict the rate of new connections per IP/CIDR + throttle: true + # how long to keep track of connections for + window: 10m + # maximum number of new connections per IP/CIDR within the given duration + max-connections-per-window: 64 + # how long to ban offenders for. after banning them, the number of connections is + # reset, which lets you use /UNDLINE to unban people + throttle-ban-duration: 10m + # how wide the CIDR should be for IPv4 (a /32 is a fully specified IPv4 address) + cidr-len-ipv4: 32 + # how wide the CIDR should be for IPv6 (a /64 is the typical prefix assigned + # by an ISP to an individual customer for their LAN) + cidr-len-ipv6: 64 + # IPs/networks which are exempted from connection limits + exempted: + - "localhost" + - "10.0.0.0/8" + # custom connection limits for certain IPs/networks. note that CIDR + # widths defined here override the default CIDR width --- the limit + # will apply to the entire CIDR no matter how large or small it is + custom-limits: + # "8.8.0.0/16": + # max-concurrent-connections: 128 + # max-connections-per-window: 1024 + # IP cloaking hides users' IP addresses from other users and from channel admins + # (but not from server admins), while still allowing channel admins to ban + # offending IP addresses or networks. In place of hostnames derived from reverse + # DNS, users see fake domain names like pwbs2ui4377257x8.irc. These names are + # generated deterministically from the underlying IP address, but if the underlying + # IP is not already known, it is infeasible to recover it from the cloaked name. + ip-cloaking: + # whether to enable IP cloaking + enabled: true + enabled-for-always-on: true + # fake TLD at the end of the hostname, e.g., pwbs2ui4377257x8.irc + netname: "irc" + # the cloaked hostname is derived only from the CIDR (most significant bits + # of the IP address), up to a configurable number of bits. this is the + # granularity at which bans will take effect for IPv4. Note that changing + # this value will invalidate any stored bans. + cidr-len-ipv4: 32 + # analogous granularity for IPv6 + cidr-len-ipv6: 64 + # number of bits of hash output to include in the cloaked hostname. + # more bits means less likelihood of distinct IPs colliding, + # at the cost of a longer cloaked hostname. if this value is set to 0, + # all users will receive simply `netname` as their cloaked hostname. + num-bits: 64 +# account options +accounts: + # is account authentication enabled, i.e., can users log into existing accounts? + authentication-enabled: true + # account registration + registration: + # can users register new accounts for themselves? if this is false, operators with + # the `accreg` capability can still create accounts with `/NICKSERV SAREGISTER` + enabled: true + # can users use the REGISTER command to register before fully connecting? + allow-before-connect: true + # this is the bcrypt cost we'll use for account passwords + bcrypt-cost: 9 + # length of time a user has to verify their account before it can be re-registered + verify-timeout: "32h" + # callbacks to allow + enabled-callbacks: + - none # no verification needed, will instantly register successfully + # example configuration for sending verification emails via a local mail relay + # callbacks: + # mailto: + # server: localhost + # port: 25 + # tls: + # enabled: false + # username: "" + # password: "" + # sender: "admin@my.network" + # throttle account login attempts (to prevent either password guessing, or DoS + # attacks on the server aimed at forcing repeated expensive bcrypt computations) + login-throttling: + enabled: true + # window + duration: 1m + # number of attempts allowed within the window + max-attempts: 3 + # some clients (notably Pidgin and Hexchat) offer only a single password field, + # which makes it impossible to specify a separate server password (for the PASS + # command) and SASL password. if this option is set to true, a client that + # successfully authenticates with SASL will not be required to send + # PASS as well, so it can be configured to authenticate with SASL only. + skip-server-password: false + # enable login to accounts via the PASS command, e.g., PASS account:password + # this is sometimes useful for compatibility with old clients that don't support SASL + login-via-pass-command: true + # require-sasl controls whether clients are required to have accounts + # (and sign into them using SASL) to connect to the server + require-sasl: + # if this is enabled, all clients must authenticate with SASL while connecting + enabled: false + # IPs/CIDRs which are exempted from the account requirement + exempted: + - "localhost" + # - '10.10.0.0/16' + # nick-reservation controls how, and whether, nicknames are linked to accounts + nick-reservation: + # is there any enforcement of reserved nicknames? + enabled: true + # how many nicknames, in addition to the account name, can be reserved? + additional-nick-limit: 2 + # method describes how nickname reservation is handled + # timeout: let the user change to the registered nickname, give them X seconds + # to login and then rename them if they haven't done so + # strict: don't let the user change to the registered nickname unless they're + # already logged-in using SASL or NickServ + # optional: no enforcement by default, but allow users to opt in to + # the enforcement level of their choice + # + # 'optional' matches the behavior of other NickServs, but 'strict' is + # preferable if all your users can enable SASL. + method: strict + # allow users to set their own nickname enforcement status, e.g., + # to opt in to strict enforcement + allow-custom-enforcement: false + # rename-timeout - this is how long users have 'til they're renamed + rename-timeout: 30s + # rename-prefix - this is the prefix to use when renaming clients (e.g. Guest-AB54U31) + rename-prefix: Guest- + # when enabled, forces users logged into an account to use the + # account name as their nickname. when combined with strict nickname + # enforcement, this lets users treat nicknames and account names + # as equivalent for the purpose of ban/invite/exception lists. + force-nick-equals-account: true + # bouncer controls whether ergo can act as a bouncer, i.e., allowing + # multiple connections to attach to the same client/nickname identity + multiclient: + # when disabled, each connection must use a separate nickname (as is the + # typical behavior of IRC servers). when enabled, a new connection that + # has authenticated with SASL can associate itself with an existing + # client + enabled: true + # clients can opt in to bouncer functionality using the cap system, or + # via nickserv. if this is enabled, then they have to opt out instead + allowed-by-default: true + # whether to allow clients that remain on the server even + # when they have no active connections. The possible values are: + # "disabled", "opt-in", "opt-out", or "mandatory". + always-on: "opt-in" + # whether to mark always-on clients away when they have no active connections: + auto-away: "opt-in" + # vhosts controls the assignment of vhosts (strings displayed in place of the user's + # hostname/IP) by the HostServ service + vhosts: + # are vhosts enabled at all? + enabled: true + # maximum length of a vhost + max-length: 64 + # regexp for testing the validity of a vhost + # (make sure any changes you make here are RFC-compliant) + valid-regexp: '^[0-9A-Za-z.\-_/]+$' + # options controlling users requesting vhosts: + user-requests: + # can users request vhosts at all? if this is false, operators with the + # 'vhosts' capability can still assign vhosts manually + enabled: false + # if uncommented, all new vhost requests will be dumped into the given + # channel, so opers can review them as they are sent in. ensure that you + # have registered and restricted the channel appropriately before you + # uncomment this. + #channel: "#vhosts" + + # after a user's vhost has been approved or rejected, they need to wait + # this long (starting from the time of their original request) + # before they can request a new one. + cooldown: 168h +# channel options +channels: + # modes that are set when new channels are created + # +n is no-external-messages and +t is op-only-topic + # see /QUOTE HELP cmodes for more channel modes + default-modes: +nt + # how many channels can a client be in at once? + max-channels-per-client: 100 + # if this is true, new channels can only be created by operators with the + # `chanreg` operator capability + operator-only-creation: false + # channel registration - requires an account + registration: + # can users register new channels? + enabled: true + # how many channels can each account register? + max-channels-per-account: 15 + # as a crude countermeasure against spambots, anonymous connections younger + # than this value will get an empty response to /LIST (a time period of 0 disables) + list-delay: 0s + # INVITE to an invite-only channel expires after this amount of time + # (0 or omit for no expiration): + invite-expiration: 24h +# operator classes +oper-classes: + # local operator + "local-oper": + # title shown in WHOIS + title: Local Operator + # capability names + capabilities: + - "kill" + - "ban" + - "nofakelag" + - "relaymsg" + # server admin + "server-admin": + # title shown in WHOIS + title: Server Admin + # oper class this extends from + extends: "local-oper" + # capability names + capabilities: + - "rehash" + - "die" + - "accreg" + - "sajoin" + - "samode" + - "vhosts" + - "chanreg" + - "history" + - "defcon" +# ircd operators +opers: + mtrnord: + class: "server-admin" + whois-line: "is a person" + vhost: "staff.midnightthoughts.space" + modes: +is acdjknoqtuxv + password: "$2a$04$vRolgPGXPw8qpPb/0FHvjeCl9c.9GTtux/MzDiqAmaq3imUw1B13C" + auto: true +# logging, takes inspiration from Insp +logging: + - # how to log these messages + # + # file log to given target filename + # stdout log to stdout + # stderr log to stderr + # (you can specify multiple methods, e.g., to log to both stderr and a file) + method: stderr + # filename to log to, if file method is selected + # filename: ircd.log + + # type(s) of logs to keep here. you can use - to exclude those types + # + # exclusions take precedent over inclusions, so if you exclude a type it will NEVER + # be logged, even if you explicitly include it + # + # useful types include: + # * everything (usually used with exclusing some types below) + # server server startup, rehash, and shutdown events + # accounts account registration and authentication + # channels channel creation and operations + # commands command calling and operations + # opers oper actions, authentication, etc + # services actions related to NickServ, ChanServ, etc. + # internal unexpected runtime behavior, including potential bugs + # userinput raw lines sent by users + # useroutput raw lines sent to users + type: "server listeners connect connect-ip quit internal" + # one of: debug info warn error + level: debug +#- +# # example of a file log that avoids logging IP addresses +# method: file +# filename: ircd.log +# type: "* -userinput -useroutput -localconnect -localconnect-ip" +# level: debug + +# debug options +debug: + # when enabled, ergo will attempt to recover from certain kinds of + # client-triggered runtime errors that would normally crash the server. + # this makes the server more resilient to DoS, but could result in incorrect + # behavior. deployments that would prefer to "start from scratch", e.g., by + # letting the process crash and auto-restarting it with systemd, can set + # this to false. + recover-from-errors: true + # optionally expose a pprof http endpoint: https://golang.org/pkg/net/http/pprof/ + # it is strongly recommended that you don't expose this on a public interface; + # if you need to access it remotely, you can use an SSH tunnel. + # set to `null`, "", leave blank, or omit to disable + # pprof-listener: "localhost:6060" +# datastore configuration +datastore: + # path to the datastore + path: /ircd/db/ircd.db + # if the database schema requires an upgrade, `autoupgrade` will attempt to + # perform it automatically on startup. the database will be backed + # up, and if the upgrade fails, the original database will be restored. + autoupgrade: true + # connection information for MySQL (currently only used for persistent history): + mysql: + enabled: true + host: "mariadb-maxscale.mariadb-operator.svc.cluster.local" + port: 3306 + user: "irc" + history-database: "irc" + timeout: 3s + max-conns: 4 + # this may be necessary to prevent middleware from closing your connections: + #conn-max-lifetime: 180s +# languages config +languages: + # whether to load languages + enabled: false + # default language to use for new clients + # 'en' is the default English language in the code + default: en + # which directory contains our language files + path: languages +# limits - these need to be the same across the network +limits: + # nicklen is the max nick length allowed + nicklen: 32 + # identlen is the max ident length allowed + identlen: 20 + # channellen is the max channel length allowed + channellen: 64 + # awaylen is the maximum length of an away message + awaylen: 500 + # kicklen is the maximum length of a kick message + kicklen: 1000 + # topiclen is the maximum length of a channel topic + topiclen: 1000 + # maximum number of monitor entries a client can have + monitor-entries: 100 + # whowas entries to store + whowas-entries: 100 + # maximum length of channel lists (beI modes) + chan-list-modes: 60 + # maximum length of IRC lines + # this should generally be 1024-2048, and will only apply when negotiated by clients + linelen: + # ratified version of the message-tags cap fixes the max tag length at 8191 bytes + # configurable length for the rest of the message: + rest: 2048 + # maximum number of messages to accept during registration (prevents + # DoS / resource exhaustion attacks): + registration-messages: 1024 + # message length limits for the new multiline cap + multiline: + max-bytes: 4096 # 0 means disabled + max-lines: 24 # 0 means no limit +# fakelag: prevents clients from spamming commands too rapidly +fakelag: + # whether to enforce fakelag + enabled: true + # time unit for counting command rates + window: 1s + # clients can send this many commands without fakelag being imposed + burst-limit: 5 + # once clients have exceeded their burst allowance, they can send only + # this many commands per `window`: + messages-per-window: 2 + # client status resets to the default state if they go this long without + # sending any commands: + cooldown: 2s + # exempt a certain number of command invocations per session from fakelag; + # this is to speed up "resynchronization" of client state during reattach + command-budgets: + "CHATHISTORY": 16 + "MARKREAD": 16 + "MONITOR": 1 + "WHO": 4 +# the roleplay commands are semi-standardized extensions to IRC that allow +# sending and receiving messages from pseudo-nicknames. this can be used either +# for actual roleplaying, or for bridging IRC with other protocols. +roleplay: + # are roleplay commands enabled at all? (channels and clients still have to + # opt in individually with the +E mode) + enabled: false + # require the "roleplay" oper capability to send roleplay messages? + require-oper: false + # require channel operator permissions to send roleplay messages? + require-chanops: false + # add the real nickname, in parentheses, to the end of every roleplay message? + add-suffix: true +# message history tracking, for the RESUME extension and possibly other uses in future +history: + # should we store messages for later playback? + # the current implementation stores messages in RAM only; they do not persist + # across server restarts. however, you should not enable this unless you understand + # how it interacts with the GDPR and/or any data privacy laws that apply + # in your country and the countries of your users. + enabled: true + # how many channel-specific events (messages, joins, parts) should be tracked per channel? + channel-length: 4096 + # how many direct messages and notices should be tracked per user? + client-length: 512 + # how long should we try to preserve messages? + # if `autoresize-window` is 0, the in-memory message buffers are preallocated to + # their maximum length. if it is nonzero, the buffers are initially small and + # are dynamically expanded up to the maximum length. if the buffer is full + # and the oldest message is older than `autoresize-window`, then it will overwrite + # the oldest message rather than resize; otherwise, it will expand if possible. + autoresize-window: 2w + # number of messages to automatically play back on channel join (0 to disable): + autoreplay-on-join: 0 + # maximum number of CHATHISTORY messages that can be + # requested at once (0 disables support for CHATHISTORY) + chathistory-maxmessages: 100 + # maximum number of messages that can be replayed at once during znc emulation + # (znc.in/playback, or automatic replay on initial reattach to a persistent client): + znc-maxmessages: 2048 + # options to delete old messages, or prevent them from being retrieved + restrictions: + # if this is set, messages older than this cannot be retrieved by anyone + # (and will eventually be deleted from persistent storage, if that's enabled) + expire-time: 2w + # if this is set, logged-in users cannot retrieve messages older than their + # account registration date, and logged-out users cannot retrieve messages + # older than their sign-on time (modulo grace-period, see below): + enforce-registration-date: true + # but if this is set, you can retrieve messages that are up to `grace-period` + # older than the above cutoff time. this is recommended to allow logged-out + # users to do session resumption / query history after disconnections. + grace-period: 1h + # options to store history messages in a persistent database (currently only MySQL): + persistent: + enabled: true + # store unregistered channel messages in the persistent database? + unregistered-channels: false + # for a registered channel, the channel owner can potentially customize + # the history storage setting. as the server operator, your options are + # 'disabled' (no persistent storage, regardless of per-channel setting), + # 'opt-in', 'opt-out', and 'mandatory' (force persistent storage, ignoring + # per-channel setting): + registered-channels: "opt-out" + # direct messages are only stored in the database for persistent clients; + # you can control how they are stored here (same options as above) + direct-messages: "opt-in" + # options to control how messages are stored and deleted: + retention: + # allow users to delete their own messages from history? + allow-individual-delete: true + # if persistent history is enabled, create additional index tables, + # allowing deletion of JSON export of an account's messages. this + # may be needed for compliance with data privacy regulations. + enable-account-indexing: true + # options to control storage of TAGMSG + tagmsg-storage: + # by default, should TAGMSG be stored? + default: false + # if `default` is false, store TAGMSG containing any of these tags: + whitelist: + - "+draft/react" + - "+react" + # if `default` is true, don't store TAGMSG containing any of these tags: + #blacklist: + # - "+draft/typing" + # - "typing" +# whether to allow customization of the config at runtime using environment variables, +# e.g., ORAGONO__SERVER__MAX_SENDQ=128k. see the manual for more details. +allow-environment-overrides: true diff --git a/apps/base/irc/kustomization.yaml b/apps/base/irc/kustomization.yaml @@ -0,0 +1,12 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: irc +resources: + - resources.yaml +configMapGenerator: + - name: irc-config + options: + disableNameSuffixHash: true + files: + - files/ircd.motd + - files/ircd.yaml diff --git a/apps/base/irc/resources.yaml b/apps/base/irc/resources.yaml @@ -0,0 +1,172 @@ +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + namespace: irc + name: irc.midnightthoughts.space +spec: + secretName: irc-certs + dnsNames: + - irc.midnightthoughts.space + issuerRef: + name: letsencrypt-dns + kind: ClusterIssuer +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: irc-deployment + labels: + app: irc +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + app: irc + template: + metadata: + labels: + app: irc + spec: + shareProcessNamespace: true + containers: + - name: irc + image: ghcr.io/ergochat/ergo:v2.15.0 + ports: + - containerPort: 6697 + name: ircs + - containerPort: 443 + name: websocket + readinessProbe: + tcpSocket: + port: 6697 + livenessProbe: + tcpSocket: + port: 6697 + volumeMounts: + - mountPath: /ircd/ + name: irc-config + readOnly: true + - mountPath: /ircd/tls + name: irc-certs + readOnly: true + - mountPath: /ircd/db + name: irc-db + env: + - name: ERGO__DATASTORE__MYSQL__PASSWORD + valueFrom: + secretKeyRef: + name: irc-db + key: password + - name: config-reloader + # image is based on busybox which includes inotifyd + pkill + image: ghcr.io/ergochat/ergo + command: ["/bin/sh"] + args: + - "-c" + - | + echo "Watching /ircd/"; + inotifyd - /ircd/:wMymndox /ircd/tls/:wMymndox | while read -r notifies ; do + echo "$notifies"; + echo "notify received, sending SIGHUP"; + pkill -HUP ergo; + done + echo "Exiting."; + volumeMounts: + - mountPath: /ircd/ + name: irc-config + readOnly: true + - mountPath: /ircd/tls + name: irc-certs + readOnly: true + volumes: + - name: irc-config + configMap: + name: irc-config + - name: irc-certs + secret: + secretName: irc-certs + - name: irc-db + persistentVolumeClaim: + claimName: irc-db +--- +apiVersion: v1 +kind: Service +metadata: + name: irc + labels: + app: irc +spec: + type: ClusterIP + ports: + - name: irc + port: 6697 + targetPort: 6697 + - name: websockets + port: 443 + targetPort: 443 + selector: + app: irc +--- +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: irc + namespace: irc +spec: + parentRefs: + - name: envoy-gateway + namespace: envoy-gateway + hostnames: + - irc.midnightthoughts.space + rules: + - backendRefs: + - name: irc + port: 443 +--- +apiVersion: gateway.networking.k8s.io/v1alpha2 +kind: TCPRoute +metadata: + name: ircs + namespace: irc + annotations: + external-dns.alpha.kubernetes.io/hostname: irc.midnightthoughts.space +spec: + parentRefs: + - name: envoy-gateway + namespace: envoy-gateway + sectionName: irc + rules: + - backendRefs: + - name: ircs + port: 6697 +--- +apiVersion: gateway.envoyproxy.io/v1alpha1 +kind: BackendTrafficPolicy +metadata: + name: enable-proxy-protocol-policy + namespace: irc +spec: + targetRefs: + - group: gateway.networking.k8s.io + kind: TCPRoute + name: ircs + - group: gateway.networking.k8s.io + kind: HTTPRoute + name: irc + proxyProtocol: + version: "V2" +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: irc-db + labels: + app: irc +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 1Gi diff --git a/apps/base/mariadb-operator/mariadb.yaml b/apps/base/mariadb-operator/mariadb.yaml @@ -293,3 +293,69 @@ spec: username: bugzilla grantOption: false host: "%" +--- +apiVersion: k8s.mariadb.com/v1alpha1 +kind: Database +metadata: + name: irc +spec: + mariaDbRef: + name: mariadb + characterSet: utf8 + collate: utf8_general_ci + # Delete the resource in the database whenever the CR gets deleted. + # Alternatively, you can specify Skip in order to omit deletion. + cleanupPolicy: Delete + requeueInterval: 30s + retryInterval: 5s +--- +apiVersion: k8s.mariadb.com/v1alpha1 +kind: User +metadata: + name: irc +spec: + # If you want the user to be created with a different name than the resource name + # name: user-custom + mariaDbRef: + name: mariadb + passwordSecretKeyRef: + name: mariadb-irc + key: password + # This field defaults to 10 + maxUserConnections: 10 + host: "%" + # Delete the resource in the database whenever the CR gets deleted. + # Alternatively, you can specify Skip in order to omit deletion. + cleanupPolicy: Delete + requeueInterval: 30s + retryInterval: 5s +--- +apiVersion: k8s.mariadb.com/v1alpha1 +kind: Grant +metadata: + name: grant-irc +spec: + mariaDbRef: + name: irc + privileges: + - "ALL PRIVILEGES" + database: "irc" + table: "*" + username: irc + grantOption: false + host: "%" +--- +apiVersion: k8s.mariadb.com/v1alpha1 +kind: Grant +metadata: + name: grant-irc-show-db +spec: + mariaDbRef: + name: mariadb + privileges: + - "SHOW DATABASES" + database: "*" + table: "*" + username: irc + grantOption: false + host: "%"