Files
K3S/addons/databasus/role/tasks/main.yml
Sergey Antropoff 80dbf686b0 feat: добавить аддоны postgresql, mysql, databasus, minio, velero, crowdsec
Базы данных:
- addons/postgresql: Bitnami PostgreSQL (Helm), vault_postgresql_*
- addons/mysql: Bitnami MySQL (Helm), vault_mysql_*

Объектное хранилище и backup:
- addons/minio: Bitnami MinIO в distributed режиме (4 ноды по умолчанию)
- addons/velero: backup кластера через Velero + MinIO как S3 backend;
  bucket создаётся автоматически через mc Job; daily schedule 02:00

Безопасность:
- addons/crowdsec: CrowdSec LAPI + DaemonSet агенты, мониторит ingress-nginx;
  опциональный nginx bouncer (crowdsec_nginx_bouncer_enabled: true)

Резервное копирование БД:
- addons/databasus: OCI chart, автоматически подключается к addon_postgresql
  и addon_mysql когда те включены (shared endpoint через postgresql_external_host
  и mysql_external_host)

Общее:
- group_vars/all/addons.yml: флаги addon_* + конфиги для всех 6 аддонов;
  shared DB endpoints postgresql_external_host / mysql_external_host
- group_vars/all/vault.yml.example: примеры паролей для всех аддонов
- Makefile: targets addon-postgresql/mysql/databasus/minio/velero/crowdsec
2026-04-25 11:11:18 +03:00

83 lines
3.5 KiB
YAML

---
- name: Build Databasus database connections
ansible.builtin.set_fact:
_databasus_databases: >-
{{
(databasus_postgresql_enabled | bool) | ternary(
[{'type': 'postgresql',
'host': databasus_postgresql_host,
'port': databasus_postgresql_port | int,
'username': databasus_postgresql_username,
'password': databasus_postgresql_password,
'database': databasus_postgresql_database}],
[]
)
+
(databasus_mysql_enabled | bool) | ternary(
[{'type': 'mysql',
'host': databasus_mysql_host,
'port': databasus_mysql_port | int,
'username': databasus_mysql_username,
'password': databasus_mysql_password,
'database': databasus_mysql_database}],
[]
)
}}
- name: Deploy Databasus via Helm (OCI chart)
kubernetes.core.helm:
name: databasus
chart_ref: "{{ databasus_chart_ref }}"
chart_version: "{{ databasus_version if databasus_version else omit }}"
release_namespace: "{{ databasus_namespace }}"
create_namespace: true
wait: true
timeout: "10m0s"
values:
ingress:
enabled: "{{ databasus_ingress_enabled | bool }}"
className: "{{ databasus_ingress_class }}"
hosts:
- host: "{{ databasus_ingress_host }}"
paths:
- path: /
pathType: Prefix
tls: >-
{{ [{'hosts': [databasus_ingress_host],
'secretName': 'databasus-tls'}]
if databasus_ingress_tls | bool else [] }}
annotations: >-
{{ {'cert-manager.io/cluster-issuer': databasus_ingress_cert_issuer}
if databasus_ingress_tls | bool else {} }}
databases: "{{ _databasus_databases }}"
resources: "{{ databasus_resources }}"
environment:
KUBECONFIG: "{{ k3s_kubeconfig_path }}"
- name: Wait for Databasus to be ready
ansible.builtin.command: >
k3s kubectl -n {{ databasus_namespace }}
rollout status deployment/databasus --timeout=180s
become: true
register: _databasus_ready
changed_when: false
retries: 3
delay: 10
until: _databasus_ready.rc == 0
failed_when: false
- name: Show Databasus access info
ansible.builtin.debug:
msg:
- "══════════════════════════════════════════════"
- " Databasus установлен"
- "══════════════════════════════════════════════"
- " Namespace: {{ databasus_namespace }}"
- "{% if databasus_ingress_enabled %} UI: http{{ 's' if databasus_ingress_tls | bool else '' }}://{{ databasus_ingress_host }}{% endif %}"
- " Port-forward: kubectl port-forward -n {{ databasus_namespace }} svc/databasus 8080:80"
- "──────────────────────────────────────────────"
- " Подключённые базы данных:"
- "{% for db in _databasus_databases %} - {{ db.type }}: {{ db.host }}:{{ db.port }} / {{ db.database }}{% endfor %}"
- "{% if _databasus_databases | length == 0 %} (нет — включи addon_postgresql или addon_mysql){% endif %}"
- "══════════════════════════════════════════════"