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

@@ -8,7 +8,10 @@
# ── Конфигурация ──────────────────────────────────────────────────────────────
IMAGE_NAME := k3s-ansible
CONTAINER_NAME := k3s-ansible-runner
# Уникальное имя на каждый вызов make, чтобы не конфликтовать при параллельных запусках
# (вручную: make install ANSIBLE_CONTAINER_NAME=my-run-1)
ANSIBLE_RUN_ID := $(shell date +%s | tr -d '\n')-$(shell awk 'BEGIN{srand(); print int(rand()*1000000)}' 2>/dev/null)
CONTAINER_NAME := $(or $(ANSIBLE_CONTAINER_NAME),k3s-ansible-runner-$(ANSIBLE_RUN_ID))
DOCKER_TTY := $(shell if [ -t 1 ]; then echo -it; fi)
# Загружаем .env если существует
@@ -25,8 +28,9 @@ NC := \033[0m
# ── Базовая команда запуска контейнера ────────────────────────────────────────
# Molecule запускается тоже из контейнера — монтируем Docker socket для DinD
# Molecule: своё уникальное имя, чтобы k3s-ansible + molecule в параллели не бились
DOCKER_RUN_MOLECULE := docker run --rm $(DOCKER_TTY) \
--name $(CONTAINER_NAME)-molecule \
--name $(or $(MOLECULE_CONTAINER_NAME),k3s-ansible-molecule-$(ANSIBLE_RUN_ID)) \
-v $(PWD):/ansible \
-v /var/run/docker.sock:/var/run/docker.sock \
-e ANSIBLE_FORCE_COLOR=1 \
@@ -48,6 +52,7 @@ DOCKER_RUN := docker run --rm $(DOCKER_TTY) \
$(IMAGE_NAME)
.PHONY: help setup build rebuild \
dashboard \
bootstrap k8s-user mdadm k3s-certs chrony \
install install-full install-k3s install-cni install-kubevip \
addon-ingress-nginx addon-cert-manager addon-nfs-server addon-csi-nfs addon-nfs \
@@ -600,15 +605,15 @@ molecule-k3s: _check_image ## Тест роли k3s — 3 контейнера (
$(DOCKER_RUN_MOLECULE) molecule k3s
@printf "$(GREEN)✓ k3s role: OK$(NC)\n"
molecule-prometheus: _check_image ## Тест роли prometheus-stack (шаблоны + PVC), ~2-3 мин
@printf "$(CYAN)Тестирую роль prometheus-stack...$(NC)\n"
$(DOCKER_RUN_MOLECULE) molecule prometheus-stack
@printf "$(GREEN)✓ prometheus-stack role: OK$(NC)\n"
molecule-prometheus: _check_image ## Тест аддона prometheus-stack (legacy alias), ~2-3 мин
@printf "$(CYAN)Тестирую аддон prometheus-stack...$(NC)\n"
$(DOCKER_RUN_MOLECULE) molecule-addon prometheus-stack
@printf "$(GREEN) addon prometheus-stack: OK$(NC)\n"
molecule-istio: _check_image ## Тест роли istio + kiali (шаблоны), ~2-3 мин
@printf "$(CYAN)Тестирую роль istio...$(NC)\n"
$(DOCKER_RUN_MOLECULE) molecule istio
@printf "$(GREEN)✓ istio role: OK$(NC)\n"
molecule-istio: _check_image ## Тест аддона istio (legacy alias), ~2-3 мин
@printf "$(CYAN)Тестирую аддон istio...$(NC)\n"
$(DOCKER_RUN_MOLECULE) molecule-addon istio
@printf "$(GREEN)addon istio: OK$(NC)\n"
molecule-cluster: _check_image ## Тест topology кластера 3 master + 2 worker (embedded etcd HA), ~15-20 мин
@printf "$(CYAN)$(BOLD)Тестирую кластер (3 master + 2 worker)...$(NC)\n"
@@ -674,6 +679,8 @@ molecule-addon-loki: _check_image ## Тест аддона loki (Helm values ш
$(DOCKER_RUN_MOLECULE) molecule-addon loki
molecule-addon-longhorn: _check_image ## Тест аддона longhorn (Ingress шаблон), ~1 мин
$(DOCKER_RUN_MOLECULE) molecule-addon longhorn
molecule-addon-prometheus-stack: _check_image ## Тест аддона prometheus-stack (Helm values шаблон), ~2 мин
$(DOCKER_RUN_MOLECULE) molecule-addon prometheus-stack
molecule-addon-mediaserver: _check_image ## Тест аддона mediaserver (PVC + values шаблоны), ~2 мин
$(DOCKER_RUN_MOLECULE) molecule-addon mediaserver
molecule-addon-metrics-server: _check_image ## Тест аддона metrics-server (defaults validation), ~1 мин
@@ -700,6 +707,8 @@ molecule-addon-smtp-relay: _check_image ## Тест аддона smtp-relay (Hel
$(DOCKER_RUN_MOLECULE) molecule-addon smtp-relay
molecule-addon-splitgw: _check_image ## Тест аддона splitgw (sing-box конфиг + iptables скрипт), ~2 мин
$(DOCKER_RUN_MOLECULE) molecule-addon splitgw
molecule-addon-istio: _check_image ## Тест аддона istio (Helm values шаблон), ~2 мин
$(DOCKER_RUN_MOLECULE) molecule-addon istio
molecule-addon-tempo: _check_image ## Тест аддона tempo (Helm values + datasource шаблоны), ~2 мин
$(DOCKER_RUN_MOLECULE) molecule-addon tempo
molecule-addon-vault: _check_image ## Тест аддона vault (Helm values + init job шаблоны), ~2 мин
@@ -709,8 +718,8 @@ molecule-addon-vaultwarden: _check_image ## Тест аддона vaultwarden (H
molecule-addon-velero: _check_image ## Тест аддона velero (defaults validation), ~1 мин
$(DOCKER_RUN_MOLECULE) molecule-addon velero
molecule-addon-all: _check_image ## Тест ВСЕХ аддонов с Molecule (~60 мин)
@printf "$(CYAN)$(BOLD)Тестирую все 41 аддон...$(NC)\n"
molecule-addon-all: _check_image ## Тест всех аддонов с Molecule (~60+ мин)
@printf "$(CYAN)$(BOLD)Тестирую все аддоны...$(NC)\n"
$(MAKE) molecule-addon-argocd
$(MAKE) molecule-addon-authelia
$(MAKE) molecule-addon-cert-manager
@@ -731,6 +740,7 @@ molecule-addon-all: _check_image ## Тест ВСЕХ аддонов с Molecule
$(MAKE) molecule-addon-kubernetes-dashboard
$(MAKE) molecule-addon-loki
$(MAKE) molecule-addon-longhorn
$(MAKE) molecule-addon-prometheus-stack
$(MAKE) molecule-addon-mediaserver
$(MAKE) molecule-addon-metrics-server
$(MAKE) molecule-addon-minio
@@ -744,13 +754,14 @@ molecule-addon-all: _check_image ## Тест ВСЕХ аддонов с Molecule
$(MAKE) molecule-addon-pushgateway
$(MAKE) molecule-addon-smtp-relay
$(MAKE) molecule-addon-splitgw
$(MAKE) molecule-addon-istio
$(MAKE) molecule-addon-technitium-dns
$(MAKE) molecule-addon-tempo
$(MAKE) molecule-addon-vault
$(MAKE) molecule-addon-vaultwarden
$(MAKE) molecule-addon-velero
$(MAKE) molecule-addon-yandex-dns-controller
@printf "$(GREEN)$(BOLD)Все 41 аддон OK$(NC)\n"
@printf "$(GREEN)$(BOLD)Все аддоны OK$(NC)\n"
molecule-all: _check_image ## Запустить ВСЕ Molecule тесты (роли + кластер + аддоны) + HTML отчёт
@printf "$(CYAN)$(BOLD)Запуск всех Molecule тестов...$(NC)\n"
@@ -790,6 +801,10 @@ shell: _check_image ## Запустить интерактивный bash вну
-e ANSIBLE_FORCE_COLOR=1 \
$(IMAGE_NAME) shell
dashboard: ## Запустить dashboard (FastAPI + worker + redis) через docker compose
@printf "$(CYAN)Запускаю dashboard стек...$(NC)\n"
docker compose -f dashboard/docker-compose.yml up --build
# ═══════════════════════════════════════════════════════════════════════════════
# ОЧИСТКА
# ═══════════════════════════════════════════════════════════════════════════════