Files
infra/docs/ai/tech-stack.md
T
DmitryandClaude Sonnet 5 d2e1e6876a docs: AI project context (docs/ai) and repository documentation refresh
- docs/ai/: stable, repo-verified context - README, architecture, tech-stack,
  edge-cases, plan (confirmed active work only), migration-tofu (the blue-green
  OpenTofu migration runbook and per-service findings), legacy-warning, links.
- AGENTS.md: slimmed to a working contract that points at docs/ai instead of
  restating it; CLAUDE.md is an adapter that @-includes it.
- README.md, ansible/README.md, ansible/roles/README.md,
  roles/lxc_docker_host/README.md: bring wording in line with the current
  control plane (Makefile entry point, registry, tofu, memoir-bot gone).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012uoq5AVK8mkBgg83Mq6o5V
2026-09-03 07:06:10 +03:00

3.7 KiB

Технологический стек

Control Plane

Компонент Роль Declared / resolved evidence
Nix Воспроизводимый dev shell flake.nix, locked nixpkgs revision в flake.lock
Python Ansible controller runtime pkgs.python3 в flake.nix; точная версия зависит от lock
ansible-core Inventory, playbooks, roles >=2.19 в requirements.txt; locked Nix package на момент аудита 2.21.3
proxmoxer Proxmox API client >=2.3; locked Nix package на момент аудита 2.3.0
requests HTTP dependency >=2.31; точная Nix version определяется flake.lock
ansible.posix POSIX modules >=2.0.0; installed version не закреплена
community.proxmox Proxmox modules >=2.0.0; installed version не закреплена
community.general Общие modules >=10.0.0; installed version не закреплена
ansible-lint Static validation Nix package; CI отдельно pin 25.8.2
yamllint YAML validation Nix package; CI отдельно pin 1.37.1

Nix shell также содержит Git, jq, OpenSSH, curl и GNU Make. Galaxy collections не устанавливаются автоматически и живут в ignored ansible/collections/.

Managed Runtime

  • Proxmox VE/LXC и PBS являются внешними runtime systems; их версии не заданы manifest.
  • Debian LXC templates и Docker/systemd используются service playbooks.
  • Caddy, OpenVPN и restic устанавливаются/используются на managed hosts; точные runtime versions репозиторий не фиксирует.
  • Active update-managed container images обычно закреплены tag@sha256:digest в ansible/inventory/group_vars/all/services.yml и service playbooks.
  • Исключения: frozen Prometheus images закреплены только тегами, а docker-test использует smoke image без declared digest.

Grimmory MCP

Компонент Version Evidence
Node.js >=22 tools/grimmory-mcp/package.json
@modelcontextprotocol/sdk 1.30.0 package manifest и lockfile
Zod 3.25.76 package manifest и lockfile
Grimmory API compatibility deployed v3.2.4 service registry и compatibility code

Node.js/npm не входят в flake.nix; их нужно предоставлять отдельно.

Setup

nix develop
ansible-galaxy collection install \
  -r ansible/requirements.yml \
  -p ansible/collections
make -C ansible help

make -C ansible setup остается venv fallback, но Nix является предпочтительным контроллерным окружением.

Validation

make -C ansible inventory
make -C ansible docs
make -C ansible lint
nix develop -c sh -c \
  'cd ansible && for f in playbooks/*.yml; do ansible-playbook --syntax-check "$f"; done'
npm test --prefix tools/grimmory-mcp

make check, make status, make backup-audit и make openvpn-check обращаются к живой инфраструктуре и не являются локальными unit tests. Документационное изменение не требует их запуска.

CI

.gitea/workflows/lint.yml описывает yamllint, ansible-lint и syntax-check всех playbooks. Комментарии в самом workflow фиксируют, что Gitea Actions отключены и runner не зарегистрирован; автоматического gate сейчас нет. MCP tests в workflow не включены.