Files
timmy-config/ansible
Alexander Whitestone 92dcf9f46b
Some checks failed
Architecture Lint / Linter Tests (pull_request) Successful in 27s
PR Checklist / pr-checklist (pull_request) Failing after 3m20s
Smoke Test / smoke (pull_request) Failing after 16s
Validate Config / YAML Lint (pull_request) Failing after 14s
Validate Config / JSON Validate (pull_request) Successful in 9s
Validate Config / Shell Script Lint (pull_request) Failing after 55s
Validate Config / Cron Syntax Check (pull_request) Successful in 12s
Validate Config / Deploy Script Dry Run (pull_request) Successful in 13s
Validate Config / Playbook Schema Validation (pull_request) Successful in 28s
Validate Config / Python Syntax & Import Check (pull_request) Failing after 2m9s
Architecture Lint / Lint Repository (pull_request) Has been cancelled
Validate Config / Python Test Suite (pull_request) Has been cancelled
Add ansible/scripts/deploy-bezalel.sh
2026-04-15 16:29:29 +00:00
..

Ansible IaC — The Timmy Foundation Fleet

One canonical Ansible playbook defines: deadman switch, cron schedule, golden state rollback, agent startup sequence. — KT Final Session 2026-04-08, Priority TWO

Purpose

This directory contains the single source of truth for fleet infrastructure. No more ad-hoc recovery implementations. No more overlapping deadman switches. No more agents mutating their own configs into oblivion.

Everything goes through Ansible. If it's not in a playbook, it doesn't exist.

Architecture

┌─────────────────────────────────────────────────┐
│                  Gitea (Source of Truth)          │
│  timmy-config/ansible/                           │
│    ├── inventory/hosts.yml    (fleet machines)    │
│    ├── playbooks/site.yml     (master playbook)   │
│    ├── roles/                 (reusable roles)    │
│    └── group_vars/wizards.yml (golden state)      │
└──────────────────┬──────────────────────────────┘
                   │  PR merge triggers webhook
                   ▼
┌─────────────────────────────────────────────────┐
│              Gitea Webhook Handler                │
│  scripts/deploy_on_webhook.sh                     │
│  → ansible-pull on each target machine            │
└──────────────────┬──────────────────────────────┘
                   │  ansible-pull
                   ▼
┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐
│  Timmy   │  │ Allegro  │  │ Bezalel  │  │  Ezra    │
│  (Mac)   │  │  (VPS)   │  │  (VPS)   │  │  (VPS)   │
│          │  │          │  │          │  │          │
│ deadman  │  │ deadman  │  │ deadman  │  │ deadman  │
│ cron     │  │ cron     │  │ cron     │  │ cron     │
│ golden   │  │ golden   │  │ golden   │  │ golden   │
│ req_log  │  │ req_log  │  │ req_log  │  │ req_log  │
└──────────┘  └──────────┘  └──────────┘  └──────────┘

Quick Start

# Deploy everything to all machines
ansible-playbook -i inventory/hosts.yml playbooks/site.yml

# Deploy only golden state config
ansible-playbook -i inventory/hosts.yml playbooks/golden_state.yml

# Deploy only to a specific wizard
ansible-playbook -i inventory/hosts.yml playbooks/site.yml --limit bezalel

# Dry run (check mode)
ansible-playbook -i inventory/hosts.yml playbooks/site.yml --check --diff

Golden State Provider Chain

All wizard configs converge on this provider chain. Anthropic is BANNED.

Priority Provider Model Endpoint
1 Kimi kimi-k2.5 https://api.kimi.com/coding/v1
2 Gemini (OpenRouter) gemini-2.5-pro https://openrouter.ai/api/v1
3 Ollama (local) gemma4:latest http://localhost:11434/v1

Roles

Role Purpose
wizard_base Common wizard setup: directories, thin config, git pull
deadman_switch Health check → snapshot good config → rollback on death
golden_state Deploy and enforce golden state provider chain
request_log SQLite telemetry table for every inference call
cron_manager Source-controlled cron jobs — no manual crontab edits

Rules

  1. No manual changes. If it's not in a playbook, it will be overwritten.
  2. No Anthropic. Banned. Enforcement is automated. See BANNED_PROVIDERS.yml.
  3. Idempotent. Every playbook can run 100 times with the same result.
  4. PR required. Config changes go through Gitea PR review, then deploy.
  5. One identity per machine. No duplicate agents. Fleet audit enforces this.
  • timmy-config #442: [P2] Ansible IaC Canonical Playbook
  • timmy-config #444: Wire Deadman Switch ACTION
  • timmy-config #443: Thin Config Pattern
  • timmy-config #446: request_log Telemetry Table