Molecule и CI: единая схема тестов для аддонов и удобные параллельные прогоны

Makefile
- Уникальные имена контейнеров на каждый вызов make (ANSIBLE_RUN_ID); переопределение
  через ANSIBLE_CONTAINER_NAME / MOLECULE_CONTAINER_NAME; отдельное имя для
  Molecule, чтобы k3s-ansible и molecule не конфликтовали.
- Старые цели molecule-prometheus и molecule-istio переведены на molecule-addon
  (prometheus-stack, istio); добавлены явные molecule-addon-prometheus-stack и
  molecule-addon-istio; в molecule-addon-all включены prometheus-stack и istio
  (полный набор аддонов), скорректированы подписи.
- Phony-таргет dashboard (без внесения кода в dashboard/ в этот коммит).

Сценарии Molecule (converge/verify) — десятки аддонов
- Добавлены/выровнены переменные и шаблоны под текущие роли (harbor, hysteria2,
  ingress-*, jenkins, mediaserver, netbird, nextcloud, splitgw, vault,
  vaultwarden и др.).
- Helm/файлы на хост: delegate_to: localhost, run_once где уместно
  (technitium-dns, yandex-dns-controller); verify на localhost для
  file-based проверок.
- Уточнения проверок: metrics-server, minio, promtail, pushgateway, velero
  (bool из фактов/строк), splitgw (JSON, поиск портов/DNS-правил в структуре).
- В meta ролей: prometheus_stack + namespace, istio + namespace; у istio
  согласованы converge/verify (в т.ч. метрики, ослаблены жёсткие assert под
  шаблоны Kiali).
- csi-nfs: комментарий к volume_binding_mode (Immediate / WaitForFirstConsumer).

Инфраструктура
- .gitignore: каталог dashboard/ (локальная копия не в репозитории).
- docker-compose: убрано фиксированное container_name для параллельных
  ; TZ по умолчанию Europe/Moscow.
- roles/k3s/tasks/prereqs.yml: повторные попытки update_cache и apt install
  при кратковременных сбоях зеркал/сети.
This commit is contained in:
Sergey Antropoff
2026-04-28 01:16:05 +03:00
parent fd8ef1c5c7
commit ed44d6418e
33 changed files with 193 additions and 39 deletions

View File

@@ -11,14 +11,34 @@
mediaserver_pvc_name: "mediaserver-data"
mediaserver_puid: "1000"
mediaserver_pgid: "1000"
mediaserver_timezone: "UTC"
mediaserver_ingress_class: "nginx"
mediaserver_ingress_annotations: {}
mediaserver_ingress_tls: false
mediaserver_ingress_cert_issuer: "letsencrypt-prod"
mediaserver_plex_enabled: true
mediaserver_plex_host: "plex.home.local"
mediaserver_plex_claim_token: "claim-molecule-test-token"
mediaserver_plex_ingress_enabled: true
mediaserver_plex_ingress_host: "plex.home.local"
mediaserver_plex_resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "1000m"
memory: "1Gi"
mediaserver_sonarr_enabled: true
mediaserver_sonarr_host: "sonarr.home.local"
mediaserver_sonarr_ingress_enabled: true
mediaserver_sonarr_ingress_host: "sonarr.home.local"
mediaserver_sonarr_resources:
requests:
cpu: "100m"
memory: "256Mi"
limits:
cpu: "1000m"
memory: "1Gi"
mediaserver_radarr_enabled: true
mediaserver_radarr_host: "radarr.home.local"
mediaserver_prowlarr_enabled: true