Skip to content

Commit 3bab60f

Browse files
Merge pull request #3 from iosifnicolae2/main
feat: add more sample things
2 parents 193b3a0 + b9b2d04 commit 3bab60f

File tree

3 files changed

+187
-33
lines changed

3 files changed

+187
-33
lines changed

copier.yml

+10-4
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,14 @@ _answers_relpath: ".copier-answers.yml"
22
_exclude:
33
- .github
44
- ".git"
5-
- "environments/*"
6-
- "!environments/sample_environment"
7-
- "!environments/__init__.py"
8-
- "environments/sample_environment/generated_outputs"
5+
- "!environments/sample_environment/"
6+
- "!environments/sample_environment/secrets/"
7+
- "!environments/sample_environment/secrets/config_env.yaml.example"
8+
- "!environments/sample_environment/secrets/kube_config.yaml.example"
9+
- "!environments/sample_environment/.gitattributes"
10+
- "!environments/sample_environment/.gitignore"
11+
- "!environments/sample_environment/__init__.py"
12+
- "!environments/sample_environment/main.py"
13+
- "!environments/sample_environment/Makefile"
14+
- "environments/**"
915
- ".idea"

environments/sample_environment/main.py

+138-28
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
import subprocess
44
import sys
55
import yaml
6+
import json
7+
import pprint
8+
from components.whatsapp_waha.main import create_whatsapp_waha
9+
from components.postgresql_operator.main import create_postgresql_operator_crds, create_postgresql_operator
10+
from components.postgresql_instance.main import create_postgres_instance as create_postgres_instance_base
611

712
# Set config path before imports
813
current_dir = os.path.dirname(os.path.abspath(__file__))
@@ -246,6 +251,125 @@ def generate_all_skaffolds():
246251
]
247252
)
248253

254+
# PostgreSQL Operator
255+
postgresql_namespace_name = "postgresql-system"
256+
postgresql_namespace = create_namespace(
257+
slug="postgresql",
258+
namespace=postgresql_namespace_name,
259+
depends_on=[]
260+
)
261+
262+
postgresql_operator_crds = create_postgresql_operator_crds(
263+
slug="postgresql-crds",
264+
namespace=postgresql_namespace_name,
265+
depends_on=[
266+
postgresql_namespace
267+
]
268+
)
269+
270+
postgresql_operator = create_postgresql_operator(
271+
slug="postgresql-operator",
272+
namespace=postgresql_namespace_name,
273+
depends_on=[
274+
postgresql_namespace,
275+
postgresql_operator_crds
276+
]
277+
)
278+
279+
280+
# Whatsapp WAHA
281+
whatsapp_waha_config = config['components']['whatsapp_waha']
282+
283+
# WhatsApp WAHA PostgreSQL Instance
284+
whatsapp_db_config = whatsapp_waha_config.get('postgres_db', {})
285+
whatsapp_db_name = whatsapp_db_config.get('db_name', 'whatsapp_db')
286+
whatsapp_db_superuser = whatsapp_db_config.get('superuser', 'postgres')
287+
whatsapp_db_superuser_password = whatsapp_db_config.get('superuser_password', 'postgres')
288+
whatsapp_db_username = whatsapp_db_config.get('username', 'whatsapp_user')
289+
whatsapp_db_password = whatsapp_db_config.get('password', 'whatsapp_password')
290+
291+
whatsapp_waha_namespace_name = "whatsapp"
292+
293+
whatsapp_waha_namespace = create_namespace(
294+
slug=whatsapp_waha_namespace_name,
295+
namespace=whatsapp_waha_namespace_name,
296+
depends_on=[]
297+
)
298+
299+
whatsapp_waha_postgres_instance = create_postgres_instance_base(
300+
slug="whatsapp-db",
301+
namespace=whatsapp_waha_namespace_name,
302+
db_name=whatsapp_db_name,
303+
superuser=whatsapp_db_superuser,
304+
superuser_password=whatsapp_db_superuser_password,
305+
username=whatsapp_db_username,
306+
user_password=whatsapp_db_password,
307+
replicas=whatsapp_db_config.get('replicas', 1),
308+
storage_size=whatsapp_db_config.get('storage_size', '5Gi'),
309+
wal_storage_size=whatsapp_db_config.get('wal_storage_size', '1Gi'),
310+
repo_storage_size=whatsapp_db_config.get('repo_storage_size', '2Gi'),
311+
s3_backup=whatsapp_db_config.get('s3_backup', None),
312+
s3_bootstrap=whatsapp_db_config.get('s3_bootstrap', None),
313+
service_type=whatsapp_db_config.get('service_type', 'LoadBalancer'),
314+
service_annotations=whatsapp_db_config.get('service_annotations', {}),
315+
depends_on=[
316+
whatsapp_waha_namespace, # Depend on WhatsApp namespace
317+
postgresql_operator_crds,
318+
postgresql_operator
319+
]
320+
)
321+
whatsapp_waha_domain_name=whatsapp_waha_config['domain_name']
322+
whatsapp_waha_root_domain = '.'.join(whatsapp_waha_domain_name.split('.')[1:])
323+
324+
whatsapp_waha_cert_manager_issuer = create_cert_manager_issuer(
325+
slug="whatsapp-waha-issuer",
326+
namespace=whatsapp_waha_namespace_name,
327+
cloudflare_email=env_vars['CLOUDFLARE_EMAIL'],
328+
cloudflare_api_token=env_vars['CLOUDFLARE_API_TOKEN'],
329+
depends_on=[
330+
whatsapp_waha_namespace
331+
]
332+
)
333+
334+
whatsapp_waha_cert_manager_certificate = create_cert_manager_certificate(
335+
slug="whatsapp-waha-certificate",
336+
namespace=whatsapp_waha_namespace_name,
337+
domain_name=whatsapp_waha_domain_name,
338+
issuer_secret_name=whatsapp_waha_cert_manager_issuer.issuer_secret_name,
339+
certificate_dns_names=[
340+
whatsapp_waha_root_domain,
341+
f"*.{whatsapp_waha_root_domain}",
342+
],
343+
depends_on=[
344+
whatsapp_waha_namespace,
345+
whatsapp_waha_cert_manager_issuer,
346+
]
347+
)
348+
349+
whatsapp_waha = create_whatsapp_waha(
350+
slug="whatsapp",
351+
namespace=whatsapp_waha_namespace_name,
352+
image_repository="devlikeapro/waha",
353+
image_tag="latest",
354+
replicas=1,
355+
env_vars={},
356+
postgres_uri=whatsapp_waha_postgres_instance.normal_user_postgres_uri,
357+
s3_storage=whatsapp_waha_config.get('s3_storage', None),
358+
ingress_enabled=True,
359+
ingress_host=whatsapp_waha_domain_name,
360+
ingress_class_name="nginx",
361+
ingress_tls_secret=whatsapp_waha_cert_manager_certificate.certificate_secret_name,
362+
basic_auth_enabled=True,
363+
username=whatsapp_waha_config['username'],
364+
password=whatsapp_waha_config['password'],
365+
depends_on=[
366+
whatsapp_waha_namespace,
367+
whatsapp_waha_cert_manager_certificate,
368+
whatsapp_waha_cert_manager_issuer,
369+
whatsapp_waha_postgres_instance,
370+
]
371+
)
372+
249373
# registry = create_registry(
250374
# slug="registry",
251375
# namespace="registry",
@@ -259,37 +383,23 @@ def generate_all_skaffolds():
259383

260384
# Collect all components
261385
components = [
262-
# Fix some limits on the host
263-
increase_fs_watchers_limit,
264-
265-
# Cert-manager
266-
cert_manager_namespace,
267-
cert_manager_operator,
268-
269-
# MetalLB
270-
metallb_namespace,
271-
metallb,
272-
273-
# Ingress Nginx
274-
ingress_nginx_namespace,
275-
ingress_nginx,
276-
277-
# Longhorn
278-
longhorn_namespace,
279-
longhorn_cert_manager_issuer,
280-
longhorn_cert_manager_certificate,
281-
longhorn,
282-
283-
# Rancher
284-
rancher_namespace,
285-
rancher_cert_manager_issuer,
286-
rancher_cert_manager_certificate,
287-
rancher,
288-
386+
# PostgreSQL Operator
387+
postgresql_namespace,
388+
postgresql_operator_crds,
389+
postgresql_operator,
390+
391+
# WhatsApp WAHA
392+
whatsapp_waha_namespace,
393+
whatsapp_waha_cert_manager_issuer,
394+
whatsapp_waha_cert_manager_certificate,
395+
whatsapp_waha_postgres_instance,
396+
whatsapp_waha,
289397
]
290398

291399
# Generate skaffold configurations
292-
generate_skaffolds(components)
400+
generate_skaffolds(
401+
components=components,
402+
)
293403

294404
# Generate IntelliJ run configurations if enabled
295405
if INTELLIJ_RUN_CONFIGURATIONS_ENABLED or env_vars['INTELLIJ_RUN_CONFIGURATIONS_ENABLED'].lower() == 'true':

environments/sample_environment/secrets/config_env.yaml.example

+39-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ components:
3434
LONGHORN_DOMAIN_NAME: longhorn.prod.your-superapp-domain.com
3535
LONGHORN_DISKS:
3636
- name: sv1-nvme-disk-1
37-
node_selector:
37+
node_selector:
3838
kubernetes.io/hostname: sv1
3939
disk_id: nvme-Samsung_SSD_980_PRO_2TB_S69ENF0WB76932R
4040
tags:
@@ -49,3 +49,41 @@ components:
4949
- nvme
5050
- fast
5151
allow_scheduling: true
52+
whatsapp_waha:
53+
domain_name: whatsapp.your-superapp-domain.com
54+
username: admin
55+
password: your-secure-password
56+
postgres_db:
57+
db_name: whatsapp_db
58+
superuser: postgres
59+
superuser_password: postgres-secure-password
60+
username: whatsapp_user
61+
password: whatsapp-user-password
62+
replicas: 1
63+
storage_size: 5Gi
64+
wal_storage_size: 1Gi
65+
repo_storage_size: 2Gi
66+
service_type: LoadBalancer
67+
service_annotations: {}
68+
# Optional S3 backup configuration
69+
s3_backup:
70+
bucket: your-backup-bucket
71+
endpoint: s3.amazonaws.com
72+
region: us-east-1
73+
key: your-access-key
74+
key_secret: your-secret-key
75+
# Optional S3 bootstrap configuration
76+
s3_bootstrap:
77+
bucket: your-bootstrap-bucket
78+
endpoint: s3.amazonaws.com
79+
region: us-east-1
80+
key: your-access-key
81+
key_secret: your-secret-key
82+
repo_path: /path/to/backup
83+
# Optional S3 storage configuration for WhatsApp data
84+
s3_storage:
85+
bucket: your-whatsapp-data-bucket
86+
endpoint: s3.amazonaws.com
87+
region: us-east-1
88+
access_key_id: your-access-key
89+
secret_access_key: your-secret-key

0 commit comments

Comments
 (0)