From c37b67d7ccfeb834d67973d2d5f550b70f8cc1d8 Mon Sep 17 00:00:00 2001 From: Krstan Vjestica Date: Thu, 30 Jul 2026 16:20:00 +0200 Subject: [PATCH 1/5] chore(docs): stop tracking docs/ in the repository The markdown sources stay on the host and are no longer carried in the public repo. What the outside world reads is the generated site at forail-platform.github.io, built from those sources. 84 files leave the index; nothing leaves the disk. They do remain in the existing history -- removing them from past commits would mean rewriting every branch and tag, which is not done here. --- .gitignore | 4 + docs/00-platform-architecture.md | 158 -- docs/01-architecture-overview.md | 231 --- docs/07-docker-deployment.md | 322 ----- docs/08-ci-cd-pipeline.md | 182 --- docs/10-contributing-guide.md | 211 --- docs/ADMIN_HANDBOOK.md | 937 ------------ docs/HANDBOOK.md | 1362 ------------------ docs/RELEASE_NOTES_v2026.03.0.md | 144 -- docs/RELEASE_NOTES_v2026.04.0.md | 185 --- docs/RELEASE_NOTES_v2026.05.0.md | 277 ---- docs/RELEASE_NOTES_v2026.06.0.md | 64 - docs/RELEASE_NOTES_v2026.07.0.md | 413 ------ docs/RELEASE_NOTES_v2026.07.1.md | 90 -- docs/chat_plan.md | 616 -------- docs/ci-pipeline-reference.md | 224 --- docs/future_development_plan.md | 633 -------- docs/img/architecture.dot | 129 -- docs/img/architecture.png | Bin 122286 -> 0 bytes docs/img/handbook/activity.png | Bin 226926 -> 0 bytes docs/img/handbook/alert_rules.png | Bin 166822 -> 0 bytes docs/img/handbook/alert_rules_new.png | Bin 243056 -> 0 bytes docs/img/handbook/analytics.png | Bin 212749 -> 0 bytes docs/img/handbook/approvals.png | Bin 156991 -> 0 bytes docs/img/handbook/audit_log.png | Bin 243718 -> 0 bytes docs/img/handbook/catalog_admin.png | Bin 165510 -> 0 bytes docs/img/handbook/catalog_admin_new.png | Bin 230440 -> 0 bytes docs/img/handbook/credentials.png | Bin 216413 -> 0 bytes docs/img/handbook/credentials_new.png | Bin 198515 -> 0 bytes docs/img/handbook/dashboard.png | Bin 221523 -> 0 bytes docs/img/handbook/drift_alerts.png | Bin 166765 -> 0 bytes docs/img/handbook/drift_detections.png | Bin 183035 -> 0 bytes docs/img/handbook/event_logs.png | Bin 174772 -> 0 bytes docs/img/handbook/event_rules.png | Bin 167422 -> 0 bytes docs/img/handbook/event_rules_new.png | Bin 246479 -> 0 bytes docs/img/handbook/execution_environments.png | Bin 171791 -> 0 bytes docs/img/handbook/fact_snapshots.png | Bin 164180 -> 0 bytes docs/img/handbook/hosts.png | Bin 207476 -> 0 bytes docs/img/handbook/instance_groups.png | Bin 190313 -> 0 bytes docs/img/handbook/instances.png | Bin 182639 -> 0 bytes docs/img/handbook/inventories.png | Bin 201329 -> 0 bytes docs/img/handbook/inventories_new.png | Bin 186471 -> 0 bytes docs/img/handbook/jobs.png | Bin 177308 -> 0 bytes docs/img/handbook/my_requests.png | Bin 147502 -> 0 bytes docs/img/handbook/notifications.png | Bin 177165 -> 0 bytes docs/img/handbook/notifications_new.png | Bin 189644 -> 0 bytes docs/img/handbook/observability.png | Bin 187591 -> 0 bytes docs/img/handbook/organizations.png | Bin 203688 -> 0 bytes docs/img/handbook/organizations_new.png | Bin 186847 -> 0 bytes docs/img/handbook/outbound_webhooks.png | Bin 179953 -> 0 bytes docs/img/handbook/outbound_webhooks_new.png | Bin 238639 -> 0 bytes docs/img/handbook/policies.png | Bin 175076 -> 0 bytes docs/img/handbook/policies_new.png | Bin 268387 -> 0 bytes docs/img/handbook/policy_decisions.png | Bin 162199 -> 0 bytes docs/img/handbook/projects.png | Bin 197262 -> 0 bytes docs/img/handbook/projects_new.png | Bin 230600 -> 0 bytes docs/img/handbook/quota_events.png | Bin 166588 -> 0 bytes docs/img/handbook/scan_results.png | Bin 165769 -> 0 bytes docs/img/handbook/scanners.png | Bin 171558 -> 0 bytes docs/img/handbook/scanners_new.png | Bin 229967 -> 0 bytes docs/img/handbook/schedules.png | Bin 261766 -> 0 bytes docs/img/handbook/schedules_new.png | Bin 278441 -> 0 bytes docs/img/handbook/service_portal.png | Bin 156933 -> 0 bytes docs/img/handbook/settings.png | Bin 184384 -> 0 bytes docs/img/handbook/teams.png | Bin 170241 -> 0 bytes docs/img/handbook/teams_new.png | Bin 181911 -> 0 bytes docs/img/handbook/templates.png | Bin 225551 -> 0 bytes docs/img/handbook/templates_new.png | Bin 230662 -> 0 bytes docs/img/handbook/tenants.png | Bin 161734 -> 0 bytes docs/img/handbook/tenants_new.png | Bin 233618 -> 0 bytes docs/img/handbook/topology.png | Bin 152500 -> 0 bytes docs/img/handbook/users.png | Bin 181602 -> 0 bytes docs/img/handbook/users_new.png | Bin 192417 -> 0 bytes docs/mobile_plan.md | 815 ----------- docs/plan_detailed.md | 1036 ------------- docs/plan_development.md | 601 -------- docs/plan_separation.md | 345 ----- docs/screenshots/.gitignore | 1 - docs/screenshots/README.md | 65 - docs/screenshots/package-lock.json | 62 - docs/screenshots/package.json | 13 - docs/screenshots/probe-forms.mjs | 82 -- docs/screenshots/screenshots.mjs | 489 ------- docs/startrun.md | 299 ---- docs/wiki-index.md | 77 - 85 files changed, 4 insertions(+), 10063 deletions(-) delete mode 100644 docs/00-platform-architecture.md delete mode 100644 docs/01-architecture-overview.md delete mode 100644 docs/07-docker-deployment.md delete mode 100644 docs/08-ci-cd-pipeline.md delete mode 100644 docs/10-contributing-guide.md delete mode 100644 docs/ADMIN_HANDBOOK.md delete mode 100644 docs/HANDBOOK.md delete mode 100644 docs/RELEASE_NOTES_v2026.03.0.md delete mode 100644 docs/RELEASE_NOTES_v2026.04.0.md delete mode 100644 docs/RELEASE_NOTES_v2026.05.0.md delete mode 100644 docs/RELEASE_NOTES_v2026.06.0.md delete mode 100644 docs/RELEASE_NOTES_v2026.07.0.md delete mode 100644 docs/RELEASE_NOTES_v2026.07.1.md delete mode 100644 docs/chat_plan.md delete mode 100644 docs/ci-pipeline-reference.md delete mode 100644 docs/future_development_plan.md delete mode 100644 docs/img/architecture.dot delete mode 100644 docs/img/architecture.png delete mode 100644 docs/img/handbook/activity.png delete mode 100644 docs/img/handbook/alert_rules.png delete mode 100644 docs/img/handbook/alert_rules_new.png delete mode 100644 docs/img/handbook/analytics.png delete mode 100644 docs/img/handbook/approvals.png delete mode 100644 docs/img/handbook/audit_log.png delete mode 100644 docs/img/handbook/catalog_admin.png delete mode 100644 docs/img/handbook/catalog_admin_new.png delete mode 100644 docs/img/handbook/credentials.png delete mode 100644 docs/img/handbook/credentials_new.png delete mode 100644 docs/img/handbook/dashboard.png delete mode 100644 docs/img/handbook/drift_alerts.png delete mode 100644 docs/img/handbook/drift_detections.png delete mode 100644 docs/img/handbook/event_logs.png delete mode 100644 docs/img/handbook/event_rules.png delete mode 100644 docs/img/handbook/event_rules_new.png delete mode 100644 docs/img/handbook/execution_environments.png delete mode 100644 docs/img/handbook/fact_snapshots.png delete mode 100644 docs/img/handbook/hosts.png delete mode 100644 docs/img/handbook/instance_groups.png delete mode 100644 docs/img/handbook/instances.png delete mode 100644 docs/img/handbook/inventories.png delete mode 100644 docs/img/handbook/inventories_new.png delete mode 100644 docs/img/handbook/jobs.png delete mode 100644 docs/img/handbook/my_requests.png delete mode 100644 docs/img/handbook/notifications.png delete mode 100644 docs/img/handbook/notifications_new.png delete mode 100644 docs/img/handbook/observability.png delete mode 100644 docs/img/handbook/organizations.png delete mode 100644 docs/img/handbook/organizations_new.png delete mode 100644 docs/img/handbook/outbound_webhooks.png delete mode 100644 docs/img/handbook/outbound_webhooks_new.png delete mode 100644 docs/img/handbook/policies.png delete mode 100644 docs/img/handbook/policies_new.png delete mode 100644 docs/img/handbook/policy_decisions.png delete mode 100644 docs/img/handbook/projects.png delete mode 100644 docs/img/handbook/projects_new.png delete mode 100644 docs/img/handbook/quota_events.png delete mode 100644 docs/img/handbook/scan_results.png delete mode 100644 docs/img/handbook/scanners.png delete mode 100644 docs/img/handbook/scanners_new.png delete mode 100644 docs/img/handbook/schedules.png delete mode 100644 docs/img/handbook/schedules_new.png delete mode 100644 docs/img/handbook/service_portal.png delete mode 100644 docs/img/handbook/settings.png delete mode 100644 docs/img/handbook/teams.png delete mode 100644 docs/img/handbook/teams_new.png delete mode 100644 docs/img/handbook/templates.png delete mode 100644 docs/img/handbook/templates_new.png delete mode 100644 docs/img/handbook/tenants.png delete mode 100644 docs/img/handbook/tenants_new.png delete mode 100644 docs/img/handbook/topology.png delete mode 100644 docs/img/handbook/users.png delete mode 100644 docs/img/handbook/users_new.png delete mode 100644 docs/mobile_plan.md delete mode 100644 docs/plan_detailed.md delete mode 100644 docs/plan_development.md delete mode 100644 docs/plan_separation.md delete mode 100644 docs/screenshots/.gitignore delete mode 100644 docs/screenshots/README.md delete mode 100644 docs/screenshots/package-lock.json delete mode 100644 docs/screenshots/package.json delete mode 100644 docs/screenshots/probe-forms.mjs delete mode 100644 docs/screenshots/screenshots.mjs delete mode 100644 docs/startrun.md delete mode 100644 docs/wiki-index.md diff --git a/.gitignore b/.gitignore index 9fd00d0..a41e8b5 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,7 @@ ssl/certs/ *.swp *.swo *~ + +# Documentation sources live on the host only; the site publishes the generated +# pages from forail-platform.github.io. +docs/ diff --git a/docs/00-platform-architecture.md b/docs/00-platform-architecture.md deleted file mode 100644 index 403bc78..0000000 --- a/docs/00-platform-architecture.md +++ /dev/null @@ -1,158 +0,0 @@ -# 00 — Platform Architecture - -This is the **platform-wide** map: how the eight Forail repositories fit -together, how a request flows from the browser down to a managed host, -and how the GitOps control plane (Kubernetes operator) drives Forail -through its REST API. For the internals of a single deployment (Nginx → -uWSGI/Daphne → Postgres/Redis → Receptor), see -[01 — Architecture Overview](01-architecture-overview.md). - ---- - -## Repository Map - -Forail is split into eight repositories, each independently buildable and -releasable, published under the `forail-platform` GitHub org and -`ghcr.io/forail-platform` container registry. - -| Repository | Role | Artifact | Versioning | -| ---------------------- | --------------------------------------------------------------------------- | --------------------------------------- | -------------------------------- | -| **forail-backend** | Django/DRF API, Celery task engine, Receptor mesh, RBAC, EDA, policy, audit | `ghcr.io/forail-platform/forail-backend` | CalVer | -| **forail-frontend** | React 18 + TypeScript + Vite SPA | `ghcr.io/forail-platform/forail-frontend` | CalVer | -| **forail-deploy** | Docker Compose, CI/CD, Nginx/OTel/OPA config, handbooks, this wiki | (compose project) | CalVer | -| **forail-assistant** | Optional AI microservice (Ollama + ChromaDB + FastAPI, RAG) | `ghcr.io/forail-platform/forail-assistant` | CalVer (preview) | -| **forail-operator** | Kubernetes operator, 9 CRDs, OLM bundle (GitOps control plane) | `ghcr.io/forail-platform/forail-operator` | SemVer | -| **forail-helm** | Helm chart that deploys the whole stack on Kubernetes | Helm chart | SemVer chart / CalVer appVersion | -| **forail-dev-cluster** | Vagrant + k3s test cluster (3 control-plane + 4 workers) | (Vagrant env) | CalVer | -| **github-org-profile** | Org `.github` repo: profile README, CoC, PR template | (community health) | — | - -### Dependency direction - -``` - forail-frontend ──┐ - ▼ - forail-backend ◀──── forail-operator (drives via REST /api/v2/) - ▲ │ - forail-assistant ─┘ (optional, SSE) │ - ▼ - forail-deploy ──▶ Docker Compose forail-helm ──▶ Kubernetes - ▲ - forail-dev-cluster (k3s target) -``` - -- **forail-backend** is the center of gravity — every other component - either renders its API (frontend), augments it (assistant), packages it - (deploy/helm), or drives it (operator). -- The **operator never touches the database** — it only calls the public - REST API (`/api/v2/`), exactly like a human admin would. This keeps the - control plane decoupled from backend internals. - ---- - -## Flow A — Interactive request (Browser → API → host) - -``` -Browser ──HTTPS:443──▶ Nginx (external, TLS) ──HTTP:8013──▶ Nginx (internal) - │ - ┌───────────────────────────────────────────┼──────────────┐ - │ /api/ /websocket/ │ / │ - ▼ ▼ ▼ - uWSGI:8050 Daphne:8051 static SPA (frontend) - │ │ - ▼ │ (job events relayed back over WS) - Django (forail-web) │ - │ │ - ┌───────────┼──────────────┘ - ▼ ▼ - Postgres:5432 Redis:6379 ──▶ Celery dispatcher (forail-task) ──▶ Receptor mesh ──▶ managed hosts -``` - -Frontend is served as static assets and talks to the same origin; live -job output streams back over the Django Channels WebSocket (Daphne). - -## Flow B — GitOps control plane (kubectl → Operator → Forail) - -This is the path the **forail-operator** adds. Verified end-to-end on -`forail-dev-cluster` (k3s v1.30.4): - -``` - kubectl apply organization.yaml - │ - ▼ - Kubernetes API server (CR stored, schema-validated by the CRD) - │ watch - ▼ - forail-operator (ns forail-operator) - │ GET/POST http://forail-web.forail.svc.cluster.local:8013/api/v2/organizations/ - │ Authorization: Bearer - ▼ - forail-backend ──▶ Postgres (Organization row created → id returned) - │ - ▼ - operator writes status back to the CR: status.forailID=2, Ready=True ("in sync with Forail") -``` - -The nine CRDs (`forail.forail-platform.io/v1alpha1`) — Organization, Team, -Project, Inventory, Credential, JobTemplate, Schedule, Workflow, and the -multi-cluster `ForailInstance` — each reconcile the same way: read CR -spec, call the matching `/api/v2/` endpoint, record the Forail object ID -and a `Ready`/`Synced` condition, and run a finalizer to delete the -Forail object when the CR is removed. `ForailInstance` lets one operator -drive several Forail backends (a `ClientPool` keyed by `spec.forailInstance`). - ---- - -## Deployment topologies - -| Path | Tooling | Use case | -| ------------------ | ---------------- | ---------------------------------------------------------------- | -| **Docker Compose** | `forail-deploy` | Single-host install, dev, small prod | -| **Helm** | `forail-helm` | Kubernetes deployment of the full stack | -| **Operator** | `forail-operator` | GitOps management of Forail objects (on top of either deployment) | - -The operator is **orthogonal** to how Forail itself is deployed: it -manages Forail _objects_ (orgs, projects, job templates…) declaratively -and can point at a Forail installed by Compose, Helm, or anything else, as -long as it can reach `/api/v2/` with a token. - ---- - -## Versioning policy - -Forail deliberately uses **two** versioning schemes. Which one a repo uses -depends on _what kind of thing it is_, not on preference. - -| Scheme | Format | Repos | Why | -| ---------- | ---------------------------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **CalVer** | `YYYY.MM.PATCH` (e.g. `2026.05.0`) | forail-backend, forail-frontend, forail-deploy, forail-assistant, forail-dev-cluster | These ship together as one **coordinated platform release**. A user runs "the May 2026 platform" — the date _is_ the meaningful version. They have no independent API/compat contract with each other beyond "same platform release". | -| **SemVer** | `MAJOR.MINOR.PATCH` (e.g. `1.0.0`) | forail-operator, forail-helm | These are **independently consumed artifacts** with their own compatibility contracts, governed by ecosystem rules. Helm requires the chart `version` to be SemVer; OLM/OperatorHub builds its upgrade graph from SemVer. Breaking the CRD API or chart values is a SemVer **major**, regardless of the calendar. | - -### How the two bridge - -- **forail-helm** carries both: `version: 1.0.0` (SemVer — the chart's own - version, per the Helm spec) and `appVersion: 2026.05.0` (CalVer — the - platform release it installs). Bump `version` when the chart templates - change; bump `appVersion` when it targets a newer platform release. -- **forail-operator** Chart `version` and `appVersion` are both `1.0.0` - because the chart and the operator binary it deploys version together. - -### When to bump - -- **CalVer repos:** new `YYYY.MM` for each monthly platform release; - `.PATCH` for fixes within that month. -- **forail-operator (SemVer):** _major_ on a breaking CRD-API change - (e.g. a `v1alpha1` → `v1beta1` migration or removed field); _minor_ for - a new CRD or backward-compatible field; _patch_ for bug fixes. -- **forail-helm (SemVer):** _major_ on a breaking `values.yaml` change; - _minor_ for new opt-in values; _patch_ for template fixes. Track the - platform in `appVersion`. - ---- - -## See also - -- [01 — Architecture Overview](01-architecture-overview.md) — single-deployment internals -- [08 — CI/CD Pipeline](08-ci-cd-pipeline.md) — how images are built and released -- [wiki-index](wiki-index.md) — full documentation index -- `forail-operator/README.md` — CRD reference and operator install -- `forail-helm/README.md` — Kubernetes deployment diff --git a/docs/01-architecture-overview.md b/docs/01-architecture-overview.md deleted file mode 100644 index 5741b69..0000000 --- a/docs/01-architecture-overview.md +++ /dev/null @@ -1,231 +0,0 @@ -# 01 — Architecture Overview - -## System Diagram - -![Forail Architecture](img/architecture.png) - -
-Text version (for terminals) - -``` - ┌─────────────────────────────────────────┐ - │ End Users │ - │ (Browser / API Client) │ - └────────────────┬────────────────────────┘ - │ - HTTPS (443) - │ - ┌────────────────▼────────────────────────┐ - │ Nginx (External) │ - │ TLS termination, rate limiting, │ - │ security headers, HTTP→HTTPS redirect │ - └────────────────┬────────────────────────┘ - │ - HTTP (8013) - │ - ┌──────────────────────────▼──────────────────────────┐ - │ Nginx (Internal) │ - │ Routes requests to correct backend │ - ├──────────────┬──────────────────┬───────────────────┤ - │ /static/ │ /api/, /sso/, │ /websocket/ │ - │ (files) │ / (pages) │ (real-time) │ - └──────┬───────┴────────┬─────────┴──────┬────────────┘ - │ │ │ - Static files uWSGI (8050) Daphne (8051) - /var/lib/awx/ Django WSGI Django ASGI - public/static/ (sync HTTP) (WebSocket) - │ │ - ┌──────────────────────▼─────────────────▼────────────┐ - │ Django Application │ - │ REST API ─── Serializers ─── Models ─── Database │ - └──────────────────────┬───────────────────────────────┘ - │ - ┌────────────────▼────────┐ - │ PostgreSQL (5432) │ - └─────────────────────────┘ - - ┌──────────────────────────────────────────────────────┐ - │ Task Container │ - │ │ - │ Dispatcher ──► Ansible Runner ──► Callback Receiver │ - │ │ │ │ - │ │ Receptor WSRelay │ - │ │ (mesh networking) │ │ - └───────┼────────────────────────────────────┼─────────┘ - │ │ - ▼ ▼ - ┌──────────┐ ┌──────────────┐ - │ Redis │ │ WebSocket │ - │ (6379) │ │ Clients │ - └──────────┘ └──────────────┘ -``` - -
- ---- - -## Component Roles - -### Web Container (`forail-web`) - -Handles all HTTP and WebSocket traffic. Runs three processes via `supervisord`: - -| Process | Port | Purpose | -| ---------------- | ---- | ------------------------------------------- | -| Nginx (internal) | 8013 | Routes requests, serves static files | -| uWSGI | 8050 | Django app — API, pages, authentication | -| Daphne | 8051 | WebSocket connections for real-time updates | - -**Watch out:** Internal Nginx is inside the container and handles routing. External Nginx -is a separate container that terminates TLS. Don't confuse them — configuration lives in -two different files: - -- External: `tools/docker-compose-prod/nginx/nginx.conf` -- Internal: `tools/docker-compose-prod/settings/nginx-internal.conf` - -### Task Container (`forail-task`) - -Handles background job execution. Runs four processes: - -| Process | Purpose | -| --------------------- | ------------------------------------------------------ | -| **Dispatcher** | Picks tasks from Redis, manages capacity, starts jobs | -| **Callback Receiver** | Receives events from Ansible Runner, saves to database | -| **WSRelay** | Broadcasts job events to WebSocket clients | -| **Receptor** | Mesh networking for remote job execution | - -**Watch out:** If any of these 4 processes goes down, jobs won't work correctly. -Check with `supervisorctl status` inside the container. - -### PostgreSQL - -Stores all data: models, job events (partitioned), activity stream, RBAC roles, -configuration. Job events are in a **partitioned table** — one partition per job, -which is critical for performance since a single job can have tens of thousands of events. - -### Redis - -Used for two purposes: - -- **DB 0:** Celery message broker + Django Channels (WebSocket) -- **DB 1:** Cache (API response caching, rate limiting) - -**Watch out:** If Redis goes down, jobs won't start and WebSocket won't work. -However, data in PostgreSQL remains safe. - -### Receptor - -Mesh networking for distributed job execution. In a single-node deployment -(default), Receptor runs locally. In a multi-node setup, it routes jobs to -remote execution nodes over TCP port 2222. - ---- - -## Request Flow — What happens when - -### ...a user launches a job template - -1. User clicks "Launch" in the UI or sends POST to `/api/v2/job_templates/{id}/launch/` -2. Django creates a `Job` record in the database with status `pending` -3. A Celery task is placed in the Redis queue -4. Dispatcher picks up the task and transitions the job to `waiting` → `running` -5. Ansible Runner executes the playbook -6. Events flow: Runner → Callback Receiver → database + WSRelay → WebSocket → browser -7. Browser receives events and updates the UI in real-time (no page refresh needed) - -### ...an external system sends a webhook (EDA) - -1. External system (GitHub, Alertmanager, etc.) sends POST to `/api/v2/eda_webhooks//` -2. Nginx forwards to uWSGI (no authentication required on this endpoint) -3. Django verifies the HMAC signature against the EventRule's webhook key -4. An `EventLog` record is created with status `received` -5. A Celery task is dispatched for async rule evaluation -6. The Celery task evaluates Jinja2 conditions against the webhook payload -7. If conditions match: launches job templates, workflows, or sends notifications -8. `EventLog` is updated with results; `AuditEvent` is created for compliance -9. Caller receives `202 Accepted` immediately (processing is async) - -### ...a user opens a page in the browser - -1. Browser sends a GET request -2. Nginx terminates TLS, forwards to internal Nginx (8013) -3. Internal Nginx: - - `/static/*` → serves files directly from disk - - `/websocket/*` → proxies to Daphne (8051) - - Everything else → proxies to uWSGI (8050) -4. Django processes the request: middleware → URL routing → view → serializer → response - ---- - -## Port Reference - -| Port | Service | Description | -| ---- | ---------------- | ---------------------------------------- | -| 443 | Nginx (external) | HTTPS entry point for users | -| 80 | Nginx (external) | HTTP → redirect to HTTPS | -| 8013 | Nginx (internal) | Internal routing (within Docker network) | -| 8050 | uWSGI | Django sync application | -| 8051 | Daphne | Django async (WebSocket) | -| 5432 | PostgreSQL | Database | -| 6379 | Redis | Broker + cache | -| 2222 | Receptor | Mesh networking | - -**Watch out:** Ports 8050 and 8051 are not externally accessible — only internal Nginx -on 8013 communicates with them. Do not expose 8050/8051 outside the Docker network. - ---- - -## Directory Structure — Where things live - -``` -forail/ # Python backend -├── api/ # REST API (views, serializers, urls) -├── main/ # Core (models, tasks, signals, migrations, commands) -├── conf/ # Database-backed settings -├── settings/ # Django settings files -├── sso/ # SSO authentication backends -└── ui_next/ # React frontend - -tools/ -├── docker-compose-prod/ # Production deployment -│ ├── docker-compose.yml # 6 services -│ ├── .env # Environment variables -│ ├── settings/ # Django settings for production -│ ├── nginx/ # Nginx config + SSL certificates -│ ├── receptor/ # Receptor mesh config -│ └── scripts/ # Init, backup, healthcheck -├── ansible/roles/dockerfile/ # Dockerfile generation -└── scripts/ # Vagrant provisioning - -requirements/ # Python dependencies -``` - ---- - -## Key Design Decisions - -### Why two Nginx instances? - -Internal Nginx is part of the Docker image and routes requests to uWSGI/Daphne. -External Nginx is a separate container that handles TLS termination, rate limiting, -and security headers. This separation allows the external Nginx to be replaced -with a load balancer (HAProxy, AWS ALB) without changing the application. - -### Why partitioned job events? - -A single job with 100 hosts and 50 tasks generates ~5,000 events. A system running -100 jobs daily has ~500,000 events per day. Without partitioning, every query would -scan the entire table. With partitioning, a query for a specific job reads only -one partition. - -### Why Receptor instead of SSH? - -Receptor provides mesh networking — hop-by-hop routing for air-gapped environments, -automatic failover, and multiplexing. SSH requires a direct connection to every -node, which doesn't work in complex network topologies. - -### Why database-backed settings? - -Most settings can be changed without restarting the application via the API -(`/api/v2/settings/`). This is critical for production where you don't want -downtime to change a timeout or add an LDAP server. diff --git a/docs/07-docker-deployment.md b/docs/07-docker-deployment.md deleted file mode 100644 index 846da19..0000000 --- a/docs/07-docker-deployment.md +++ /dev/null @@ -1,322 +0,0 @@ -# 07 — Docker & Deployment - -How to build, configure, and deploy Forail Platform to production. - ---- - -## Architecture - -Forail Platform uses a separated architecture with independent Docker images: - -| Service | Image | Purpose | -| -------------- | -------------------------------------- | ----------------------------------------------- | -| forail-web | `ghcr.io/forail-platform/forail-backend` | Django API (uwsgi + daphne + nginx-internal) | -| forail-task | `ghcr.io/forail-platform/forail-backend` | Task execution (dispatcher, callback, receptor) | -| forail-init | `ghcr.io/forail-platform/forail-backend` | One-shot: migrations, admin user, provisioning | -| forail-frontend | `ghcr.io/forail-platform/forail-frontend` | React SPA served by nginx | -| postgres | `postgres:15-alpine` | Database | -| redis | `redis:7-alpine` | Cache and message broker | -| nginx | `nginx:1.27-alpine` | TLS termination, routing | - -### Startup Order - -``` -postgres ──► redis ──► forail-init ──► forail-web ──► forail-task ──► nginx - forail-frontend ──┘ -``` - -Each service waits for the previous one to be healthy before starting. - -### Request Routing (External Nginx) - -| Path | Destination | Description | -| ---------------------- | ----------------- | -------------------- | -| `/api/*` | forail-web:8013 | REST API | -| `/sso/*` | forail-web:8013 | SSO/SAML/LDAP | -| `/api/login/` | forail-web:8013 | Login (rate-limited) | -| `/(api/)?websocket/` | forail-web:8013 | WebSocket (upgrade) | -| `/*` (everything else) | forail-frontend:80 | React SPA | - ---- - -## Building Docker Images - -### Backend - -```bash -cd forail-backend -docker build -t ghcr.io/forail-platform/forail-backend:latest . -docker push ghcr.io/forail-platform/forail-backend:latest -``` - -The Dockerfile is a multi-stage build: - -1. **builder** (Ubuntu 24.04): installs Python deps, builds sdist, runs collectstatic -2. **runtime** (Ubuntu 24.04): minimal image with runtime deps, receptor, supervisor - -### Frontend - -```bash -cd forail-frontend -docker build -t ghcr.io/forail-platform/forail-frontend:latest . -docker push ghcr.io/forail-platform/forail-frontend:latest -``` - -The Dockerfile is a multi-stage build: - -1. **builder** (Node 20 Alpine): `npm ci && npm run build` -2. **runtime** (nginx 1.27 Alpine): serves built assets with SPA fallback - ---- - -## Production Deployment - -### Prerequisites - -- Docker 24+ with Compose v2 -- 8GB+ RAM, 4+ CPU cores -- Domain name with SSL certificate (or self-signed for testing) - -### Quick Start - -```bash -cd forail-deploy - -# 1. Create configuration -cp .env.example .env -# Edit .env — set all REQUIRED values (see below) - -# 2. SSL certificates -mkdir -p nginx/ssl - -# Let's Encrypt (production): -certbot certonly --standalone -d forail.example.com -cp /etc/letsencrypt/live/forail.example.com/fullchain.pem nginx/ssl/ -cp /etc/letsencrypt/live/forail.example.com/privkey.pem nginx/ssl/ - -# Or self-signed (testing): -openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ - -keyout nginx/ssl/privkey.pem -out nginx/ssl/fullchain.pem \ - -subj "/CN=forail.example.com" - -# 3. Deploy -docker compose up -d - -# 4. Watch initialization -docker compose logs -f forail-init - -# 5. Verify -curl -k https://forail.example.com/api/v2/ping/ -``` - -### Deploy in Vagrant (testing) - -```bash -cd forail-deploy -vagrant up # Ubuntu 24.04 VM + Docker + Compose + SSL + .env auto-generated -vagrant ssh -cd /forail-deploy -docker compose up -d - -# Access from host: https://192.168.56.22/ -``` - ---- - -## Environment Variables - -### Required - -| Variable | Description | Generate with... | -| ---------------------------------- | ----------------- | --------------------------- | -| `POSTGRES_PASSWORD` | DB password | `openssl rand -hex 16` | -| `FORAIL_SECRET_KEY` | Django crypto key | `openssl rand -hex 32` | -| `FORAIL_BROADCAST_WEBSOCKET_SECRET` | WS auth secret | `openssl rand -hex 32` | -| `FORAIL_ADMIN_PASSWORD` | Admin password | Strong password | -| `FORAIL_CSRF_TRUSTED_ORIGINS` | CSRF origins | `https://forail.example.com` | - -### Optional - -| Variable | Default | Description | -| ---------------------- | -------------------------------------- | ----------------------------------- | -| `FORAIL_ALLOWED_HOSTS` | `localhost,127.0.0.1` | Allowed HTTP hosts — list your real hostnames; `*` disables the Host check | -| `FORAIL_ADMIN_USER` | `admin` | Admin username | -| `FORAIL_ADMIN_EMAIL` | `admin@example.com` | Admin email | -| `FORAIL_NODE_NAME` | `forail-node` | Instance hostname | -| `FORAIL_NODE_TYPE` | `hybrid` | `hybrid`, `control`, or `execution` | -| `FORAIL_BACKEND_IMAGE` | `ghcr.io/forail-platform/forail-backend` | Backend Docker image | -| `FORAIL_FRONTEND_IMAGE` | `ghcr.io/forail-platform/forail-frontend` | Frontend Docker image | -| `FORAIL_TAG` | `2026.07.0` | Image tag — pinned to a release, not `latest` | -| `FORAIL_TASK_PRIVILEGED` | `false` | Run `forail-task` privileged. Required for the podman-in-container job path | -| `FORAIL_TASK_CGROUP` | `private` | Set to `host` together with `FORAIL_TASK_PRIVILEGED=true` for job execution | -| `NGINX_HTTP_PORT` | `80` | External HTTP port | -| `NGINX_HTTPS_PORT` | `443` | External HTTPS port | - -### Watch out - -- **`FORAIL_SECRET_KEY` MUST REMAIN THE SAME** between upgrades. If you change it, - all sessions, tokens, and encrypted credentials become invalid. - -- **`FORAIL_CSRF_TRUSTED_ORIGINS` must include the full URL** with `https://`. Without - it, the login form won't work (403 CSRF error). - ---- - -## SSL/TLS - -### Let's Encrypt (recommended for production) - -```bash -certbot certonly --standalone -d forail.example.com -cp /etc/letsencrypt/live/forail.example.com/{fullchain,privkey}.pem nginx/ssl/ -``` - -Auto-renewal (crontab): - -```bash -0 0 1 * * certbot renew && cp /etc/letsencrypt/live/forail.example.com/*.pem /path/to/nginx/ssl/ && docker compose restart nginx -``` - -### Security Notes - -- Nginx is configured for **TLS 1.2 and 1.3** — older versions are disabled -- **HSTS** header is enabled (63072000 seconds) -- **Rate limiting** on `/api/login/` — 5 requests/second, burst 10 -- `client_max_body_size` is **50MB** - ---- - -## Backup & Restore - -### Backup - -```bash -docker compose exec forail-task bash /etc/forail/backup.sh - -# With custom retention (30 days) -docker compose exec forail-task bash /etc/forail/backup.sh 30 -``` - -### Scheduled backup (crontab) - -```bash -0 2 * * * cd /path/to/forail-deploy && docker compose exec -T forail-task bash /etc/forail/backup.sh -``` - -### Restore - -```bash -docker compose stop forail-web forail-task -gunzip -c forail_backup_20260317.sql.gz | docker compose exec -T postgres psql -U forail forail -docker compose start forail-web forail-task -``` - ---- - -## Health Checks - -```bash -# API ping (no auth) -curl -k https://forail.example.com/api/v2/ping/ - -# Instance capacity (auth required) -curl -k -u admin:password https://forail.example.com/api/v2/instances/ - -# Service status -docker compose ps - -# Supervisor processes -docker compose exec forail-web supervisorctl status -docker compose exec forail-task supervisorctl status -``` - ---- - -## Troubleshooting - -### Container won't start - -```bash -docker compose logs forail-init # Check migrations and init -# "database does not exist" → POSTGRES_DB mismatch -# "authentication failed" → POSTGRES_PASSWORD mismatch -``` - -### Can't log in (403 CSRF) - -```bash -# Check FORAIL_CSRF_TRUSTED_ORIGINS in .env -# Must be full URL with https:// (e.g., https://192.168.56.22) -``` - -### Server Error (500 on root page) - -```bash -# Check if frontend container is running -docker compose ps forail-frontend -# Must be healthy - -# Check nginx routing -docker compose logs nginx -``` - -### Jobs not running - -```bash -docker compose exec forail-task supervisorctl status -# All 4 must be RUNNING: receptor, dispatcher, callback-receiver, wsrelay - -docker compose exec forail-web forail-manage list_instances -``` - -### Forgotten admin password - -```bash -docker compose exec forail-web forail-manage update_password --username=admin --password=NewPass123! -``` - ---- - -## Upgrading - -```bash -cd forail-deploy - -# 1. Pull new images -docker compose pull - -# 2. Recreate containers (migrations run automatically via forail-init) -docker compose up -d - -# 3. Verify -docker compose ps -curl -k https://forail.example.com/api/v2/ping/ -``` - ---- - -## Scaling - -### Adding an execution node - -```bash -# On the execution node: -docker run -d --name forail-task \ - -e DATABASE_HOST=db.example.com \ - -e REDIS_HOST=redis.example.com \ - -e FORAIL_NODE_TYPE=execution \ - -e FORAIL_NODE_NAME=exec-node-1 \ - ghcr.io/forail-platform/forail-backend:latest launch_awx_task.sh - -# On the control node: -docker compose exec forail-web forail-manage provision_instance --hostname=exec-node-1 --node-type=execution -docker compose exec forail-web forail-manage register_queue --queuename=default --hostnames=exec-node-1 -``` - -### Recommended Hardware - -| Size | CPU | RAM | Disk | -| -------------------- | --- | ---- | --------- | -| Small (≤100 hosts) | 4 | 8GB | 50GB SSD | -| Medium (≤1000 hosts) | 8 | 16GB | 100GB SSD | -| Large (≤10000 hosts) | 16 | 32GB | 200GB SSD | diff --git a/docs/08-ci-cd-pipeline.md b/docs/08-ci-cd-pipeline.md deleted file mode 100644 index 4efe618..0000000 --- a/docs/08-ci-cd-pipeline.md +++ /dev/null @@ -1,182 +0,0 @@ -# 08 — CI/CD Pipeline - -Forail Platform uses **GitHub Actions** as the public CI/CD pipeline. Each repository has its own workflow in `.github/workflows/` that runs on push and pull request. - ---- - -## Pipeline Overview - -``` -┌──────────┐ ┌────────┐ ┌────────┐ ┌───────────────────────────────┐ -│ Checkout │──►│ Lint │──►│ Test │───────►│ publish │ -└──────────┘ └────────┘ └────────┘ │ build → test in image → push │ - GitHub ruff / pytest / └───────────────────────────────┘ - Actions go vet vitest / envtest ONLY on a v* tag -``` - -Each repo's workflow file: **`.github/workflows/ci.yml`** - -## Pipeline Stages - -The jobs differ per repo. What each one actually runs: - -| Repo | Always (push + PR) | `publish` (v* tags only) | -| ------------------ | ---------------------------------------------------- | --------------------------------------------------------- | -| `forail-backend` | `ruff check` , `pyproject.toml` parse, standalone tests | build image → **run the Django functional tests inside the built image** → push | -| `forail-frontend` | `npm run lint`, `npm test`, `npm run build` | build and push image | -| `forail-operator` | `go vet`, `go build`, controller tests (envtest) | build and push image | -| `forail-assistant` | `pytest -q` | build and push image | - -### Stage Conditions - -| Stage | When it runs | -| ------------ | ------------------------------------------------------------------ | -| Lint, Test | Every push and every PR | -| `publish` | **Only** when the ref is a tag matching `v*` — `if: startsWith(github.ref, 'refs/tags/v')` | - -> **A merge to `main` does not produce an image.** It runs lint and tests only. -> The image on `ghcr.io` changes when, and only when, someone pushes a `v*` tag. -> This is the single most common source of confusion: `main` can be many commits -> ahead of the newest published image, and that is by design. - -### Known gaps - -These are documented as they are, not as they should be: - -- **`ruff check . || true`** in the backend — lint output is informational; lint - errors do not fail the build. -- **No container image scanning** (no Trivy) and **no `pip-audit`** stage in any - repo's workflow today. - ---- - -## GitHub Actions Secrets - -For the release stage, each repo needs the following secret: - -| Secret | Description | -| -------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -| `GITHUB_TOKEN` | Provided automatically by GitHub Actions. Used with the built-in `permissions: packages: write` to push to `ghcr.io/forail-platform/*` | - -No third-party credentials are required — everything runs in the GitHub-hosted runner with built-in tokens. - ---- - -## Docker Images - -| Image | Source | Description | -| --------------------------------------------------- | ----------------------------- | ------------------------------------- | -| `ghcr.io/forail-platform/forail-backend:` | `forail-backend/Dockerfile` | Django API + task engine | -| `ghcr.io/forail-platform/forail-frontend:` | `forail-frontend/Dockerfile` | React SPA + nginx | -| `ghcr.io/forail-platform/forail-operator:` | `forail-operator/Dockerfile` | Kubernetes operator | -| `ghcr.io/forail-platform/forail-assistant:` | `forail-assistant/Dockerfile` | FastAPI + Ollama + ChromaDB (preview) | - -Every image carries **exactly one tag: the version**, taken from the git tag with -the `v` stripped. There is **no `latest` tag** — nothing in the pipeline creates -one, so `docker pull …:latest` fails. Always pull an explicit version. - -Release-candidate tags (`v2026.07.2-rc1`) go through the same `publish` job and -produce a normal image (`…:2026.07.2-rc1`), which is how a build is validated -against a real cluster before a release is cut. - -All images are **public** — no pull secret required for `docker pull` or `helm install`. - -To see what is actually published, ask the registry rather than guessing: - -```bash -TOKEN=$(curl -s "https://ghcr.io/token?scope=repository:forail-platform/forail-backend:pull" \ - | python3 -c "import json,sys; print(json.load(sys.stdin)['token'])") -curl -s -H "Authorization: Bearer $TOKEN" \ - https://ghcr.io/v2/forail-platform/forail-backend/tags/list -``` - ---- - -## Versioning - -Forail uses **CalVer** (Calendar Versioning): - -``` -YYYY.MM.PATCH -2026.03.0 # First release of March 2026 -2026.03.1 # Patch release -2026.04.0 # April release -``` - -**Each repo carries its own tag.** There is no central tag that releases the -platform — `forail-backend`, `forail-frontend`, `forail-operator` and -`forail-assistant` are tagged individually, and only the repos that changed need -a new one. That is why published versions legitimately differ between components -(for example backend `2026.07.1` alongside frontend `2026.07.0`); the Helm chart -is what pins a working set together. - -```bash -cd forail-backend -git tag -a v2026.05.0 -m "Forail 2026.05.0" -git push github v2026.05.0 -# GitHub Actions then: lint → test → build image → test inside the image → push to ghcr.io -``` - ---- - -## Running CI Locally - -### Backend - -```bash -cd forail-backend - -# Lint -ruff check forail/ - -# Tests -DJANGO_SETTINGS_MODULE=forail.settings.development \ - python -m pytest forail/main/tests/unit/ -q - -# Build image (tag it with a version — there is no :latest) -docker build -t ghcr.io/forail-platform/forail-backend:2026.05.0 . -``` - -### Frontend - -```bash -cd forail-frontend - -# Lint -npx tsc --noEmit - -# Tests -npx vitest run - -# Build image (tag it with a version — there is no :latest) -docker build -t ghcr.io/forail-platform/forail-frontend:2026.05.0 . -``` - ---- - -## Release Process - -1. Ensure GitHub Actions is green on `main` for every repo being released -2. Bump `VERSION` in the repos that ship a version, and the Helm chart's - `version` / `appVersion` so it pins the images you are about to publish -3. Write the release notes (`forail-deploy/docs/RELEASE_NOTES_v.md`) and - the docs-site release page -4. Tag each changed repo and push the tag — this is what builds and publishes: - `git tag -a v2026.05.0 -m "Forail 2026.05.0" && git push github v2026.05.0` -5. Install the published chart and images into a clean cluster and run the full - regression before announcing anything -6. Create the GitHub Release - -### Validate before you release - -Cut an rc tag first (`v2026.05.0-rc1`). It publishes a real image through the -same job, so the release candidate can be installed into a clean cluster and put -through the full Cypress suite. Only then cut the real tag. Rc images stay on -`ghcr.io` — harmless, but do not point a chart at one. - -### Watch out - -- **Never release without passing tests.** -- **Tag format must have `v` prefix:** `v2026.05.0`, not `2026.05.0`. -- **Merging to `main` publishes nothing** — only a `v*` tag does. -- **Image visibility** — when a new package is first pushed to `ghcr.io`, GitHub creates it as **private** by default. You must manually flip it to public via the Packages settings (`https://github.com/orgs/forail-platform/packages`). diff --git a/docs/10-contributing-guide.md b/docs/10-contributing-guide.md deleted file mode 100644 index 8ec3cd4..0000000 --- a/docs/10-contributing-guide.md +++ /dev/null @@ -1,211 +0,0 @@ -# 10 — Contributing Guide - -Git workflow, commit conventions, coding standards, and the PR process. - ---- - -## Rules - -1. **All development and testing inside the Vagrant VM** — never install dependencies on the host -2. **Every change must be understood** — if you can't explain why, don't commit it -3. **Author of all commits is Krstan Vjestica** — never attribute tools as authors -4. **Review the diff before committing** — always -5. **Everything must pass before you commit** — not `vagrant validate`, not a syntax - check: the actual thing running. A change to the dev environment is proven by - destroying the VM and building it again; a change to the platform is proven by - a clean install plus the full Cypress regression - ---- - -## Development environment - -- **VirtualBox is the only supported provider.** libvirt/KVM must not be running - on the same host — one hypervisor owns AMD-V per boot, and the loser's guests - die with `Guru Meditation VERR_SVM_IN_USE` or wedge mid-boot. Keep `libvirtd` - masked; `forail-dev-cluster/scripts/up.sh` refuses to start if it is active. - Full root-cause writeup: `forail-dev-cluster/docs/TROUBLESHOOTING-vagrant.md`. -- **Bring the cluster up with `scripts/up.sh`**, not bare `vagrant up` — it goes - node by node in dependency order and recreates any node whose boot wedges. -- **Start from a clean state when you are testing.** `vagrant up` on an existing - VM only boots it; it does **not** re-provision. Mixing a freshly created node - with previously provisioned ones gives two different cluster CAs and a control - plane that never reaches quorum. Use `vagrant destroy -f` first. -- **The dev VMs collide on host ports.** `forail-backend` and `forail-deploy` - both forward `8013` and `8080`, so only one of them can run at a time. - ---- - -## Git Workflow - -### Branch naming - -``` -feature/dynamic-surveys # New feature -fix/job-stuck-pending # Bug fix -refactor/split-serializers # Refactoring -docs/wiki-task-engine # Documentation -test/inventory-api-tests # Tests -chore/update-dependencies # Maintenance -``` - -### Standard flow - -**`main` is the integration branch.** There is no `devel` branch in any Forail -repo — branch from `main` and target `main` in the PR. - -```bash -# 1. Create branch from main -git checkout main -git pull github main -git checkout -b feature/my-feature - -# 2. Make changes, test, commit -vagrant rsync -vagrant ssh -c "cd /awx_devel && forail-test" -git add forail/main/models/my_model.py -git commit -m "feat(models): add Policy model for governance" - -# 3. Push and create PR -git push github feature/my-feature -gh pr create --base main -``` - -### Updating the branch - -```bash -git checkout main && git pull github main -git checkout feature/my-feature -git rebase main -``` - -### Remotes - -Most repos have two: `github` (github.com/forail-platform, the canonical one, -where CI and releases run) and `origin` (the GitLab mirror). Push branches and -tags to **both** when you are done, or the mirror silently falls behind. - ---- - -## Commit Conventions - -### Format - -``` -type(scope): short description -``` - -### Types - -| Type | When | Example | -| ---------- | ------------------ | ------------------------------------------- | -| `feat` | New feature | `feat(api): add /policies/ endpoint` | -| `fix` | Bug fix | `fix(tasks): prevent job stuck in pending` | -| `refactor` | Code restructuring | `refactor(serializers): split into modules` | -| `docs` | Documentation | `docs(wiki): add task engine documentation` | -| `test` | Tests | `test(api): add inventory CRUD tests` | -| `chore` | Maintenance | `chore(deps): update Django to 4.2.18` | - -### Scopes - -`models`, `api`, `tasks`, `ui`, `auth`, `rbac`, `deploy`, `ci`, `deps` - -### Rules - -- First line **under 72 characters** -- **Imperative mood:** "add feature" not "added feature" -- **No period** at the end of the first line -- **Never AI attribution** in commit messages - ---- - -## Coding Standards - -### Python - -- Max line length: **160 characters** (configured in pyproject.toml) -- Imports: standard library → third party → local (separated by blank lines) -- Descriptive variable names: `running_jobs` not `x` -- f-strings for formatting: `f"Job {job.id} failed"` -- Never bare `except:` — always a specific exception type - -### TypeScript/React - -- Functional components with hooks (no class components) -- TypeScript interfaces for props -- TanStack Query for data fetching (not useEffect + fetch) -- `cn()` for conditional Tailwind classes -- Semantic colors (`bg-background`) not hardcoded (`bg-white`) -- Path alias `@/` instead of relative `../../..` - -### Linting (run before every commit) - -```bash -flake8 forail/ --count --statistics -cd forail/ui_next && npx tsc --noEmit -``` - ---- - -## Pull Request Process - -### Before creating a PR - -- [ ] All tests pass -- [ ] No lint errors -- [ ] Commit messages follow conventions -- [ ] Branch is rebased on latest `main` -- [ ] Changes are minimal and focused - -### PR guidelines - -- **Keep PRs small** — ideally under 500 lines. Large PRs are harder to review. -- **One concern per PR** — don't mix a bug fix with refactoring. -- **Include tests** — new features need tests, bug fixes need a regression test. -- **Target `main`** — all PRs merge into `main`. - -### Review Checklist - -**For the author:** - -- [ ] Reviewed my own diff before requesting review -- [ ] No debug code, console.log, or print statements -- [ ] No hardcoded secrets or URLs -- [ ] Error handling is adequate -- [ ] New code has tests - -**For the reviewer:** - -- [ ] Code does what the PR description says -- [ ] Security: no SQL injection, XSS, credential exposure -- [ ] Edge cases are handled (empty lists, null, concurrent access) -- [ ] Follows existing patterns in the codebase -- [ ] Will this be easy to maintain in 6 months? - ---- - -## Quick Reference — Common Development Tasks - -### Add a new API endpoint - -1. Model in `forail/main/models/` → register in `__init__.py` -2. Migration: `forail-manage makemigrations main` -3. Serializer in `forail/api/serializers/` -4. View in `forail/api/views/` -5. URL module in `forail/api/urls/` → register in `urls.py` -6. Access class in `forail/main/access.py` -7. Tests - -### Add a new frontend page - -1. TypeScript types in `src/api/types.ts` -2. API hooks in `src/api/hooks/` -3. Page in `src/pages/` -4. Route in `src/App.tsx` -5. Navigation in `src/components/layout/Sidebar.tsx` -6. Tests - -### Add a management command - -1. File in `forail/main/management/commands/` -2. Implement `Command` class with `handle()` method -3. Test: `forail-manage my_command --help` diff --git a/docs/ADMIN_HANDBOOK.md b/docs/ADMIN_HANDBOOK.md deleted file mode 100644 index cc77203..0000000 --- a/docs/ADMIN_HANDBOOK.md +++ /dev/null @@ -1,937 +0,0 @@ -# Forail Platform — Administrator Handbook - -Operational guide for installing, running, and maintaining a Forail Platform deployment. Each section is step-by-step with concrete example values you can copy. Click any item in the table of contents to jump straight to it. - -For day-to-day UI usage, see the companion [User Handbook](HANDBOOK.md). - ---- - -## Table of Contents - -### Install & First Boot - -- [Prerequisites](#prerequisites) -- [Installation (Docker Compose)](#installation-docker-compose) -- [First-Time Setup](#first-time-setup) -- [TLS / SSL Setup](#tls--ssl-setup) -- [Initial Admin Hardening](#initial-admin-hardening) - -### Day-2 Operations - -- [Starting and Stopping the Stack](#starting-and-stopping-the-stack) -- [Inspecting Logs](#inspecting-logs) -- [Health Checks](#health-checks) -- [Backup](#backup) -- [Restore](#restore) -- [Upgrade](#upgrade) -- [Rolling Back](#rolling-back) - -### Scaling & Topology - -- [Adding an Execution Node](#adding-an-execution-node) -- [Adding a Hop Node](#adding-a-hop-node) -- [Tuning Capacity](#tuning-capacity) -- [Switching to Kubernetes](#switching-to-kubernetes) - -### Observability - -- [Enabling OpenTelemetry](#enabling-opentelemetry) -- [Grafana Dashboards](#grafana-dashboards) -- [Audit Log Export](#audit-log-export) - -### Security - -- [Rotating Secrets](#rotating-secrets) -- [User & SSO Setup](#user--sso-setup) -- [Firewall & Network Hardening](#firewall--network-hardening) -- [Security Updates](#security-updates) - -### Troubleshooting - -- [Stack Won't Come Up](#stack-wont-come-up) -- [Database Connection Errors](#database-connection-errors) -- [Jobs Stuck in Pending](#jobs-stuck-in-pending) -- [Receptor / Mesh Issues](#receptor--mesh-issues) -- [Frontend Returns 502](#frontend-returns-502) -- [Disk Filling Up](#disk-filling-up) -- [Reset Admin Password](#reset-admin-password) - -### Reference - -- [Service Map](#service-map) -- [Environment Variables](#environment-variables) -- [File Layout](#file-layout) - ---- - -# INSTALL & FIRST BOOT - -## Prerequisites - -Hardware and software needed before installing Forail. - -**Step by step** - -1. Provision a host (VM or bare metal) with: - - 4 vCPU, 8 GB RAM, 50 GB disk (minimum) - - 8 vCPU, 16 GB RAM, 200 GB disk (recommended for production) -2. Install **Docker** ≥ 24 and **Docker Compose plugin** ≥ 2.20. -3. Open inbound ports **80** and **443** in your firewall. -4. Register a DNS A record pointing at the host (e.g. `forail.example.com`). -5. Make sure the system clock is in sync with NTP. - -**Example — Ubuntu 24.04 fresh box** - -```bash -sudo apt update -sudo apt install -y docker.io docker-compose-plugin -sudo systemctl enable --now docker -sudo usermod -aG docker $USER -newgrp docker -``` - ---- - -## Installation (Docker Compose) - -The standard installation uses the compose file shipped in this repo. - -**Step by step** - -1. Clone or copy `forail-deploy` to the target host: - - ```bash - git clone https://github.com/forail-platform/forail-devops.git /opt/forail - cd /opt/forail - ``` - -2. Copy the example env file and edit it: - - ```bash - cp .env.example .env - $EDITOR .env - ``` - -3. Fill in the **required** variables (see [Environment Variables](#environment-variables)). -4. Pull the images: - - ```bash - docker compose pull - ``` - -5. Bring the stack up: - - ```bash - docker compose up -d - ``` - -6. Tail the init container until it finishes: - - ```bash - docker compose logs -f forail-init - ``` - -7. When you see `==> Init complete.` you can hit `https://` in a browser. - -**Example `.env` for first install** - -```ini -POSTGRES_PASSWORD=Sup3rS3cret-pg -FORAIL_SECRET_KEY=$(openssl rand -hex 25) -FORAIL_BROADCAST_WEBSOCKET_SECRET=$(openssl rand -hex 25) -FORAIL_ADMIN_PASSWORD=ChangeMe!Now -FORAIL_CSRF_TRUSTED_ORIGINS=https://forail.example.com -FORAIL_ALLOWED_HOSTS=forail.example.com -FORAIL_TAG=2026.04.0 -``` - -> **Note:** generate the two random secrets with `openssl rand -hex 25` before pasting them into the file — do not leave the literal `$()` in `.env`. - ---- - -## First-Time Setup - -What to do the first time you log in. - -**Step by step** - -1. Open `https://forail.example.com`. -2. Log in as `admin` / your `FORAIL_ADMIN_PASSWORD`. -3. Click **Settings → License** and upload the license file (if applicable). -4. Click **Settings → System** → set **Base URL** to `https://forail.example.com`. -5. Click **Organizations → Add** and create your first organization (e.g. `Platform`). -6. Click **Users → Add** and create at least one named admin (do not keep using the default `admin`). -7. Log out, log back in as the new admin, and disable the default admin from **Users → admin → Disable**. - -**Example values** - -| Field | Value | -| ----------- | --------------------------- | -| Base URL | `https://forail.example.com` | -| First org | `Platform` | -| Named admin | `krstan` / strong password | - ---- - -## TLS / SSL Setup - -Forail ships with a self-signed cert. Replace it with a real one before exposing the box. - -**Step by step — Let's Encrypt with certbot** - -1. Stop the nginx service so port 80 is free for the ACME challenge: - - ```bash - docker compose stop nginx - ``` - -2. Run certbot in standalone mode: - - ```bash - sudo certbot certonly --standalone -d forail.example.com - ``` - -3. Copy the new cert/key into the nginx mount point: - - ```bash - sudo cp /etc/letsencrypt/live/forail.example.com/fullchain.pem nginx/ssl/forail.crt - sudo cp /etc/letsencrypt/live/forail.example.com/privkey.pem nginx/ssl/forail.key - ``` - -4. Restart nginx: - - ```bash - docker compose up -d nginx - ``` - -5. Verify: - - ```bash - curl -I https://forail.example.com - ``` - -**Example renewal cron** - -```cron -0 3 * * 1 certbot renew --pre-hook "docker compose -f /opt/forail/docker-compose.yml stop nginx" --post-hook "cp /etc/letsencrypt/live/forail.example.com/fullchain.pem /opt/forail/nginx/ssl/forail.crt && cp /etc/letsencrypt/live/forail.example.com/privkey.pem /opt/forail/nginx/ssl/forail.key && docker compose -f /opt/forail/docker-compose.yml up -d nginx" -``` - ---- - -## Initial Admin Hardening - -Things every new install should do on day one. - -**Step by step** - -1. Change `FORAIL_ADMIN_PASSWORD` in `.env` to a strong value, then `docker compose up -d forail-init` to apply. -2. In **Settings → Authentication**, disable any auth backend you don't use (LDAP, SAML, OIDC). -3. In **Settings → System**, enable **Session Cookie Secure** and set **Session Timeout** to `3600`. -4. Create at least two named admin users so no single account is the only way in. -5. Configure a [backup cron](#backup) before importing real data. -6. Configure at least one [Notification](HANDBOOK.md#notifications) channel for failure alerts. -7. Set `FORAIL_ALLOWED_HOSTS` to the hostnames you actually serve. The default is - loopback-only; `*` turns off Django's Host-header check entirely. -8. Leave `FORAIL_TASK_PRIVILEGED` / `FORAIL_TASK_CGROUP` unset unless you need the - podman-in-container job path. A privileged container with the host cgroup - namespace is a trivial escape to the host — if you do enable it, treat that - host as part of your automation trust boundary and keep it off the public - internet. -9. If you authenticate via SAML, re-check the IdP against the signed-assertion and - role-attribute requirements introduced in 2026.07.0 - (`docs/RELEASE_NOTES_v2026.07.0.md`) — unsigned or SHA-1 assertions are now - rejected by default. - ---- - -# DAY-2 OPERATIONS - -## Starting and Stopping the Stack - -**Step by step** - -```bash -# Start everything -docker compose up -d - -# Stop everything (no data loss) -docker compose stop - -# Stop and remove containers (data in volumes survives) -docker compose down - -# Restart a single service -docker compose restart forail-web -``` - -**Example — restart only the task workers after editing settings** - -```bash -docker compose restart forail-task -``` - ---- - -## Inspecting Logs - -**Step by step** - -```bash -# All services, follow -docker compose logs -f - -# One service -docker compose logs -f forail-web - -# Last 200 lines, no follow -docker compose logs --tail=200 forail-task - -# Filter by timestamp -docker compose logs --since=1h forail-web -``` - -**Example — find the most recent error in the web service** - -```bash -docker compose logs --since=24h forail-web | grep -i error | tail -20 -``` - ---- - -## Health Checks - -The stack ships with two healthcheck scripts you can run manually or from monitoring. - -**Step by step** - -```bash -# Web service -docker compose exec forail-web /scripts/healthcheck-web.sh - -# Task service -docker compose exec forail-task /scripts/healthcheck-task.sh -``` - -**Example — uptime check from outside** - -```bash -curl -fsS https://forail.example.com/api/v2/ping/ && echo OK -``` - ---- - -## Backup - -Daily backups are mandatory. Forail ships `scripts/backup.sh` which dumps Postgres and rotates old archives. - -**Step by step** - -1. Run a one-off backup to verify it works: - - ```bash - docker compose exec postgres /scripts/backup.sh - ``` - -2. Inspect the result: - - ```bash - ls -lh /var/lib/awx/backups/ - ``` - -3. Schedule a nightly cron on the host: - - ```cron - 0 2 * * * docker compose -f /opt/forail/docker-compose.yml exec -T postgres /scripts/backup.sh >> /var/log/forail-backup.log 2>&1 - ``` - -4. Copy the backups off-host (S3, rsync, etc.): - - ```cron - 30 2 * * * aws s3 sync /var/lib/awx/backups/ s3://acme-forail-backups/ - ``` - -**Example output** - -``` -==> Starting backup... -==> Backup saved to /var/lib/awx/backups/forail_backup_20260411_020000.sql.gz -==> Removing backups older than 7 days... -==> Backup complete. -``` - -> **Retention** is controlled by `BACKUP_RETENTION_DAYS` (default 7). Override in `.env` if you need longer. - ---- - -## Restore - -`scripts/restore.sh` reads a `.sql.gz` and pipes it back into Postgres. - -**Step by step** - -1. **Stop** the application services so nothing writes to the DB: - - ```bash - docker compose stop forail-web forail-task - ``` - -2. Run the restore (omit the filename to use the most recent backup): - - ```bash - docker compose exec -T postgres /scripts/restore.sh /var/lib/awx/backups/forail_backup_20260411_020000.sql.gz - ``` - -3. Restart the application: - - ```bash - docker compose up -d forail-web forail-task - ``` - -4. Verify in the UI: log in and check **Activity** for the expected history. - -**Example — restore yesterday's backup** - -```bash -docker compose stop forail-web forail-task -docker compose exec -T postgres /scripts/restore.sh -docker compose up -d forail-web forail-task -``` - -> **Warning:** Restore is destructive. The current database is **overwritten** by the dump. Always take a fresh backup _before_ restoring an old one. - ---- - -## Upgrade - -Upgrading is a tag bump + pull + up. - -**Step by step** - -1. Read the [release notes](RELEASE_NOTES_v2026.04.0.md) for breaking changes. -2. Take a backup (see [Backup](#backup)). -3. Edit `.env` and bump `FORAIL_TAG`: - - ```ini - FORAIL_TAG=2026.05.0 - ``` - -4. Pull the new images: - - ```bash - docker compose pull - ``` - -5. Bring the new stack up — `forail-init` runs migrations automatically: - - ```bash - docker compose up -d - ``` - -6. Tail init: - - ```bash - docker compose logs -f forail-init - ``` - -7. Smoke-test: - - ```bash - curl -fsS https://forail.example.com/api/v2/ping/ - ``` - -8. Watch **Jobs** for 10 minutes — make sure new launches work. - -**Example — minor version bump** - -```bash -sed -i 's/^FORAIL_TAG=.*/FORAIL_TAG=2026.04.1/' .env -docker compose pull && docker compose up -d -``` - ---- - -## Rolling Back - -If an upgrade fails, roll back the tag and restore the pre-upgrade backup. - -**Step by step** - -1. Set the previous tag in `.env`: - - ```ini - FORAIL_TAG=2026.04.0 - ``` - -2. Pull and bring up: - - ```bash - docker compose pull - docker compose up -d - ``` - -3. **If migrations were applied** during the failed upgrade, you must also restore the pre-upgrade DB dump (see [Restore](#restore)). -4. Verify and notify users. - -**Example** - -> Upgraded to `2026.05.0` at 02:30, jobs started failing at 02:45 → set `FORAIL_TAG=2026.04.0` → pull → up → restore `forail_backup_20260411_020000.sql.gz` → service restored at 02:55. - ---- - -# SCALING & TOPOLOGY - -## Adding an Execution Node - -Execution nodes run Ansible jobs. Add more when you exhaust capacity. - -**Step by step** - -1. Provision a new host with Docker. -2. On the new host, install Receptor and bring it up as an execution node, pointing at the control node: - - ```bash - docker run -d --name forail-receptor \ - -e RECEPTOR_NODE_TYPE=execution \ - -e RECEPTOR_PEER=tcp://control.forail.example.com:2222 \ - ghcr.io/forail-platform/forail-receptor:2026.04.0 - ``` - -3. In the UI: **Admin → Instances → Add** and register the new node: - - | Field | Value | - | -------------- | -------------- | - | Hostname | `worker-eu-03` | - | Node Type | `execution` | - | Instance Group | `eu-west-pool` | - -4. Wait until the node shows **Ready** in **Topology**. -5. Existing templates pinned to `eu-west-pool` will start scheduling onto it. - ---- - -## Adding a Hop Node - -Hop nodes relay traffic across network boundaries (e.g. DMZ → internal). - -**Step by step** - -1. Provision the hop host inside the boundary. -2. Run a Receptor container with `RECEPTOR_NODE_TYPE=hop`: - - ```bash - docker run -d --name forail-receptor \ - -e RECEPTOR_NODE_TYPE=hop \ - -e RECEPTOR_PEER=tcp://control.forail.example.com:2222 \ - ghcr.io/forail-platform/forail-receptor:2026.04.0 - ``` - -3. In the UI: **Admin → Instances → Add** with **Node Type = hop**. -4. From any execution node behind the hop, set its peer to the hop instead of the control node. -5. Confirm in **Topology** that the hop appears between the control and the workers. - ---- - -## Tuning Capacity - -**Step by step** - -1. **Settings → Jobs**, edit: - - **Max Concurrent Jobs** — global ceiling - - **Max Forks** — Ansible forks per job -2. Per instance: **Admin → Instances → → Capacity Adjustment** slider (0.0–1.0). -3. Save. Changes take effect within 30 seconds. - -**Example** - -> 16 vCPU control node → set capacity to `1.0` (use all). 4 vCPU shared dev box → set to `0.25`. - ---- - -## Switching to Kubernetes - -The `k8s/` folder contains baseline manifests if you outgrow Docker Compose. - -**Step by step** - -1. Read [`k8s/`](https://github.com/forail-platform/forail-devops/tree/main/k8s) — it includes Deployments, Services, ConfigMap, Secret, Ingress. -2. Create a namespace: - - ```bash - kubectl create namespace forail - ``` - -3. Create the secrets (translate your `.env`): - - ```bash - kubectl -n forail create secret generic forail-env --from-env-file=.env - ``` - -4. Apply the manifests: - - ```bash - kubectl -n forail apply -f k8s/ - ``` - -5. Watch the rollout: - - ```bash - kubectl -n forail get pods -w - ``` - -> Migration from compose to k8s is a one-shot: dump Postgres, import into the k8s-managed Postgres (or external RDS). - ---- - -# OBSERVABILITY - -## Enabling OpenTelemetry - -The stack ships with `forail-otel-collector`. You only need to point it at your backend. - -**Step by step** - -1. Edit `otel/collector-config.yaml`. -2. Set the exporter endpoint: - - ```yaml - exporters: - otlphttp: - endpoint: https://otel.example.com - headers: - authorization: "Bearer YOUR_TOKEN" - ``` - -3. Restart the collector: - - ```bash - docker compose restart forail-otel-collector - ``` - -4. In **Settings → Observability**, set: - - **OTLP Endpoint** = `http://forail-otel-collector:4318` - - **Sampling rate** = `0.1` (10%) -5. Save. Within a minute, traces appear in your APM tool. - ---- - -## Grafana Dashboards - -`grafana/` contains pre-built dashboards JSONs. - -**Step by step** - -1. Open Grafana → **Dashboards → Import**. -2. Upload `grafana/forail-overview.json`. -3. Pick your Prometheus datasource. -4. Save. The dashboard shows job throughput, web/task latency, queue depth. - ---- - -## Audit Log Export - -For SOC 2 / ISO 27001 evidence collection. - -**Step by step** - -1. Open **Audit Log** in the UI. -2. Filter by date range (e.g. last quarter). -3. Click **Export → CSV**. -4. Hash and store the CSV alongside your evidence pack: - - ```bash - sha256sum audit-2026Q1.csv > audit-2026Q1.csv.sha256 - ``` - ---- - -# SECURITY - -## Rotating Secrets - -Secrets to rotate periodically: `FORAIL_SECRET_KEY`, `POSTGRES_PASSWORD`, `FORAIL_ADMIN_PASSWORD`, `FORAIL_BROADCAST_WEBSOCKET_SECRET`. - -**Step by step — rotate `FORAIL_SECRET_KEY`** - -1. **Take a backup first.** -2. Generate a new key: - - ```bash - openssl rand -hex 25 - ``` - -3. Edit `.env`, replace `FORAIL_SECRET_KEY=...`. -4. Restart web + task: - - ```bash - docker compose up -d forail-web forail-task - ``` - -5. **All sessions are invalidated** — users must re-login. Encrypted credentials in the DB are unaffected (they use a separate Fernet key). - -> **Never** rotate the database encryption key (used for credential storage) without first re-encrypting all credentials. That procedure is a separate runbook. - ---- - -## User & SSO Setup - -**Step by step — enable OIDC** - -1. Open **Settings → Authentication → OIDC**. -2. Fill in: - - **Provider URL** — `https://login.example.com` - - **Client ID** — `forail-prod` - - **Client Secret** — _(from IdP)_ - - **Redirect URI** — `https://forail.example.com/sso/complete/oidc/` -3. Save → click **Test** to verify discovery. -4. Test login from a private browser window. -5. Map IdP groups to Forail teams under **Settings → Authentication → Group Mapping**. - ---- - -## Firewall & Network Hardening - -**Step by step** - -1. Allow inbound only on **443** (and optionally 80 for HTTP→HTTPS redirect). -2. Restrict SSH to your bastion / admin range. -3. Block Postgres (5432), Redis (6379), Receptor (2222) from the public internet — they should only be reachable from inside the Docker network. -4. If running on cloud, also configure security groups, not just OS firewall. - -**Example — ufw on Ubuntu** - -```bash -sudo ufw default deny incoming -sudo ufw allow 80/tcp -sudo ufw allow 443/tcp -sudo ufw allow from 10.0.0.0/24 to any port 22 -sudo ufw enable -``` - ---- - -## Security Updates - -**Step by step** - -1. Subscribe to the Forail release announcement channel. -2. Run `docker compose pull` weekly to pick up base-image patches when you bump tag. -3. Patch the host OS monthly (`unattended-upgrades` on Debian/Ubuntu). -4. Run scheduled image scans: - - ```bash - trivy image ghcr.io/forail-platform/forail-backend:2026.04.0 - ``` - ---- - -# TROUBLESHOOTING - -## Stack Won't Come Up - -**Step by step** - -1. Check `docker compose ps` — which service is unhealthy? -2. `docker compose logs ` for the failing one. -3. Common causes: - - Missing or wrong values in `.env` → look for `KeyError` / `ImproperlyConfigured`. - - Port 80/443 already in use → `sudo lsof -i :443`. - - Volume permissions → `sudo chown -R 1000:1000 /var/lib/awx`. -4. Fix and `docker compose up -d` again. - ---- - -## Database Connection Errors - -Symptom: web service logs show `could not connect to server: Connection refused`. - -**Step by step** - -1. Is postgres running? `docker compose ps postgres` -2. Logs: `docker compose logs --tail=100 postgres` -3. Can the web container reach it? - - ```bash - docker compose exec forail-web pg_isready -h postgres -U forail - ``` - -4. If postgres is healthy but web cannot connect → check `POSTGRES_PASSWORD` matches in `.env` and the DB volume. -5. If postgres won't start → look for `PANIC` lines (disk full, corrupt WAL). - ---- - -## Jobs Stuck in Pending - -Symptom: jobs sit in _Pending_ and never start. - -**Step by step** - -1. Check capacity: **Admin → Instances** → is total used == total capacity? -2. Check task workers: `docker compose ps forail-task` — running? -3. Check Redis: `docker compose exec redis redis-cli ping` should return `PONG`. -4. Check Receptor: `docker compose exec forail-task receptorctl status`. -5. As a last resort, restart the task service: - - ```bash - docker compose restart forail-task - ``` - ---- - -## Receptor / Mesh Issues - -**Step by step** - -1. Open **Topology** — any red links? -2. From the control node: - - ```bash - docker compose exec forail-task receptorctl status - ``` - -3. From a worker: - - ```bash - docker exec forail-receptor receptorctl status - ``` - -4. Verify TCP reachability between nodes on **2222**. -5. Restart the affected receptor container. - ---- - -## Frontend Returns 502 - -Symptom: browser shows nginx 502 Bad Gateway. - -**Step by step** - -1. `docker compose ps` — is `forail-frontend` healthy? -2. `docker compose logs --tail=50 forail-frontend` -3. `docker compose logs --tail=50 nginx` -4. Common cause: frontend container OOM-killed → bump memory in compose. -5. Restart: `docker compose restart forail-frontend nginx`. - ---- - -## Disk Filling Up - -**Step by step** - -1. `df -h` — which mount? -2. If `/var/lib/docker` → prune unused images: - - ```bash - docker image prune -af --filter "until=168h" - ``` - -3. If the backup directory → lower `BACKUP_RETENTION_DAYS` and rerun backup. -4. If Postgres data dir → check for runaway audit log growth, vacuum: - - ```bash - docker compose exec postgres psql -U forail -d forail -c "VACUUM FULL VERBOSE;" - ``` - ---- - -## Reset Admin Password - -**Step by step** - -1. Exec into the web container: - - ```bash - docker compose exec forail-web bash - ``` - -2. Run the management command: - - ```bash - awx-manage changepassword admin - ``` - -3. Enter the new password twice. -4. Log in via the UI. - -> If `admin` was disabled and you have no other admin user: -> -> ```bash -> docker compose exec forail-web awx-manage createsuperuser -> ``` - ---- - -# REFERENCE - -## Service Map - -| Service | Image | Port (internal) | Purpose | -| ---------------------- | --------------------- | --------------------------- | -------------------------------------------- | -| `postgres` | `postgres:15` | 5432 | Application database | -| `redis` | `redis:7` | 6379 | Cache + Celery broker | -| `forail-init` | `forail-backend` | — | Migrations + initial setup, exits on success | -| `forail-web` | `forail-backend` | 8050 (uWSGI), 8051 (Daphne) | REST API + WebSocket | -| `forail-task` | `forail-backend` | — | Celery workers + dispatcher + ws relay | -| `forail-frontend` | `forail-frontend` | 80 | Static React UI | -| `forail-opa` | `openpolicyagent/opa` | 8181 | Policy-as-Code sidecar | -| `forail-otel-collector` | `otel/collector` | 4317/4318 | OpenTelemetry pipeline | -| `nginx` | `nginx` | 80 / 443 | TLS terminator + edge router | - ---- - -## Environment Variables - -| Variable | Required | Default | Description | -| ---------------------------------- | -------- | -------------------------------------- | -------------------------------------------- | -| `POSTGRES_PASSWORD` | yes | — | DB password | -| `POSTGRES_USER` | no | `forail` | DB user | -| `POSTGRES_DB` | no | `forail` | DB name | -| `FORAIL_SECRET_KEY` | yes | — | Django `SECRET_KEY` (50+ chars) | -| `FORAIL_BROADCAST_WEBSOCKET_SECRET` | yes | — | WS broadcast secret | -| `FORAIL_ADMIN_USER` | no | `admin` | Bootstrap admin username | -| `FORAIL_ADMIN_PASSWORD` | yes | — | Bootstrap admin password | -| `FORAIL_ADMIN_EMAIL` | no | `admin@example.com` | Bootstrap admin email | -| `FORAIL_CSRF_TRUSTED_ORIGINS` | yes | — | Comma-separated `https://...` origins | -| `FORAIL_ALLOWED_HOSTS` | no | `localhost,127.0.0.1` | Django ALLOWED_HOSTS — list your real hostnames | -| `FORAIL_NODE_NAME` | no | `forail-node` | This node's name in mesh | -| `FORAIL_NODE_TYPE` | no | `hybrid` | `control` / `execution` / `hybrid` | -| `FORAIL_BACKEND_IMAGE` | no | `ghcr.io/forail-platform/forail-backend` | Backend image | -| `FORAIL_FRONTEND_IMAGE` | no | `ghcr.io/forail-platform/forail-frontend` | Frontend image | -| `FORAIL_TAG` | no | `2026.07.0` | Image tag (pin a real version, never `latest`) | -| `FORAIL_TASK_PRIVILEGED` | no | `false` | Privileged `forail-task` — needed for the podman job path | -| `FORAIL_TASK_CGROUP` | no | `private` | Set `host` with `FORAIL_TASK_PRIVILEGED=true` for job execution | -| `BACKUP_RETENTION_DAYS` | no | `7` | Days of backups to keep | - ---- - -## File Layout - -``` -/opt/forail/ -├── docker-compose.yml # primary stack definition -├── .env # local secrets — never commit -├── nginx/ -│ ├── nginx.conf -│ └── ssl/ -│ ├── forail.crt -│ └── forail.key -├── settings/ # Django settings overrides mounted into forail-web/task -├── otel/ -│ └── collector-config.yaml -├── grafana/ -│ └── *.json # importable dashboards -├── scripts/ -│ ├── backup.sh -│ ├── restore.sh -│ ├── healthcheck-web.sh -│ ├── healthcheck-task.sh -│ └── init.sh -├── k8s/ # k8s manifests (alternative to compose) -└── /var/lib/awx/ - ├── projects/ # synced project checkouts - ├── public/ # static web assets - └── backups/ # nightly DB dumps -``` - ---- - -_End of administrator handbook._ diff --git a/docs/HANDBOOK.md b/docs/HANDBOOK.md deleted file mode 100644 index 9116cb0..0000000 --- a/docs/HANDBOOK.md +++ /dev/null @@ -1,1362 +0,0 @@ -# Forail Platform — User Handbook - -A step-by-step guide for everyday use of the Forail Platform UI. Each section follows the left sidebar of the application. Click any item in the table of contents to jump straight to it. - ---- - -## Table of Contents - -### Views - -- [Dashboard](#dashboard) -- [Jobs](#jobs) -- [Schedules](#schedules) -- [Activity](#activity) -- [Audit Log](#audit-log) -- [Analytics](#analytics) - -### Automation - -- [Event Rules](#event-rules) -- [Event Logs](#event-logs) -- [Outbound Webhooks](#outbound-webhooks) - -### Self-Service - -- [Service Portal](#service-portal) -- [My Requests](#my-requests) -- [Approvals](#approvals) -- [Catalog Admin](#catalog-admin) - -### Tenancy - -- [Tenants](#tenants) -- [Quota Events](#quota-events) - -### Compliance - -- [Drift Detections](#drift-detections) -- [Drift Alerts](#drift-alerts) -- [Alert Rules](#alert-rules) -- [Fact Snapshots](#fact-snapshots) -- [Policies](#policies) -- [Policy Decisions](#policy-decisions) -- [Scanners](#scanners) -- [Scan Results](#scan-results) -- [Observability](#observability) - -### Resources - -- [Templates](#templates) -- [Inventories](#inventories) -- [Hosts](#hosts) -- [Projects](#projects) -- [Credentials](#credentials) - -### Access - -- [Organizations](#organizations) -- [Users](#users) -- [Teams](#teams) - -### Admin - -- [Instances](#instances) -- [Instance Groups](#instance-groups) -- [Execution Environments](#execution-environments) -- [Notifications](#notifications) -- [Topology](#topology) -- [Settings](#settings) - ---- - -# VIEWS - -## Dashboard - -![Dashboard](img/handbook/dashboard.png) - -**What each marker means:** - -1. **Page heading** — confirms you are on the Dashboard. -2. **Getting Started banner** — links to the wizard that walks you through the first install (org, project, inventory, credential, template). - -The Dashboard is the landing page after login. It shows the overall health of the platform: recent jobs, success/failure rates, active hosts, and quick links. - -**Step by step** - -1. Log in to Forail. -2. You will land on the Dashboard automatically. If not, click **Dashboard** in the left sidebar. -3. Read the four top tiles: _Total Hosts_, _Total Jobs_, _Active Schedules_, _Recent Failures_. -4. Use the time-range selector (top-right) to switch between **Last 24h**, **Last 7d**, **Last 30d**. -5. Click any tile to drill into the matching list view. - -**Example** - -> Open Dashboard → set range to **Last 7d** → click the _Recent Failures_ tile to see all failed jobs of the past week. - ---- - -## Jobs - -![Jobs](img/handbook/jobs.png) - -**What each marker means:** - -1. **Search box** — filter the jobs list by name or id, e.g. type `Deploy` to find every run of the Deploy Webapp template. -2. **Refresh** — re-fetch the list (auto-refresh runs on a timer too). - -Jobs are individual runs of a Job Template. Use this view to launch, monitor, and inspect playbook executions. - -**Step by step — launch a job** - -1. Click **Jobs** in the sidebar. -2. Click the **Launch** button (top-right). -3. Pick a **Job Template** from the dropdown. -4. Fill in any required survey variables. -5. Click **Launch**. -6. The job opens in the live output view — watch the play-by-play log. - -**Example survey input** - -```yaml -target_env: staging -package_version: 1.4.2 -restart_service: true -``` - -**Step by step — inspect a finished job** - -1. Click any row in the Jobs list. -2. Read the **Details** tab (status, duration, executed by). -3. Open the **Output** tab for the full Ansible log. -4. Open **Hosts** to see per-host success/failure. - ---- - -## Schedules - -![Schedules](img/handbook/schedules.png) - -**What each marker means:** - -1. **Create Schedule** — opens the form below. - -Schedules trigger Job Templates automatically on a cron-like cadence. - -**Create Schedule** - -![Create Schedule](img/handbook/schedules_new.png) - -**What each marker means:** - -1. **Name** — short, descriptive id, e.g. `nightly-db-backup`. -2. **Template** — the Job Template to launch on the schedule, e.g. `Backup PostgreSQL`. -3. **Frequency** — None / Minute / Hour / Day / Week / Month — pick the cadence. -4. **Start Date/Time** — when the first run should fire, e.g. `2026-04-12 02:00`. -5. **Create Schedule** — submits the form. - -**Step by step** - -1. Click **Schedules** → **Add**. -2. Fill in: - - **Name** — short, descriptive - - **Job Template** — what to run - - **Start Date / Time** - - **Frequency** — None / Minute / Hour / Day / Week / Month - - **Repeat Frequency** — every _N_ of the chosen unit -3. Click **Save**. -4. Toggle the **Enabled** switch to activate. - -**Example** - -| Field | Value | -| ------------ | ------------------- | -| Name | `nightly-db-backup` | -| Job Template | `Backup PostgreSQL` | -| Start Date | `2026-04-12 02:00` | -| Frequency | Day | -| Repeat | every `1` day | - ---- - -## Activity - -![Activity](img/handbook/activity.png) - -**What each marker means:** - -1. **Page heading** — Activity is read-only; use the column headers and filters to narrow the feed. - -A chronological feed of platform actions: who did what and when. - -**Step by step** - -1. Click **Activity**. -2. Filter by **User**, **Object Type**, or **Date Range**. -3. Click any row to open the actor and the affected object side by side. - -**Example** - -> Filter: User = `alice`, Date Range = _Today_ → see every change Alice made today. - ---- - -## Audit Log - -![Audit Log](img/handbook/audit_log.png) - -**What each marker means:** - -1. **Page heading** — use the column header filters to narrow by event type, severity, actor, or date range. - -Tamper-evident security log used for compliance reporting (SOC 2, ISO 27001). - -**Step by step** - -1. Click **Audit Log**. -2. Use filters: **Event Type** (`login`, `permission_change`, `credential_access`, …), **Severity**, **Actor**. -3. Click **Export → CSV** to download for audit. - -**Example** - -> Filter: Event Type = `credential_access`, Date Range = _Last 30d_ → export CSV → attach to audit ticket. - ---- - -## Analytics - -![Analytics](img/handbook/analytics.png) - -**What each marker means:** - -1. **Page heading** — switch tabs across the top to see Overview / Job Trends / Host Health / Top Failures. - -Visual KPIs across the whole platform: job throughput, MTTR, top failing templates. - -**Step by step** - -1. Click **Analytics**. -2. Pick a tab: **Overview**, **Job Trends**, **Host Health**, **Top Failures**. -3. Hover any chart point for the exact number. -4. Click **Download Report → PDF** for a printable snapshot. - -**Example** - -> Open _Top Failures_ → identify the template with most failures → click it → land on its Jobs list filtered to failed runs. - ---- - -# AUTOMATION - -## Event Rules - -![Event Rules](img/handbook/event_rules.png) - -**What each marker means:** - -1. **Create Event Rule** — opens the form below. - -Event Rules listen for incoming events (webhooks, alerts, message bus) and launch a Job Template when conditions match. - -**Create Event Rule** - -![Create Event Rule](img/handbook/event_rules_new.png) - -**What each marker means:** - -1. **Name** — short id, e.g. `restart-on-prometheus-crit`. -2. **Source Type** — webhook / kafka / alertmanager / etc. -3. **Webhook Path** — URL suffix the source will hit, e.g. `/prom-crit`. -4. **Add Condition** — add JSONPath / regex match rules. -5. **Add Action** — what to launch when conditions match (Job Template, Workflow). -6. **Create Event Rule** — submits the form. - -**Step by step** - -1. Click **Event Rules** → **Create Rule**. -2. Fill in: - - **Name** - - **Source** (webhook, kafka, prometheus alertmanager, …) - - **Match condition** (JSONPath / regex) - - **Action** — Job Template to launch - - **Variables to forward** -3. Click **Save** → toggle **Enabled**. - -**Example** - -```yaml -name: restart-on-prometheus-crit -source: alertmanager -match: "$.alerts[?(@.labels.severity=='critical')]" -action_template: Restart Failed Service -forward_vars: - host: "{{ alert.labels.instance }}" - service: "{{ alert.labels.service }}" -``` - ---- - -## Event Logs - -![Event Logs](img/handbook/event_logs.png) - -**What each marker means:** - -1. **Page heading** — read-only feed of received events; click a row to see the raw payload. - -Read-only history of every event the platform received and what rule (if any) consumed it. - -**Step by step** - -1. Click **Event Logs**. -2. Filter by **Source**, **Status** (`matched`, `unmatched`, `error`), **Date**. -3. Click a row to see the raw event payload and which rule fired. - -**Example** - -> Filter: Status = `unmatched` → find events nothing reacted to → write a new Event Rule for them. - ---- - -## Outbound Webhooks - -![Outbound Webhooks](img/handbook/outbound_webhooks.png) - -**What each marker means:** - -1. **Create Outbound Webhook** — opens the form below. - -Send platform events to external systems (Slack, PagerDuty, ServiceNow). - -**Create Outbound Webhook** - -![Create Outbound Webhook](img/handbook/outbound_webhooks_new.png) - -**What each marker means:** - -1. **Name** — short id, e.g. `slack-failed-jobs`. -2. **Target URL** — full https URL of the receiving endpoint, e.g. `https://hooks.slack.com/services/T0/B0/XYZ`. -3. **Trigger toggles** (Job Started / Succeeded / Failed / etc.) — pick which events fire the webhook. -4. **Create Outbound Webhook** — submits the form. - -**Step by step** - -1. Click **Outbound Webhooks** → **Add**. -2. Fill in: - - **Name** - - **Target URL** - - **HTTP Method** (POST / PUT) - - **Headers** (auth tokens) - - **Trigger Events** (job-failed, job-success, drift-detected, …) - - **Payload Template** (Jinja2) -3. Click **Test** → **Save**. - -**Example** - -```yaml -name: slack-failed-jobs -url: https://hooks.slack.com/services/T0/B0/XYZ -method: POST -headers: - Content-Type: application/json -trigger: job_failed -payload: | - {"text": ":x: Job *{{ job.name }}* failed on {{ job.host }}"} -``` - ---- - -# SELF-SERVICE - -## Service Portal - -![Service Portal](img/handbook/service_portal.png) - -**What each marker means:** - -1. **Page heading** — end-user catalog. Browse tiles or use search. - -End-user catalog: lets non-admins request pre-approved automations without touching templates directly. - -**Step by step (as end user)** - -1. Click **Service Portal**. -2. Browse the catalog tiles or use the search bar. -3. Click a tile (e.g., _New Dev VM_). -4. Fill in the request form. -5. Click **Submit**. - -**Example form** - -| Field | Value | -| ----------- | --------------------- | -| VM name | `dev-alice-01` | -| OS | Ubuntu 24.04 | -| Size | small (2 vCPU / 4 GB) | -| Owner email | `alice@example.com` | - ---- - -## My Requests - -![My Requests](img/handbook/my_requests.png) - -**What each marker means:** - -1. **Page heading** — your submitted requests with their current status. - -Tracks the status of requests you submitted from the Service Portal. - -**Step by step** - -1. Click **My Requests**. -2. Read the status column: `pending`, `approved`, `rejected`, `running`, `completed`, `failed`. -3. Click any row → **Output** tab to read the job log. - -**Example** - -> Submit a _New Dev VM_ request → open **My Requests** → wait for `approved` → wait for `completed` → copy the VM IP from output. - ---- - -## Approvals - -![Approvals](img/handbook/approvals.png) - -**What each marker means:** - -1. **Page heading** — pending requests waiting for an approver. Click a row to read details and Approve / Reject. - -Queue of items waiting for an approver. Items appear here when a Service Portal entry is configured to require approval. - -**Step by step (as approver)** - -1. Click **Approvals**. -2. Click a pending item. -3. Read the request details and the requester comment. -4. Click **Approve** or **Reject**. If rejecting, provide a reason. - -**Example** - -> Open the queue → click `Provision Production DB` → review parameters → click **Approve** → job auto-launches. - ---- - -## Catalog Admin - -![Catalog Admin](img/handbook/catalog_admin.png) - -**What each marker means:** - -1. **Add Item** — opens the form below. - -Where admins create and manage Service Portal entries. - -**Create Catalog Item** - -![Create Catalog Item](img/handbook/catalog_admin_new.png) - -**What each marker means:** - -1. **Name** — what end users will see in the Service Portal, e.g. `New Dev VM`. -2. **Category** — groups items in the portal, e.g. `Compute`. -3. **Underlying template** — the Job Template that will run when a request is approved. -4. **Requires approval** — toggle on to route requests through Approvals; off to auto-launch. -5. **Save** — publishes the catalog item. - -**Step by step** - -1. Click **Catalog Admin** → **Add Item**. -2. Fill in: - - **Title** - - **Description** - - **Category** - - **Underlying Job Template** - - **Survey form** - - **Approval required?** (yes / no — pick approver group) -3. Click **Publish**. - -**Example** - -| Field | Value | -| ----------------- | -------------- | -| Title | New Dev VM | -| Category | Compute | -| Template | `Provision VM` | -| Approval required | No | - ---- - -# TENANCY - -## Tenants - -![Tenants](img/handbook/tenants.png) - -**What each marker means:** - -1. **Create Tenant** — opens the form below. - -A tenant is an isolated workspace (org-of-orgs) with its own data, quotas, and members. Used for multi-tenant deployments. - -**Create Tenant** - -![Create Tenant](img/handbook/tenants_new.png) - -**What each marker means:** - -1. **Name** — slug-friendly id, e.g. `acme-corp`. -2. **Admin username** — bootstrap admin login for the tenant, e.g. `acme-admin`. -3. **Admin password** — strong password for the bootstrap admin. -4. **Max concurrent jobs** — quota cap for parallel jobs, e.g. `20`. -5. **Save** — provisions the tenant atomically (org + admin + team + quotas). - -**Step by step** - -1. Click **Tenants** → **Create Tenant**. -2. Fill in: - - **Name** — slug-friendly - - **Display Name** - - **Quota** — max jobs/day, max hosts, max storage - - **Owner user** -3. Click **Create**. - -**Example** - -```yaml -name: acme-corp -display_name: ACME Corp -quota: - jobs_per_day: 500 - hosts: 200 - storage_gb: 50 -owner: acme-admin@example.com -``` - ---- - -## Quota Events - -![Quota Events](img/handbook/quota_events.png) - -**What each marker means:** - -1. **Page heading** — read-only audit feed of quota changes and quota-exceeded events. - -Audit feed of quota changes and quota-exceeded events per tenant. - -**Step by step** - -1. Click **Quota Events**. -2. Filter by **Tenant** and **Event Type** (`exceeded`, `raised`, `lowered`). -3. Click a row to see the resource that hit the limit. - -**Example** - -> Filter: Tenant = `acme-corp`, Event = `exceeded` → see when ACME hit their daily job ceiling → contact them or raise the quota. - ---- - -# COMPLIANCE - -## Drift Detections - -![Drift Detections](img/handbook/drift_detections.png) - -**What each marker means:** - -1. **Page heading** — list of drift detection runs. Click any row for the per-host findings. - -Compares the current state of a host against a known-good fact baseline. - -**Step by step** - -1. Click **Drift Detections** → **Run Detection**. -2. Pick: - - **Inventory** - - **Baseline snapshot** - - **Hosts** (or _All_) -3. Click **Run**. -4. Open the result row when finished. - -**Example** - -> Inventory: `prod-web` · Baseline: `baseline-2026-04-01` · Hosts: All → Run. - ---- - -## Drift Alerts - -![Drift Alerts](img/handbook/drift_alerts.png) - -**What each marker means:** - -1. **Page heading** — open alerts opened by drift detections. Use status filter to narrow by `open` / `acked` / `resolved`. - -Alerts opened automatically when a drift detection finds a mismatch. - -**Step by step** - -1. Click **Drift Alerts**. -2. Filter by **Severity** (`info`, `warn`, `crit`) or **Status** (`open`, `acked`, `resolved`). -3. Open an alert → click **Acknowledge** or **Resolve**. - -**Example** - -> Filter: Severity = `crit`, Status = `open` → ack each one → assign to oncall. - ---- - -## Alert Rules - -![Alert Rules](img/handbook/alert_rules.png) - -**What each marker means:** - -1. **Create Alert Rule** — opens the form below. - -Rules that decide which drift findings become alerts and at which severity. - -**Create Alert Rule** - -![Create Alert Rule](img/handbook/alert_rules_new.png) - -**What each marker means:** - -1. **Name** — short id, e.g. `ssh-port-must-be-22`. -2. **Host Filter** — fnmatch pattern (e.g. `prod-*`) to scope the rule. -3. **Minimum Severity** — info / warn / crit — minimum severity that opens an alert. -4. **Create Alert Rule** — submits the form. - -**Step by step** - -1. Click **Alert Rules** → **Add Rule**. -2. Fill in: - - **Name** - - **Match** (fact key + expected value or regex) - - **Severity** - - **Notify** (which Notification target) -3. **Save**. - -**Example** - -```yaml -name: ssh-port-must-be-22 -match: - fact: ansible_facts.ssh.port - not_equal: 22 -severity: crit -notify: slack-secops -``` - ---- - -## Fact Snapshots - -![Fact Snapshots](img/handbook/fact_snapshots.png) - -**What each marker means:** - -1. **Page heading** — list of point-in-time fact captures used as drift baselines. - -A point-in-time capture of host facts. Used as drift baselines. - -**Step by step** - -1. Click **Fact Snapshots** → **Create Snapshot**. -2. Pick **Inventory** and **Hosts**. -3. Add a **Label** (the snapshot’s name). -4. Click **Capture**. - -**Example** - -| Field | Value | -| --------- | --------------------- | -| Inventory | `prod-web` | -| Hosts | All | -| Label | `baseline-2026-04-01` | - ---- - -## Policies - -![Policies](img/handbook/policies.png) - -**What each marker means:** - -1. **Create Policy** — opens the form below. - -Policy-as-Code rules (OPA / Rego) that gate job execution and approvals. - -**Create Policy** - -![Create Policy](img/handbook/policies_new.png) - -**What each marker means:** - -1. **Name** — short id, e.g. `dba-only-drop-db`. -2. **Enforcement** — `enforce` (block on deny) or `warn` (record only). -3. **Rego module** — the OPA Rego source that returns deny / allow. -4. **Save** — validates and stores the policy. - -**Step by step** - -1. Click **Policies** → **Create Policy**. -2. Fill in: - - **Name** - - **Scope** (`pre-job`, `pre-approval`, `pre-deploy`) - - **Rego source** -3. Click **Validate** → **Save** → **Enable**. - -**Example Rego** - -```rego -package forail.prejob - -deny[msg] { - input.template.name == "Drop Database" - input.user.team != "dba" - msg := "only DBAs can drop databases" -} -``` - ---- - -## Policy Decisions - -![Policy Decisions](img/handbook/policy_decisions.png) - -**What each marker means:** - -1. **Page heading** — read-only history of every OPA evaluation. Filter by Verdict / User / Policy. - -History of every policy evaluation: who triggered it, what the input was, and the verdict. - -**Step by step** - -1. Click **Policy Decisions**. -2. Filter by **Policy**, **Verdict** (`allow` / `deny`), **User**. -3. Click a row to see the full input JSON and the rule that fired. - -**Example** - -> Filter: Verdict = `deny`, Last 24h → see who got blocked yesterday and why. - ---- - -## Scanners - -![Scanners](img/handbook/scanners.png) - -**What each marker means:** - -1. **Create Scanner** — opens the form below. - -Configured IaC / image / dependency scanners (Trivy, Checkov, …). - -**Create Scanner** - -![Create Scanner](img/handbook/scanners_new.png) - -**What each marker means:** - -1. **Name** — short id, e.g. `trivy-prod`. -2. **Tool** — Trivy / Checkov / ansible-lint / pip-audit. -3. **Severity threshold** — minimum severity that fails a job, e.g. `high`. -4. **Save** — registers the scanner. - -**Step by step** - -1. Click **Scanners** → **Add Scanner**. -2. Fill in: - - **Type** (Trivy / Checkov / Custom) - - **Target** (Project, Inventory, or Image registry) - - **Schedule** (cron) -3. **Save** → click **Run Now** to test. - -**Example** - -| Field | Value | -| -------- | -------------------------- | -| Type | Trivy | -| Target | Project: `infra-terraform` | -| Schedule | `0 3 * * *` | - ---- - -## Scan Results - -![Scan Results](img/handbook/scan_results.png) - -**What each marker means:** - -1. **Page heading** — read-only findings from configured scanners. Filter by severity / scanner / date. - -Findings from the configured scanners. - -**Step by step** - -1. Click **Scan Results**. -2. Filter by **Severity** (`crit`, `high`, `med`, `low`), **Scanner**, **Date**. -3. Click a finding for the file path, line number, and remediation hint. -4. Click **Mark as Fixed** after remediating. - -**Example** - -> Filter: Severity = `crit`, Scanner = `trivy` → triage every critical CVE. - ---- - -## Observability - -![Observability](img/handbook/observability.png) - -**What each marker means:** - -1. **Page heading** — live OpenTelemetry view (traces, metrics, logs). Pick a tab and search. - -Live OpenTelemetry view of the platform itself: traces, metrics, logs. - -**Step by step** - -1. Click **Observability**. -2. Pick a tab: **Traces**, **Metrics**, **Logs**. -3. Use the search bar (Trace ID / Service / Metric name). -4. Click **Open in Grafana** for the deep view. - -**Example** - -> Tab: Traces → search `service=forail-web` → click the slowest span → open in Grafana. - ---- - -# RESOURCES - -## Templates - -![Templates](img/handbook/templates.png) - -**What each marker means:** - -1. **Search box** — filter templates by name, e.g. type `Deploy`. -2. **+ Job Template** — opens the create form below. - -Job Templates wrap a project + playbook + inventory + credentials + survey into a launchable unit. - -**Create Job Template** - -![Create Job Template](img/handbook/templates_new.png) - -**What each marker means:** - -1. **Name** — short, descriptive id, e.g. `Deploy Webapp`. -2. **Inventory** — pick the target hosts, e.g. `Production Web`. -3. **Project** — the Git project that contains the playbook, e.g. `Demo Project`. -4. **Playbook** — the YAML file inside the project to run, e.g. `deploy.yml`. -5. **Limit** — host pattern to scope the run, e.g. `webservers` or `webservers:!web03`. -6. **Create Template** — submits the form. - -**Step by step** - -1. Click **Templates** → **Add Job Template**. -2. Fill in: - - **Name** - - **Job Type** (`run` / `check`) - - **Inventory** - - **Project** - - **Playbook** - - **Credentials** - - **Limit** (host pattern, optional) - - **Variables** (YAML / JSON) -3. **Save** → click **Launch** to test. - -**Example** - -```yaml -name: deploy-webapp -job_type: run -inventory: prod-web -project: webapp-iac -playbook: deploy.yml -credentials: - - ssh-prod -limit: webservers -variables: - app_version: 2.3.1 -``` - ---- - -## Inventories - -![Inventories](img/handbook/inventories.png) - -**What each marker means:** - -1. **Search box** — filter the inventories list. -2. **Create Inventory** — opens the form below. - -Logical group of hosts. May be static, sourced from a file, or synced from a cloud (AWS / Azure / GCP). - -**Create Inventory** - -![Create Inventory](img/handbook/inventories_new.png) - -**What each marker means:** - -1. **Name** — short id, e.g. `Production Web`. -2. **Description** — free-text purpose, e.g. `Web tier — production hosts`. -3. **Organization** — which org owns this inventory, e.g. `Default`. -4. **Inventory Type** — `Standard` for a static list, `Smart` for a dynamic host filter. -5. **Create Inventory** — submits the form. - -**Step by step — create static inventory** - -1. Click **Inventories** → **Add → Inventory**. -2. Fill in **Name**, **Organization**, **Description**. -3. Click **Save**. -4. Open the **Hosts** tab → **Add** to attach hosts. -5. Open the **Groups** tab → **Add** to organize hosts. - -**Example** - -| Field | Value | -| ------------ | --------------------------------- | -| Name | `prod-web` | -| Organization | Platform | -| Hosts | `web01`, `web02`, `web03` | -| Group | `webservers` (contains all three) | - ---- - -## Hosts - -![Hosts](img/handbook/hosts.png) - -**What each marker means:** - -1. **Page heading** — flat list of all hosts across all inventories. Click a host to see its facts and group memberships. - -Individual machines (or endpoints) that belong to one or more inventories. - -**Step by step** - -1. Click **Hosts** → **Add**. -2. Fill in: - - **Hostname / IP** - - **Inventory** - - **Variables** (YAML — host-specific overrides) -3. **Save**. - -**Example** - -```yaml -name: web01.example.com -inventory: prod-web -variables: - ansible_user: deploy - http_port: 8080 -``` - ---- - -## Projects - -![Projects](img/handbook/projects.png) - -**What each marker means:** - -1. **Search box** — filter projects by name. -2. **Create Project** — opens the form below. - -A Project is a Git checkout containing playbooks, roles, and collections. - -**Create Project** - -![Create Project](img/handbook/projects_new.png) - -**What each marker means:** - -1. **Name** — short id, e.g. `webapp-iac`. -2. **SCM Type** — `git` (GitHub / GitLab / Bitbucket / self-hosted). -3. **SCM URL** — clone URL, e.g. `git@github.com:acme/webapp-iac.git`. -4. **SCM Branch** — branch / tag / sha to check out, e.g. `main`. -5. **Create Project** — submits the form and triggers the first sync. - -**Step by step** - -1. Click **Projects** → **Add**. -2. Fill in: - - **Name** - - **Organization** - - **SCM Type** (`git`) - - **SCM URL** - - **SCM Branch** - - **SCM Credential** - - **Update Options** (clean, delete on update, update on launch) -3. **Save**. The first sync starts automatically. - -**Example** - -| Field | Value | -| ---------- | ------------------------------------ | -| Name | webapp-iac | -| SCM Type | git | -| URL | `git@github.com:acme/webapp-iac.git` | -| Branch | main | -| Credential | `github-deploy-key` | - ---- - -## Credentials - -![Credentials](img/handbook/credentials.png) - -**What each marker means:** - -1. **Search box** — filter credentials. -2. **Create Credential** — opens the form below. - -Encrypted secret store: SSH keys, passwords, cloud tokens, vault keys. - -**Create Credential** - -![Create Credential](img/handbook/credentials_new.png) - -**What each marker means:** - -1. **Name** — short id, e.g. `ssh-prod`. -2. **Credential Type** — Machine / SCM / Vault / AWS / Azure / GCP / etc. -3. **Organization** — which org owns this credential. -4. **Create Credential** — submits the form (encrypted at rest). - -**Step by step** - -1. Click **Credentials** → **Add**. -2. Pick a **Credential Type** (Machine, Source Control, Vault, AWS, Azure, GCP, …). -3. Fill in the required fields (varies by type). -4. **Save** — the secret is encrypted at rest. - -**Example — SSH key for production** - -| Field | Value | -| -------------------- | ------------- | -| Name | `ssh-prod` | -| Type | Machine | -| Username | `deploy` | -| SSH Private Key | _(paste key)_ | -| Privilege Escalation | sudo | - ---- - -# ACCESS - -## Organizations - -![Organizations](img/handbook/organizations.png) - -**What each marker means:** - -1. **Create Organization** — opens the form below. - -Top-level container for users, teams, projects, inventories, templates. - -**Create Organization** - -![Create Organization](img/handbook/organizations_new.png) - -**What each marker means:** - -1. **Name** — short id, e.g. `Platform`. -2. **Description** — purpose of the org, e.g. `Core platform engineering org`. -3. **Max Hosts** — soft cap for the org, leave 0 for unlimited. -4. **Create Organization** — submits the form. - -**Step by step** - -1. Click **Organizations** → **Add**. -2. Fill in **Name** and **Description**. -3. **Save**. -4. Open the org → **Access** tab → add users / teams. - -**Example** - -> Name: `Platform` · Description: `Core platform engineering org`. - ---- - -## Users - -![Users](img/handbook/users.png) - -**What each marker means:** - -1. **Create User** — opens the form below. - -Local and SSO-mapped users. - -**Create User** - -![Create User](img/handbook/users_new.png) - -**What each marker means:** - -1. **Username** — login id, e.g. `alice`. -2. **Email** — contact address, e.g. `alice@example.com`. -3. **Password** — strong initial password (user can change later). -4. **Superuser toggle** — grants full admin rights; leave off for normal users. -5. **Create User** — submits the form. - -**Step by step — create a local user** - -1. Click **Users** → **Add**. -2. Fill in **Username**, **Email**, **First / Last name**, **Password**. -3. Pick **User Type** (Normal / System Auditor / System Admin). -4. **Save**. -5. Open the user → **Permissions** → grant role on objects. - -**Example** - -| Field | Value | -| --------- | ------------------------------- | -| Username | `alice` | -| Email | `alice@example.com` | -| User Type | Normal | -| Role | `Project Admin` on `webapp-iac` | - ---- - -## Teams - -![Teams](img/handbook/teams.png) - -**What each marker means:** - -1. **Create Team** — opens the form below. - -A Team groups users so permissions can be granted in bulk. - -**Create Team** - -![Create Team](img/handbook/teams_new.png) - -**What each marker means:** - -1. **Name** — short id, e.g. `webapp-devs`. -2. **Description** — purpose, e.g. `Engineers who deploy the webapp`. -3. **Organization** — parent org for the team. -4. **Create Team** — submits the form. - -**Step by step** - -1. Click **Teams** → **Add**. -2. Fill in **Name**, **Organization**, **Description**. -3. **Save**. -4. Open the team → **Access** tab → add members. -5. Grant the team a role on a project / template / inventory. - -**Example** - -> Team: `webapp-devs` · Org: `Platform` · Members: `alice`, `bob` · Role: `Execute` on template `deploy-webapp`. - ---- - -# ADMIN - -## Instances - -![Instances](img/handbook/instances.png) - -**What each marker means:** - -1. **Page heading** — list of cluster nodes. Click any row to enable / disable a node or adjust its capacity. - -Physical or virtual nodes that run jobs (control plane + execution plane). - -**Step by step** - -1. Click **Instances**. -2. Read the table: **Hostname**, **Node Type**, **Capacity**, **Used**, **Status**. -3. Click an instance → **Disable** (drain) or **Enable**. - -**Example** - -> Drain `worker-03` before reboot → mark Disabled → wait for jobs to drain → reboot → mark Enabled. - ---- - -## Instance Groups - -![Instance Groups](img/handbook/instance_groups.png) - -**What each marker means:** - -1. **Page heading** — logical pools of instances. Click a group to manage members and policy. - -Logical pools of instances. Templates can be pinned to a group (e.g., `gpu-pool`, `eu-west-pool`). - -**Step by step** - -1. Click **Instance Groups** → **Add**. -2. Fill in **Name** and **Policy** (min instances, max idle). -3. **Save**. -4. Open the group → **Instances** tab → attach instances. -5. Open a Job Template → set its **Instance Group** to this one. - -**Example** - -| Field | Value | -| ------------------------ | ------------------------------ | -| Name | `eu-west-pool` | -| Policy instances minimum | 2 | -| Members | `worker-eu-01`, `worker-eu-02` | - ---- - -## Execution Environments - -![Execution Environments](img/handbook/execution_environments.png) - -**What each marker means:** - -1. **Page heading** — container images that hold the runtime for jobs. Click any row to edit pull policy or registry credential. - -Container images that hold the runtime (Python, collections, binaries) used to run jobs. - -**Step by step** - -1. Click **Execution Env** → **Add**. -2. Fill in: - - **Name** - - **Image** (`registry/repo:tag`) - - **Pull Policy** (`always` / `missing` / `never`) - - **Registry credential** -3. **Save**. -4. Reference it from a Job Template’s **Execution Environment** field. - -**Example** - -```yaml -name: ee-aws-2026.04 -image: registry.example.com/forail/ee-aws:2026.04 -pull: always -credential: harbor-pull -``` - ---- - -## Notifications - -![Notifications](img/handbook/notifications.png) - -**What each marker means:** - -1. **Create** — opens the form below. - -Channels Forail can send messages to (email, Slack, PagerDuty, MS Teams, webhooks). - -**Create Notification Template** - -![Create Notification Template](img/handbook/notifications_new.png) - -**What each marker means:** - -1. **Name** — short id, e.g. `slack-secops`. -2. **Notification Type** — Email / Slack / PagerDuty / Webhook / MS Teams / etc. -3. **Create** — submits the form (next step asks for type-specific fields like Slack token + channel). - -**Step by step** - -1. Click **Notifications** → **Add**. -2. Pick **Type** (Email / Slack / PagerDuty / Webhook / …). -3. Fill in the type-specific fields. -4. Click **Test** → **Save**. -5. Attach the notification to a Job Template, Project, or Workflow on its **Notifications** tab. - -**Example — Slack** - -| Field | Value | -| ------- | ---------------- | -| Name | `slack-secops` | -| Type | Slack | -| Token | `xoxb-…` | -| Channel | `#secops-alerts` | - ---- - -## Topology - -![Topology](img/handbook/topology.png) - -**What each marker means:** - -1. **Page heading** — visual mesh map of the cluster. Drag to pan, scroll to zoom, click nodes / links for detail. - -Visual map of the cluster: control nodes, hop nodes, execution nodes, mesh links. - -**Step by step** - -1. Click **Topology**. -2. Drag to pan, scroll to zoom. -3. Click any node for details (capacity, version, peers). -4. Click any link to see latency and link status. - -**Example** - -> Suspect a mesh issue → open Topology → spot a red link between `hop-eu` and `worker-eu-02` → click it → read the error. - ---- - -## Settings - -![Settings](img/handbook/settings.png) - -**What each marker means:** - -1. **Page heading** — global platform configuration grouped by category (Authentication, System, Jobs, UI, Logging, License). - -Global platform configuration: auth, system, jobs, UI, logging, license. - -**Step by step** - -1. Click **Settings**. -2. Pick a category (Authentication, System, Jobs, UI, Logging, License). -3. Edit the field, click **Save**. -4. Some changes (e.g., auth) require a service reload — banner will indicate. - -**Example — bump max concurrent jobs** - -> Settings → Jobs → set **Max Concurrent Jobs** to `200` → Save. - ---- - -# Appendix — Common Workflows End-to-End - -### A) Provision a new dev VM (self-service path) - -1. [Catalog Admin](#catalog-admin) — admin publishes the _New Dev VM_ item. -2. End user opens [Service Portal](#service-portal) → submits the form. -3. Item appears in [Approvals](#approvals) → approver approves. -4. Forail launches the [Templates](#templates) job behind the item. -5. End user watches it under [My Requests](#my-requests) and [Jobs](#jobs). - -### B) Catch and fix configuration drift - -1. Take a [Fact Snapshot](#fact-snapshots) of the production inventory. -2. Define an [Alert Rule](#alert-rules). -3. Run [Drift Detections](#drift-detections) on a schedule. -4. Mismatches open [Drift Alerts](#drift-alerts). -5. Fix via a [Templates](#templates) remediation job. - -### C) Deploy a new release - -1. Update playbooks in the Git repo behind your [Project](#projects). -2. Click **Sync** on the project. -3. Open the [Templates](#templates) deploy job → **Launch** with the new version variable. -4. Watch in [Jobs](#jobs). -5. Confirm in [Analytics](#analytics) → success rate stays green. - ---- - -_End of handbook._ diff --git a/docs/RELEASE_NOTES_v2026.03.0.md b/docs/RELEASE_NOTES_v2026.03.0.md deleted file mode 100644 index a71d108..0000000 --- a/docs/RELEASE_NOTES_v2026.03.0.md +++ /dev/null @@ -1,144 +0,0 @@ -# Forail 2026.03.0 — Release Notes - -**Release date:** 2026-03-11 -**Based on:** AWX 24.6.1 -**License:** Apache License 2.0 - ---- - -## Overview - -Forail 2026.03.0 is the first official release — a complete modernization of AWX 24.6.1 across 9 development phases spanning 25 weeks. Every layer has been upgraded: dependencies, backend, frontend, Docker images, deployment stack, and CI/CD. - ---- - -## Highlights - -### Modern Stack - -- **Python 3.12** (from 3.11) -- **Node.js 20** (from 18) -- **Django 4.2.17** with 40+ upgraded packages -- **React 18 + TypeScript + Vite + Tailwind CSS** (new Forail UI) -- **Channels 4 / Daphne 4 / Cython 3** migration completed - -### New Forail UI - -- Complete rewrite in React 18 with TypeScript -- Vite build system (replaces CRA/react-scripts) -- Tailwind CSS for styling (replaces PatternFly 4 + Styled Components) -- Dashboard with real-time job status, host counts, project health -- Full CRUD for all major resources (templates, credentials, projects, inventories, hosts, organizations, teams, users, notification templates, schedules) -- Job output streaming with ANSI color support -- Workflow visualizer (read-only) -- Survey editor for job/workflow templates -- Copy/clone support for templates, credentials, notifications -- Settings management UI with per-category editing -- Force password change on first superuser login -- Legacy UI preserved at `/ui_legacy/` - -### Production Docker Compose - -- 6-service deployment: PostgreSQL 15, Redis 7, init, web, task, Nginx -- TLS termination via Nginx reverse proxy -- Automated backup/restore scripts -- Health checks on all services -- Environment-based configuration (`.env.example` template) - -### Dual Docker Images - -- **CentOS Stream 9** — 882MB (`forail:2026.03.0-centos`) -- **Ubuntu 24.04** — 932MB (`forail:2026.03.0-ubuntu`) - -### CI/CD Pipelines - -- **GitLab CI** (`.gitlab-ci.yml`) — 5 stages: lint, test, build, security, release -- **Jenkins** (`Jenkinsfile`) — equivalent pipeline with parallel stages -- Version derived from git tag (`v2026.03.0` → `2026.03.0`) -- Automated Harbor registry push on tag release -- pip-audit + Trivy security scanning integrated - ---- - -## Quality Metrics - -| Category | Result | -| ----------------------- | --------------------------------- | -| Python unit tests | 1237 passed, 0 failed | -| Frontend unit tests | 42 passed, 0 failed | -| Functional API tests | 989 passed, 0 failed, 1 skipped | -| Python lint (flake8) | 0 errors | -| Frontend lint (tsc) | 0 errors | -| Python CVEs (pip-audit) | 15 remaining (0 critical runtime) | -| Container CVEs (Trivy) | 0 CRITICAL | - ---- - -## Breaking Changes - -- **Minimum Python version**: 3.12 (was 3.11) -- **Minimum Node.js version**: 20 (was 18) -- **CalVer versioning**: version scheme changed from SemVer (`24.6.x`) to CalVer (`2026.03.0`) -- **aioredis removed**: replaced by redis-py (channels 4 migration) -- **async-timeout removed**: Python 3.12 has `asyncio.timeout` built-in -- **Frontend**: new Forail UI at `/`, legacy AWX UI moved to `/ui_legacy/` - ---- - -## Dependency Changes (Major) - -| Package | Before | After | -| ------------------ | ------- | ------- | -| Django | 4.2.10 | 4.2.17 | -| channels | 3.0.5 | 4.1.0 | -| daphne | 3.0.2 | 4.1.2 | -| cryptography | 41.0.7 | 42.0.8 | -| Cython | 0.29.37 | 3.0.11 | -| grpcio | 1.62.2 | 1.67.1 | -| twisted | 24.3.0 | 24.7.0 | -| boto3 | 1.34.42 | 1.35.36 | -| redis | 5.0.1 | 5.2.1 | -| aiohttp | 3.9.3 | 3.10.10 | -| psutil | 5.9.8 | 6.1.0 | -| pip (build) | 21.2.4 | 24.0 | -| setuptools (build) | 69.0.2 | 70.0.0 | - ---- - -## Build Fixes Applied - -1. OpenSSL version pin removed (CentOS Stream 9 repo changes) -2. Rsyslog version pin removed -3. django-ansible-base pinned to stable `2024.9.4` (was `@devel`) -4. Argparse crash fix for Python 3.12.8+ (`_parse_known_args` intermixed parameter) -5. Ubuntu Dockerfile: npm package, pkg-config, bash brace expansion, storage.conf lookup -6. pip hash reset after Node.js upgrade in Dockerfile - ---- - -## Deployment - -### Quick Start (Docker Compose) - -```bash -cd tools/docker-compose-prod -cp .env.example .env -# Edit .env with your secrets -docker compose up -d -``` - -### Docker Images - -```bash -# CentOS (default) -docker pull forail:2026.03.0 - -# Ubuntu -docker pull forail:2026.03.0-ubuntu -``` - ---- - -## Full Changelog - -See [CHANGELOG.md](https://github.com/forail-platform/forail-devops/blob/main/CHANGELOG.md) for the complete list of changes across all 9 phases. diff --git a/docs/RELEASE_NOTES_v2026.04.0.md b/docs/RELEASE_NOTES_v2026.04.0.md deleted file mode 100644 index 61d675a..0000000 --- a/docs/RELEASE_NOTES_v2026.04.0.md +++ /dev/null @@ -1,185 +0,0 @@ -# Forail 2026.04.0 — Release Notes - -**Release date:** 2026-04-03 -**Based on:** Forail 2026.03.0 + new features -**License:** Apache License 2.0 - ---- - -## Overview - -Forail 2026.04.0 delivers the remaining Tier 1 features from the post-release roadmap: -Event-Driven Automation (EDA), AI Assistant, Dynamic Surveys, and Improved Audit Trail. - ---- - -## New Features - -### Event-Driven Automation (EDA) - -Webhook-based event routing with user-defined rules. External systems (GitHub, GitLab, -Alertmanager, PagerDuty, Datadog, CloudWatch, or any generic HTTP source) can trigger -automated job launches, workflow executions, or notification dispatches. - -- **EventRule model:** Conditions (Jinja2) + Actions (launch job, workflow, notification) -- **Public webhook receiver:** `/api/v2/eda_webhooks//` with HMAC signature verification -- **Jinja2 condition engine:** Sandboxed evaluation against webhook payloads -- **Outbound webhooks:** Push job status changes to external systems -- **EventLog:** Full audit trail of received webhooks and rule evaluation results -- **Frontend:** New "Automation" sidebar section with Event Rules, Event Logs, Outbound Webhooks pages -- **Security:** HMAC verification (SHA-256/SHA-1), rate limiting via throttle, payload size limits, deduplication -- **Dry-run test endpoint:** Evaluate conditions without firing actions - -### AI Assistant (Ollama RAG) - -Optional microservice providing context-aware chat assistance using local LLMs. - -- **forail-assistant** repository: FastAPI + Ollama + ChromaDB -- **SSE streaming** for real-time token delivery -- **Frontend chat panel** with floating button, markdown rendering, context awareness -- **Privacy-first:** All processing on-premises, no cloud API calls - -### Dynamic Surveys - -Survey questions with choices populated at launch time from three sources: -database queries, external API calls, and Jinja2 templates. - -### Improved Audit Trail - -- **ActivityStream enhanced:** Now captures `actor_ip`, `actor_user_agent`, `actor_session_id` -- **AuditEvent model:** Immutable append-only security log for compliance -- **Frontend Audit Log page:** Filters, expandable rows, CSV export -- **SIEM export:** Flat JSON format for Splunk/ELK/Datadog - ---- - -## New API Endpoints - -| Endpoint | Method | Description | -| --------------------------------------- | ------------------ | --------------------------------- | -| `/api/v2/event_rules/` | GET, POST | List/create event rules | -| `/api/v2/event_rules/{id}/` | GET, PATCH, DELETE | Event rule CRUD | -| `/api/v2/event_rules/{id}/webhook_key/` | GET, POST | Get/rotate webhook key | -| `/api/v2/event_rules/{id}/event_logs/` | GET | Logs for this rule | -| `/api/v2/event_rules/{id}/test/` | POST | Dry-run condition test | -| `/api/v2/event_rules/{id}/enable/` | POST | Enable rule | -| `/api/v2/event_rules/{id}/disable/` | POST | Disable rule | -| `/api/v2/event_logs/` | GET | List all event logs | -| `/api/v2/event_logs/{id}/` | GET | Event log detail | -| `/api/v2/outbound_webhooks/` | GET, POST | List/create outbound webhooks | -| `/api/v2/outbound_webhooks/{id}/` | GET, PATCH, DELETE | Outbound webhook CRUD | -| `/api/v2/outbound_webhooks/{id}/test/` | POST | Send test payload | -| `/api/v2/eda_webhooks/{path}/` | POST | Public webhook receiver (no auth) | -| `/api/v2/audit_events/` | GET | List audit events | -| `/api/v2/audit_events/?format=csv` | GET | Export as CSV | -| `/api/v2/audit_events/?format=siem` | GET | Export for SIEM | - ---- - -## New Database Tables - -| Table | Description | -| ---------------------- | ---------------------------------------------- | -| `main_eventrule` | Webhook rules with conditions and actions | -| `main_eventlog` | Incoming webhook events and evaluation results | -| `main_outboundwebhook` | Outbound webhook configurations | -| `main_auditevent` | Immutable security audit log | - ---- - -## Frontend Changes - -- New **Automation** sidebar section: Event Rules, Event Logs, Outbound Webhooks -- New **Audit Log** page with filters, expandable rows, CSV export -- New **AI Assistant** floating chat panel -- **Dynamic survey** support in launch dialog and survey editor -- 10 new pages, 3 new API hooks, TypeScript interfaces for all EDA types - ---- - -## Quality Metrics - -| Metric | Value | -| ------------------------------ | --------- | -| Backend tests (standalone EDA) | 38 passed | -| Frontend tests (vitest) | 58 passed | -| TypeScript compilation | 0 errors | - ---- - -## Documentation - -New documentation files: - -- `docs/13-dynamic-surveys.md` — Dynamic survey system -- `docs/14-audit-trail.md` — Audit trail and compliance logging -- `docs/15-event-driven-automation.md` — EDA architecture, API, security, quick start - -Updated documentation: - -- `01-architecture-overview.md` — Added EDA webhook flow -- `02-backend-django.md` — Added EDA models reference -- `03-frontend-react.md` — Added EDA routes -- `04-task-engine.md` — Added EDA as job launch source -- `06-database-schema.md` — Added EDA tables and ER relationships -- `09-testing-guide.md` — Added standalone test suite -- `11-api-reference.md` — Added all EDA endpoints -- `wiki-index.md` — Added docs 13, 14, 15 -- `future_development_plan.md` — Updated competitive landscape (EDA, Dynamic Surveys, AI Assistant, Audit Trail: Planned → Yes) - ---- - -## v2026.04.0-patch1 (2026-04-13) - -### Improvements - -- **AI Assistant redesign** — Floating chat widget with welcome message, minimize/maximize, message timestamps, streaming responses -- **Assistant RAG documentation** — 14 knowledge base files (850 lines) covering all features: EDA, Drift, Policy, Scanner, Service Catalog, Tenancy, WebAuthn, Recommendations, Observability, Wizards, API reference, common errors -- **ChromaDB client upgrade** — Updated from 0.5.23 to 1.5.7 for compatibility with ChromaDB server 1.4.x -- **Nginx proxy** — Added `/assistant/` proxy route for AI Assistant API with SSE streaming support - -### Bug Fixes - -- **Migration ordering** — Fixed `_OrgAdmin_to_use_ig.py` to use `apps.get_model()` instead of direct model import, preventing schema mismatch on fresh deploys -- **Missing migrations** — Added `0204_audit_event` migration for AuditEvent model and ActivityStream audit fields (actor_ip, actor_user_agent, actor_session_id) -- **Migration chain** — Reordered migrations so audit_event (0204) precedes RLS policies (0206) which references the table -- **Assistant docker-compose** — Fixed healthchecks for Ollama and ChromaDB containers (curl not available in images) -- **Assistant registry path** — Fixed image path from `forail-platform` to `forail-platform` - -### Testing - -- **Backend** — Added `test_comprehensive.py`: 97 standalone tests covering SimpleDAG (cycle detection, topological sort), K8s CPU/memory parsing, Jinja sanitization, safe YAML dump, string coercion, vars validation -- **Frontend** — Added `statusConfig.test.ts`, `client.test.ts`, `app.test.ts`: 72 tests for status mappings, API error flattening, route completeness (all 70+ routes verified) -- **CI pipeline** — Jenkinsfile now runs 4 parallel test stages: Backend Standalone, Backend Unit, Frontend, Assistant -- **Total test count** — Backend 404 + Frontend 212 = 616 tests passing - -### Refactoring - -- **forail-assistant** — Extracted shared ChromaDB client and embedding functions into `app/db.py`, eliminating 32 lines of duplicated code between `rag.py` and `indexer.py` - -### Quality Metrics - -| Metric | Value | -| ------------------------ | -------------------------- | -| Backend standalone tests | 404 passed | -| Frontend tests (vitest) | 212 passed | -| Assistant knowledge base | 14 docs, 92 chunks indexed | -| TypeScript compilation | 0 errors | - ---- - -## Competitive Landscape Update - -| Feature | Forail | AWX | AAP 2.5+ | Ascender | Semaphore | -| ----------------------- | ------- | --- | -------- | -------- | --------- | -| Dynamic surveys | **Yes** | No | No | No | No | -| Event-driven (EDA) | **Yes** | No | Yes | No | No | -| AI assistant (RAG) | **Yes** | No | Yes | No | No | -| Audit trail (immutable) | **Yes** | No | Partial | No | No | -| IaC scanning | **Yes** | No | No | No | No | -| Policy-as-Code (OPA) | **Yes** | No | No | No | No | -| Drift detection | **Yes** | No | No | No | No | -| Self-service portal | **Yes** | No | Partial | No | No | -| Multi-tenancy (RLS) | **Yes** | No | Partial | No | No | -| WebAuthn/Passkey MFA | **Yes** | No | No | No | No | -| Smart recommendations | **Yes** | No | No | No | No | diff --git a/docs/RELEASE_NOTES_v2026.05.0.md b/docs/RELEASE_NOTES_v2026.05.0.md deleted file mode 100644 index 272e4b9..0000000 --- a/docs/RELEASE_NOTES_v2026.05.0.md +++ /dev/null @@ -1,277 +0,0 @@ -# Forail 2026.05.0 — Release Notes - -**Release date:** 2026-05-22 -**Based on:** Forail 2026.04.0 + new features -**License:** Apache License 2.0 - ---- - -## Overview - -Forail 2026.05.0 is the platform's GA milestone. The Kubernetes operator -graduates to **v1.0.0** with a complete resource model (9 CRDs) and -multi-cluster control-plane support, the dev-cluster moves to a -production-shaped 3-master/4-worker HA k3s topology, and the AI -Assistant is repackaged as a single all-in-one image that runs on a -single PVC. - ---- - -## Component Versions - -| Component | Version | Notes | -| ----------------- | --------- | ------------------------------------------------------------------ | -| forail-backend | 2026.05.0 | Migration `0208` fix for `DriftAlertRule` audit fields | -| forail-frontend | 0.1.0 | No changes this cycle (UI from v2026.04.0 still current) | -| forail-assistant | 2026.05.0 | All-in-one image (Ollama + ChromaDB embedded), `gemma3:1b` default | -| forail-operator | **1.0.0** | 5 new CRDs, multi-cluster, OLM bundle | -| forail-helm | **1.0.0** | `appVersion: 2026.05.0` | -| forail-dev-cluster | — | 3m+4w k3s 1.30 (was 2m+2w kubeadm) | - ---- - -## New Features - -### Forail Operator v1.0.0 — Complete Resource Model + Multi-Cluster - -The Kubernetes operator now covers the full Forail object graph and can -fan out to multiple Forail backends from a single control plane. - -**5 new CRDs:** - -- **`Project`** — SCM-backed source of playbooks, with optional - Credential + ExecutionEnvironment references. -- **`Organization`** — top-level tenant container with max-host quota - and a default-EE reference. -- **`Team`** — namespaced team within an Organization. `spec.users[]` - is reconciled declaratively against - `/api/v2/teams/{id}/users/` (add/remove users to match spec). -- **`Workflow`** — `workflow_job_template` wrapper with a declarative - DAG of nodes (`spec.nodes[]` keyed by `identifier`) and three edge - types (`successNodes`, `failureNodes`, `alwaysNodes`). The - reconciler diffs against - `/workflow_job_template_nodes/` + each node's sub-relations. -- **`ForailInstance`** — describes a Forail backend (URL + bearer - token via `tokenSecretRef`) that other CRs target by name via - `spec.forailInstance`. - -**Multi-cluster (`forailapi.ClientPool`):** - -Per-CR resolution of which Forail backend to write to. CRs without -`spec.forailInstance` fall back to the default client supplied via -`--forail-url` / `--forail-token`. Generation-gated cache invalidation -on the ForailInstance reconciler rebuilds the client lazily when the -target URL or secret reference changes. - -**OLM packaging:** - -- `config/manifests/bases/forail-operator.clusterserviceversion.yaml` - — CSV with `alm-examples`, `customresourcedefinitions.owned` - entries for all 9 CRDs, deployment spec, cluster-scoped RBAC. -- `bundle.Dockerfile` + `bundle/{manifests,metadata}` for OperatorHub - catalog builds. -- Makefile targets: `bundle`, `bundle-build`, `catalog-build`. - -**Resource model summary:** - -| CRD | Scope | Reconciles to | -| ----------------- | ---------- | --------------------------------------------- | -| Inventory | Namespaced | `/api/v2/inventories/` | -| Credential | Namespaced | `/api/v2/credentials/` | -| JobTemplate | Namespaced | `/api/v2/job_templates/` | -| Schedule | Namespaced | `/api/v2/schedules/` | -| **Project** | Namespaced | `/api/v2/projects/` | -| **Organization** | Cluster | `/api/v2/organizations/` | -| **Team** | Namespaced | `/api/v2/teams/` + user membership | -| **Workflow** | Namespaced | `/api/v2/workflow_job_templates/` + DAG nodes | -| **ForailInstance** | Namespaced | (control-plane only; no upstream call) | - -### Forail Assistant — All-in-One Image - -The AI Assistant is repackaged from three Compose services (Ollama + -ChromaDB + FastAPI + a setup container) into **one container** with a -single `/data` volume. - -- **`entrypoint.sh`** orchestrates startup: `ollama serve`, conditional - model pull (the configured chat model + `nomic-embed-text`), - `chroma run`, document indexing, then `uvicorn`. -- Default chat model: **`gemma3:1b`** (was `mistral:7b`). Smaller and - faster; answer quality reduced for general questions but adequate - for short RAG-grounded responses against the in-tree docs. -- Default `top_k` lowered from 5 to 3. -- Default config hosts switched from `ollama` / `chromadb` to - `localhost` to match the single-container layout. -- Explicit `httpx.Timeout(connect=10, read=300, write=10, pool=10)` - so the long read timeout no longer applies to connection setup. -- New RAG corpus under `docs_to_index/deployment/` (architecture, - Docker deployment, CI/CD, contributing, admin/user handbooks, - startup walkthrough) so the assistant can answer operational - questions. - -The Helm chart (`assistant.enabled=true`) provisions a single -Deployment + PVC + Service (default 20 GiB volume, -1 GiB/250m requests, 4 GiB/2 vCPU limits, `startupProbe` -`failureThreshold: 30` ≈ 5 min boot budget for the first-pull model -download). - -### Forail Helm 1.0.0 - -- Chart version bumped to **1.0.0** (from 0.3.0) marking platform GA - alongside `forail-operator` v1.0.0. -- `appVersion: 2026.05.0` tracks the backend release that ships the - `0208_driftalertrule_audit_fields` migration fix. -- 5 new operator CRDs added under `helm/crds/` so `helm install -forail-operator` provisions the complete schema. - -### Dev-Cluster — 3-Master / 4-Worker HA k3s - -The Vagrant test cluster (`forail-dev-cluster`) was rebuilt for -production-shaped HA: - -- Topology: **3 control-plane (k8s-m1..m3) + 4 worker (k8s-w1..w4)** - on `192.168.56.30-36`. Per-VM resources bumped to 2 vCPU / 4 GB - (was 2 vCPU / 2 GB) → 14 vCPU, 28 GB total. -- **Switched distribution from kubeadm to k3s** (v1.30.4+k3s1). k3s - bundles Traefik, local-path-provisioner, klipper-lb (servicelb), - CoreDNS, and metrics-server, so `post-cluster-setup.sh` collapsed - from 4 stages to creating just the `forail` namespace + Harbor - pull-secret + self-signed TLS cert. -- **HA control plane via embedded etcd**: first server runs - `k3s server --cluster-init`, the other two join with `--server`. - TLS SANs cover all 3 server IPs/hostnames so `kubectl` works - against any master. 3-node etcd quorum tolerates a single master - failure (was 2-node quorum, which lost the cluster on any master - loss). -- `--flannel-iface=eth1` passed explicitly on every node — fixes the - long-standing wrong-NIC binding that broke pod networking on the - kubeadm setup. - -Provisioning scripts renamed: `master-init.sh` / `master-join.sh` / -`worker-join.sh` → `server-init.sh` / `server-join.sh` / -`agent-join.sh`. - ---- - -## Bug Fixes - -### Backend — `DriftAlertRule` cascade-delete (migration `0208`) - -`DriftAlertRule` rows could not be cascade-deleted from an -Organization: the original `0198_drift_models` migration omitted the -`created_by` / `modified_by` FK columns inherited from -`PrimordialModel`, so any ORM query joining the audit columns blew up -with `psycopg.UndefinedColumn`. - -- Symptom in the wild: `DELETE /api/v2/organizations/{id}/` returned - HTTP 500 and the `forail-operator` Organization finalizer hung - forever. -- Migration `0208_driftalertrule_audit_fields` backfills both columns - as nullable + `SET_NULL`. -- New schema-level regression test - (`tests_standalone/test_drift_audit_fields_schema.py`) parses the - migration sequence and asserts the columns exist so the gap can't - re-open. - ---- - -## Upgrade Path - -### From 2026.04.0 → 2026.05.0 - -**Backend (`forail-helm` upgrade):** - -```sh -helm repo update -helm upgrade forail forail-platform/forail -n forail \ - --version 1.0.0 \ - --reuse-values -kubectl -n forail exec deploy/forail-web -- forail-manage migrate -``` - -The `0208` migration is forward-compatible (nullable column add, -SET_NULL FKs). No downtime; existing `DriftAlertRule` rows backfill -with `NULL` audit fields. - -**Operator (`forail-operator` upgrade):** - -If upgrading the operator from 0.3.x to 1.0.0: - -```sh -# 1. Apply the new CRDs first (Helm hooks won't re-install CRDs). -kubectl apply -f https://github.com/forail-platform/forail-operator/releases/download/v1.0.0/crds.yaml - -# 2. Upgrade the operator chart. -helm upgrade forail-operator forail-platform/forail-operator -n forail-operator \ - --version 1.0.0 \ - --reuse-values -``` - -Existing `Inventory` / `Credential` / `JobTemplate` / `Schedule` CRs -continue to work unchanged. - -**Multi-cluster (optional):** - -To start fanning out to multiple Forail backends, create a -`ForailInstance` per backend and reference it in your CRs: - -```yaml -apiVersion: forail.forail-platform.io/v1alpha1 -kind: ForailInstance -metadata: - name: forail-staging -spec: - url: https://forail-staging.example.com - tokenSecretRef: - name: forail-staging-token - key: token ---- -apiVersion: forail.forail-platform.io/v1alpha1 -kind: JobTemplate -metadata: - name: deploy-staging -spec: - forailInstance: forail-staging # routes to the staging backend - ... -``` - -CRs without `spec.forailInstance` continue to use the default -operator-wide URL/token. - ---- - -## Documentation - -New / updated documentation: - -- **`forail-platform.github.io/docs/operator-v1.html`** — Dedicated - page for v1.0.0: multi-cluster, Workflow DAG model, OLM bundle, - upgrade path. -- **`forail-platform.github.io/docs/kubernetes.html`** — Refreshed for - v1.0.0 (9-CRD table, sidebar reorganized). -- **`forail-assistant/docs_to_index/deployment/`** — 8 new operational - markdown files indexed into the RAG corpus. - ---- - -## Known Issues - -- **OLM bundle warnings:** 4 of the older CRDs (Inventory, Credential, - JobTemplate, Schedule) don't yet have `alm-examples` entries in the - CSV, and the CSV lacks `spec.icon`. Both are cosmetic - (`operator-sdk bundle validate` warnings, not errors) and do not - block submission to OperatorHub. Slated for `1.0.1`. -- **`forail-assistant` first boot** can take 3–5 minutes on the - initial pod start while `gemma3:1b` and `nomic-embed-text` are - pulled into the PVC. The `startupProbe` (`failureThreshold: 30`) - budgets ~5 minutes; raise it if your registry mirror is slow. - ---- - -## Quality Metrics - -| Metric | Value | -| ------------------------------------------------------------------------------------- | -------------------------------------- | -| Operator e2e (live 3m+4w k3s) | 9/9 CRDs reconcile cleanly | -| Backend regression (`test_drift_audit_fields_schema`) | passing | -| Helm chart (`helm lint` + `helm template`, both default and `assistant.enabled=true`) | passing | -| Operator OLM bundle (`operator-sdk bundle validate`) | passing (4 warnings, see Known Issues) | diff --git a/docs/RELEASE_NOTES_v2026.06.0.md b/docs/RELEASE_NOTES_v2026.06.0.md deleted file mode 100644 index 84a6f27..0000000 --- a/docs/RELEASE_NOTES_v2026.06.0.md +++ /dev/null @@ -1,64 +0,0 @@ -# Forail 2026.06.0 — Release Notes - -**Release date:** 2026-06-14 -**Based on:** Forail 2026.05.0 -**License:** Apache License 2.0 - ---- - -## Overview - -Forail 2026.06.0 is the **project rename release**. The platform — -previously published as *Forge* under the `forgeplatform` GitHub -organization — is now **Forail**, under the **`forail-platform`** -organization. This was a deliberate move to a unique, unambiguous name -that does not collide with the many existing "forge"-named projects. - -There are **no functional changes** in this release. Every component was -verified to build and deploy unchanged after the rename (full stack -brought up on a 5-node k3s cluster, operator reconciling, REST API -serving `HTTP 200`, database migrations applied). - -## What changed - -- **Name:** `forge` → `forail`, organization `forgeplatform` → - `forail-platform` (note the hyphen). -- **Container images:** now published to - `ghcr.io/forail-platform/forail-`. The old - `ghcr.io/forgeplatform/forge-*` packages are retired. -- **Python package:** `forge` → `forail`; CLI `forge-manage` → - `forail-manage` (the `awx-manage` compatibility alias is retained). -- **Kubernetes operator:** Go module - `github.com/forail-platform/forail-operator`; CRD API group - `forge.forgeplatform.io` → **`forail.forail-platform.io`**; the - `ForgeInstance` kind is now **`ForailInstance`**. All 9 CRDs renamed. -- **Helm chart / Compose:** image references and the `forail.lan` - ingress host updated; values pinned to the `2026.06.0` images. -- **Mobile:** Kotlin package `io.forailplatform.mobile` (no hyphen — - hyphens are invalid in JVM package identifiers). -- **Versioning:** all platform components are unified on CalVer - `2026.06.0` for this coordinated release. - -## Upgrade guide - -This is a rename, not a data-model change, so existing installs keep -working on the old images until you re-point them. - -1. **Kubernetes (Helm):** - ```bash - helm upgrade forail oci://ghcr.io/forail-platform/forail-helm \ - --version 2026.6.0 -n forail - ``` -2. **Operator:** because the CRD API group changed - (`forge.forgeplatform.io` → `forail.forail-platform.io`), this is a - **breaking change for existing CRs**. Re-apply your resources against - the new group. The operator is republished as `forail-operator`. -3. **Docker Compose:** pull `FORAIL_TAG=2026.06.0` and - `ghcr.io/forail-platform/forail-*` images (see `.env.example`). - -## Notes - -- GitHub automatically redirects the old organization/repository URLs, - so existing links continue to resolve. -- A fresh OperatorHub.io submission under the `forail-operator` name is - planned to replace the retired `forge-operator` listing. diff --git a/docs/RELEASE_NOTES_v2026.07.0.md b/docs/RELEASE_NOTES_v2026.07.0.md deleted file mode 100644 index 26294d5..0000000 --- a/docs/RELEASE_NOTES_v2026.07.0.md +++ /dev/null @@ -1,413 +0,0 @@ -# Forail 2026.07.0 — Release Notes - -**Release date:** 2026-07-25 -**Based on:** Forail 2026.06.0 -**License:** Apache License 2.0 - ---- - -## Overview - -2026.07.0 is a **security-hardening and migration** release. It tightens several -authentication and audit defaults (some of which are **breaking** for existing -SAML deployments), makes tenant isolation fail closed, replaces the insecure -defaults in the Helm chart and Compose stack (**breaking** — installs now require -an explicit admin password), and introduces a one-shot **AWX → Forail importer** -so teams can migrate off AWX/AAP without rebuilding their configuration by hand. - -Kubernetes installs also gain the pod RBAC and receptor worktype that in-cluster -job execution needs — see *Fixed*. - -There are no data-model changes. Two idempotent migrations (`0209`, `0210`) ship -with the tenancy work; both only drop and re-create PostgreSQL row-level-security -policies, so they apply to an existing database without touching table schemas or -rows. - -## ⚠️ Known issue — upgrading breaks job execution - -> **Fixed in 2026.07.1.** Upgrade to it instead of applying the workaround -> below — see the [2026.07.1 release notes](RELEASE_NOTES_v2026.07.1.md). The -> rest of this section describes what happens if you stay on 2026.07.0. - -**If you upgrade an existing 2026.06.0 install, jobs stop running: they are -accepted and then stay in `pending` indefinitely.** The only hint is the job's -`job_explanation`, *"This job is not ready to start because there is not enough -available capacity"* — accurate, but it does not point at the cause. Fresh -installs are unaffected. The workaround below is verified on a live cluster. - -The `default` instance group has to satisfy two conditions at once for a job to -run locally, and an upgrade breaks both: - -1. **It must contain an instance.** The chart's init Job calls `register_queue - --queuename=default`, which on an upgrade finds the group already there, - prints `Instance Group already registered default` and assigns nothing. -2. **That instance must be able to execute.** The task pod re-registers itself - as `node_type=control` on every start, and a control node only orchestrates. - -Either one alone is enough to hang every launch — both were measured -individually, holding the other fixed. - -Project updates keep working, because they run in `controlplane`, which does -have the instance. The install therefore looks healthy right up until someone -launches a job. - -**Workaround, after `helm upgrade` completes:** - -```bash -kubectl -n forail exec deploy/forail-web -- forail-manage shell -c " -from forail.main.models import Instance, InstanceGroup -i = Instance.objects.get(hostname='forail-node') -i.node_type='hybrid'; i.save(update_fields=['node_type']) -InstanceGroup.objects.get(name='default').instances.add(i)" -``` - -Substitute your own instance hostname if you did not install with the chart -defaults. Any job already sitting in `pending` starts on its own within about a -minute; a fresh short job should return a normal `PLAY RECAP` in a few seconds. - -> **The workaround does not survive a restart of `forail-task`.** That pod -> re-runs `provision_instance` every time it starts — after a node reboot, an -> eviction, or the next `helm upgrade` — and that call resets both `node_type` -> and the group's execution mode. Re-apply it, and re-check job execution, after -> any task-pod restart until the fix ships. - -**Also re-apply your role assignments after upgrading.** Any role assignment -attempted on 2026.06.0 failed silently (the `ScanFinding` / -`TenantIsolationEvent` `FieldDoesNotExist` bug fixed in this release, see -*Fixed*). The upgrade fixes the cause but does not recreate the assignments that -were lost, and *Fixed* saying "no data migration is required" refers to the -schema only. Check the members of every role you rely on and re-grant what is -missing. - -What the upgrade does do correctly: it succeeds, migrations `0209` and `0210` -apply cleanly, and no data is lost — object counts and names are identical -before and after. - -## Security advisories - -**Upgrade from 2026.06.0 or earlier is strongly recommended.** Several of the -fixes below are exploitable on a default install of an earlier release; the -detail is in *Security hardening* and *Breaking changes* further down. - -Severity is this project's own assessment of impact on a default deployment. It -is not CVSS, and no CVE identifiers have been requested. "Affected" means every -release up to and including 2026.06.0. - -| Issue | Severity | Who is exposed | What to do | -|---|---|---|---| -| Deployment artifacts shipped working default credentials | **Critical** | Any install that did not override the shipped secrets | Upgrade; rotate `forailAdminPassword`, `postgresPassword`, `forailSecretKey` and the websocket secret | -| SSO account takeover — accounts associated by email address, not provider UID | **Critical** | Installs using SAML/OIDC/social auth where an IdP can assert an arbitrary email | Upgrade; audit existing SSO-linked accounts for unexpected associations | -| Tenant isolation gate could essentially never fire; RLS failures degraded to global row visibility | **High** | Multi-tenant installs | Upgrade; review `TenantIsolationEvent` records and cross-tenant access in the audit trail | -| `forail-task` ran privileged with a host cgroup mount by default — a container escape to node-root | **High** | Kubernetes and Compose installs using shipped defaults | Upgrade; job execution now needs an explicit opt-in, ideally on dedicated tainted nodes | -| `ALLOWED_HOSTS` defaulted to `*` and session cookies were not `Secure` | **Medium** | Internet-reachable installs | Upgrade; set your real ingress host(s) and terminate TLS | -| Audit records stored the raw session key; `X-Forwarded-For` was trusted unconditionally for the audit source IP | **Medium** | Any install; higher where audit logs are broadly readable | Upgrade; configure `PROXY_IP_ALLOWED_LIST`; treat historical audit rows as sensitive | -| IaC scanner could be pointed outside the project checkout via a job template's `playbook` field | **Medium** | Installs where non-admins can edit job templates | Upgrade | -| Operator held cluster-wide `get/list/watch` on every Secret | **Medium** | Kubernetes installs running the operator | Upgrade the operator to **2026.07.1**; its Secret access is now a namespaced `Role` | -| OAuth `refresh_token` was recorded in activity-stream entries; superuser grant/revoke was not separately audited | **Low** | Any install | Upgrade; consider rotating OAuth tokens that appear in historical activity entries | - -Upgrading does not retroactively clean data written by an earlier release — -rotate the credentials above, and treat pre-upgrade audit and activity rows as -potentially containing secrets. - -## Added - -### AWX → Forail migration importer - -A new backend management command migrates configuration from an existing AWX (or -AAP) installation via its REST API: - -```bash -forail-manage import_from_awx \ - --url https://awx.example.com \ - --token "$AWX_TOKEN" \ - --dry-run # preview; remove to apply -``` - -- Imports Organizations, Users, Teams, Credential Types, Credentials, Projects, - Inventories (with group hierarchy and host membership), Inventory Sources, - Job Templates, Workflow Job Templates (with their node DAG), Schedules, - Notification Templates, and RBAC role assignments, in dependency order. -- **Idempotent** — re-running matches existing objects by natural key (name - within organization; username for users) and updates rather than duplicating. -- `--dry-run` previews all changes inside a rolled-back transaction. -- `--resource ` (repeatable) limits the run to specific resource types. -- Auth via `--token` (preferred) or `--username/--password`; `--insecure` skips - source TLS verification. - -**Secrets are not migrated.** The AWX API never returns secret credential inputs -(it sends `$encrypted$`), and user passwords are not exported. The importer -brings over credential *structure* and non-secret inputs, creates users with an -unusable password, and reports exactly how many secret fields need manual -re-entry afterwards. Notification-template secrets are stripped the same way. - -RBAC role assignments are migrated where the target framework allows it: user -grants and team→object-role grants are applied; organization-member grants to -teams (rejected by the access framework) are skipped with a warning rather than -aborting the run. - -## Security hardening - -- Superuser grant/revoke is now written to the dedicated audit log - (independently of the activity stream). -- Audit records store a SHA-256 hash of the session key, never the raw key. -- `X-Forwarded-For` is trusted for the audit source IP only behind a configured - trusted proxy (`PROXY_IP_ALLOWED_LIST`). -- OAuth `refresh_token` is redacted from activity-stream entries. -- Tenant concurrency-quota errors are logged instead of silently swallowed. - -### Tenant isolation now fails closed - -- The RLS middleware **aborts the request (HTTP 500)** if it cannot install the - tenant scope, instead of continuing with global row visibility. -- The strict-isolation gate resolves the target organization with the caller's - RLS scope removed — previously the lookup ran *inside* the caller's scope, so a - cross-tenant object was invisible and the gate could essentially never fire. It - now denies by default when a covered resource's organization cannot be - determined, and records a `TenantIsolationEvent`. -- RLS coverage extended to `main_eventlog`, and every policy now casts the tenant - GUC via `NULLIF(current_setting(...), '')::int` so the empty "no scope" - sentinel cannot raise (migrations `0209`, `0210`). -- The tenancy rate limiter logs Redis outages loudly and honours - `TENANCY_RATE_LIMIT_FAIL_CLOSED` (default open, for availability). - -### Trust boundaries around import and SSO - -- `import_from_awx` no longer carries privilege across the boundary implicitly: - superuser / system-role promotion requires `--grant-superusers`, custom - credential-type injectors are dropped for admin re-approval unless - `--trust-injectors` is passed, and secrets are read from `AWX_TOKEN` / - `AWX_PASSWORD` in preference to argv. -- **SSO account takeover fixed**: `associate_by_email` was removed from the auth - pipeline — accounts associate by provider UID, never by matching email. -- Tenant provisioning refuses to silently reuse an existing username (which - discarded the supplied password and cross-linked accounts) unless - `attach_existing_admin` is set. -- The IaC scanner can no longer be pointed outside the project checkout via a job - template's `playbook` field (absolute paths / `..`). - -### Deployment defaults — Helm chart and Compose - -Both deployment artifacts shipped working credentials and a privileged worker by -default. That is over: - -- **Helm**: `postgresPassword`, `forailSecretKey` and - `forailBroadcastWebsocketSecret` are auto-generated on first install and reused - across upgrades; `forailAdminPassword` is **required**. `forail-task` runs - non-privileged with no host cgroup mount unless you opt in. Session cookies are - `Secure`, `allowedHosts` is the ingress host plus loopback (not `"*"`), and an - opt-in `NetworkPolicy` plus per-workload `securityContext` knobs are available. -- **Compose**: `FORAIL_TASK_PRIVILEGED` / `FORAIL_TASK_CGROUP` default off, - `FORAIL_ALLOWED_HOSTS` defaults to `localhost,127.0.0.1` instead of `*`, and - `FORAIL_TAG` pins to `2026.07.0` rather than `:latest`. -- **Operator**: the manager no longer holds cluster-wide `get/list/watch` on - every Secret — the credential reconciler's access is a namespaced - `Role`/`RoleBinding` in the operator's own namespace. - - > **Use operator `2026.07.1`.** In `2026.07.0` that narrowing left `Credential` - > CRs working only in the operator's own namespace, because a Credential - > resolves `spec.inputsFrom` in *its* namespace and the Secret cache covered - > only one. `2026.07.1` adds `secretNamespaces` to the operator chart, which - > renders both the per-namespace Secret `Role` and the matching cache scope: - > - > ```sh - > helm install forail-operator ... --set 'secretNamespaces={team-a,team-b}' - > ``` - > - > Still no cluster-wide secrets grant. Everything else in this release is - > unchanged at `2026.07.0`. -- **Assistant**: a wildcard CORS origin no longer combines with credentials, and - `/api/v1/chat` accepts an optional shared bearer token - (`FORAIL_ASSISTANT_CHAT_TOKEN`) with a concurrency cap - (`FORAIL_ASSISTANT_CHAT_MAX_CONCURRENCY`, 429 on overload). - -See **Breaking changes — deployment defaults** below for the upgrade actions. - -## ⚠️ Breaking changes — SAML - -Two SAML defaults changed. They affect installs that rely on the previous, -weaker behavior. - -### 1. Signed assertions + SHA-256 now required by default - -`SOCIAL_AUTH_SAML_SECURITY_CONFIG` now defaults to: - -```json -{ - "requestedAuthnContext": false, - "wantMessagesSigned": true, - "wantAssertionsSigned": true, - "rejectUnsolicitedResponsesWithInResponseTo": true, - "signatureAlgorithm": "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256", - "digestAlgorithm": "http://www.w3.org/2001/04/xmlenc#sha256" -} -``` - -**Impact:** If your IdP sends unsigned responses/assertions, or signs with -SHA-1, logins will be rejected after upgrade. - -**Action:** -- Preferred: reconfigure your IdP to sign responses and assertions with SHA-256. -- Temporary fallback: explicitly set `SOCIAL_AUTH_SAML_SECURITY_CONFIG` via - `PATCH /api/v2/settings/saml/` for a legacy IdP (not recommended for - production). - - > ⚠️ **Setting this replaces the whole dict — it does not merge with the - > secure defaults.** When the setting is unset, Forail's hardened defaults - > apply; the moment you set it, your value is used verbatim and any key you - > omit falls back to the **weak** python-saml/OneLogin default (unsigned - > assertions, SHA-1). So to relax a single key you must re-specify the full - > secure dict with only that key changed, e.g. to accept unsigned assertions - > from one legacy IdP while keeping every other protection: - > - > ```json - > { - > "requestedAuthnContext": false, - > "wantMessagesSigned": true, - > "wantAssertionsSigned": false, - > "rejectUnsolicitedResponsesWithInResponseTo": true, - > "signatureAlgorithm": "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256", - > "digestAlgorithm": "http://www.w3.org/2001/04/xmlenc#sha256" - > } - > ``` - > - > Clearing the setting (back to null) restores the full hardened defaults. - -### 2. SAML role-attribute grants require an explicit value - -Granting `is_superuser` / `is_system_auditor` from a SAML attribute now requires -a non-empty `is_superuser_value` / `is_system_auditor_value`. - -**Impact:** A configuration that sets only `is_superuser_attr` (with no value) -previously granted superuser to **every** user the IdP sent with that attribute. -That now fails safe (no grant) and logs a warning. - -**Action:** Set the required attribute value(s) for the flags you intend to grant. - -## ⚠️ Breaking changes — deployment defaults - -### 1. `helm install` requires an admin password - -`secrets.forailAdminPassword` has no default and no generated fallback; the chart -fails to render without it. The other three secrets (`postgresPassword`, -`forailSecretKey`, `forailBroadcastWebsocketSecret`) are generated on first -install and looked up on subsequent upgrades, so leave them empty unless you pin -them deliberately. - -**Action:** pass `--set secrets.forailAdminPassword=''` on -install. Automation that renders the chart (CI `helm lint` / `helm template`) -needs a throwaway value for the same reason. - -### 2. `forail-task` is no longer privileged by default - -The podman-in-pod execution path needs a privileged container and the host cgroup -namespace; both now default **off**, because a privileged pod with a host cgroup -mount is a trivial container escape. - -**Action, Kubernetes:** `--set task.privileged=true --set task.hostCgroup=true` -(ideally pinning those workers to dedicated, tainted nodes). -**Action, Compose:** `FORAIL_TASK_PRIVILEGED=true FORAIL_TASK_CGROUP=host`. - -### 3. Allowed hosts and secure cookies - -`forail.allowedHosts` / `FORAIL_ALLOWED_HOSTS` no longer default to `"*"`, and -session cookies are `Secure` by default — a deployment served over plain HTTP -will not keep a session. - -**Action:** set your real ingress host(s), and **keep `127.0.0.1,localhost` in the -list** — the in-cluster health probes call the API on loopback. Terminate TLS in -front of the ingress, or set `forail.cookieSecure: "false"` for a lab install. - -## Fixed - -- **The task dispatcher crash-looped on 2026.06.0, so no job could finish.** - The periodic schedule runs `update_active_jobs_gauge_task` every 30 seconds - unconditionally, but in 2026.06.0 that function carried Celery's - `@shared_task` instead of Forail's own `@task()`. Dispatching it raised - `ValueError: ... is not decorated with @task()`, the dispatcher exited, and - whatever was running died with *"Task was canceled due to receiving a - shutdown signal"* — typically surfacing as a failed project update and a job - in `error`. Measured on a fresh 2026.06.0 install: the dispatcher restarted - roughly every 50 seconds, indefinitely. **Anyone still on 2026.06.0 should - upgrade**; there is no configuration that avoids this, since the schedule - entry is not conditional. Fixed by registering the task properly - (`@task(queue=get_task_queuename)`). -- **In-cluster job execution.** Two pieces were missing from the chart, and each - failed a launch on its own. Note this is not "out of the box": project updates - and control-plane jobs still run through podman inside the task pod, so they - also need the privileged opt-in from *Breaking changes* #2 above. Without it - every job dies moments after launch with `mount - /var/lib/containers/storage/overlay: permission denied`, and the only symptom - in the UI is a project or job stuck in `Pending`. The chart now prints a - warning to that effect at install time when the flags are off. The two chart - fixes were: - - No pod RBAC. Jobs run as pods in a Kubernetes container group, and receptor - manages them with the task pod's ServiceAccount — which had no pod - permissions, so every launch failed with - `pods is forbidden ... cannot list resource "pods"` and the job hung pending. - The chart now ships a `forail` ServiceAccount plus a namespaced - `forail-job-runner` `Role`/`RoleBinding` (`pods`, `pods/log|attach|exec`) and - a `MY_POD_NAMESPACE` downward-API env so job pods land in the release - namespace. - - The receptor mesh config declared only the `local` worktype, so launches - errored at 0s with `unknown work type kubernetes-incluster-auth`. The - `kubernetes-incluster-auth` worktype (`authmethod: incluster`) is now - registered. -- **`forail-web` crash-loop after the allowed-hosts change.** The liveness and - readiness probes call `http://127.0.0.1:8013/api/v2/ping/`; with only the - ingress host allowed, Django answered `400 DisallowedHost`, the probe failed and - the pod restarted in a loop. The chart default keeps the loopback names. -- **Tenancy audit events were never persisted.** `TenantQuotaEvent` and - `TenantIsolationEvent` inherit `CreatedModifiedModel`, which lacks the - `description` column that migration `0205` declares `NOT NULL` — every insert - raised `IntegrityError`. Both models now declare the field (no new migration). -- **RBAC role assignment was broken in 2026.06.0.** `ScanFinding` and - `TenantIsolationEvent` were registered with the default - `parent_field_name='organization'`, but neither model has an `organization` - field. The resulting `FieldDoesNotExist` aborted **every** role-assignment - operation across the platform. They are now registered against their real - parents (`scan_result` and `accessed_organization` respectively). Anyone on - 2026.06.0 who relies on role assignment should upgrade. No data migration is - required — the fix is in model registration only. -- `pytest.ini` referenced the pre-rename `awx.main.tests.settings_for_test` - (no longer exists), which prevented the backend test suite from starting. -- Tenant queue router referenced pre-rename `awx.main.tasks.*` task names. - -## Upgrade - -No schema migrations. Migrations `0209` and `0210` re-create RLS policies only -and are idempotent, so the standard image re-point applies — but the chart's new -required/secure defaults have to be supplied: - -```bash -helm upgrade forail oci://ghcr.io/forail-platform/forail-helm \ - --version 2026.7.0 -n forail \ - --set secrets.forailAdminPassword='' \ - --set 'forail.allowedHosts=forail.example.com\,127.0.0.1\,localhost' \ - --set task.privileged=true --set task.hostCgroup=true # only if you run jobs in-pod -``` - -> **Escape the commas.** Helm's `--set` splits unescaped commas into a list, so -> `--set forail.allowedHosts='a,b,c'` fails to parse. Either escape them as above -> (`a\,b\,c`, inside single quotes so the shell keeps the backslashes) or put the -> value in a values file, where no escaping is needed: -> -> ```yaml -> forail: -> allowedHosts: "forail.example.com,127.0.0.1,localhost" -> ``` - -Before upgrading: - -- **Any deployment that runs jobs** — read **Known issue — upgrading breaks job - execution** at the top of these notes, and plan to apply the workaround (and - re-apply role assignments) as part of the upgrade. Without it the platform - comes up healthy but executes nothing. -- **SAML deployments** — review **Breaking changes — SAML** above and reconfigure - the IdP if needed. -- **Any deployment** — review **Breaking changes — deployment defaults**; an - upgrade that omits the admin password will not render, and one that drops the - loopback hosts will fail its health probes. -- **Multi-tenant deployments** — tenant isolation now fails closed. A request - whose tenant scope cannot be installed is rejected rather than served with - global visibility; verify your tenants resolve correctly in a staging install - first. diff --git a/docs/RELEASE_NOTES_v2026.07.1.md b/docs/RELEASE_NOTES_v2026.07.1.md deleted file mode 100644 index afbb068..0000000 --- a/docs/RELEASE_NOTES_v2026.07.1.md +++ /dev/null @@ -1,90 +0,0 @@ -# Forail 2026.07.1 — Release Notes - -**Release date:** 2026-07-26 -**Based on:** Forail 2026.07.0 -**License:** Apache License 2.0 - ---- - -## Overview - -2026.07.1 is a **patch release with one purpose**: an upgrade no longer leaves a -platform that accepts jobs and runs none of them. It fixes the known issue -published with 2026.07.0, and it removes the manual workaround that release -asked for. - -Nothing else changes. There are no migrations, no configuration changes, no -breaking changes. The frontend, the operator and the assistant are unchanged and -keep their 2026.07.0 / 2026.07.1 / 2026.06.0 versions respectively; only the -backend image and the Helm chart move. - -| Component | Version | -|---|---| -| `forail-backend` | **2026.07.1** | -| Helm chart | **2026.7.1** (pins the backend above) | -| `forail-frontend` | 2026.07.0, unchanged | -| `forail-operator` | 2026.07.1, unchanged | -| `forail-assistant` | 2026.06.0, unchanged | - -## Fixed - -### Jobs no longer stop running after an upgrade or a restart - -Upgrading 2026.06.0 → 2026.07.0 left every launch sitting in `pending` -indefinitely, with only `job_explanation` — *"This job is not ready to start -because there is not enough available capacity"* — to explain it. Project -updates kept working, so the install looked healthy right up until someone -launched a job. - -**What was wrong.** For jobs to run on the node itself, the `default` instance -group has to be a regular group that contains an execution-capable instance. -Two things conspired against that, and either one alone was enough to hang every -launch: - -- `register_queue` assigns instances only when it *creates* a group. On an - upgrade the group already exists, so it assigned nothing and left it empty. -- The task pod re-ran `provision_instance` on **every start** — restart, - eviction, rolling upgrade — and that call hardcoded `node_type='control'` and - re-registered `default` as a ContainerGroup, overwriting whatever the - installer had configured. A control node only orchestrates; it does not - execute. - -The second half is why the 2026.07.0 workaround did not stick: the next task-pod -restart quietly undid it. - -**What changed.** Registration now takes its intent from `FORAIL_NODE_TYPE` — -which the Helm chart and the Compose stack already set — and derives the default -queue from it. An execution-capable pod (`hybrid`, `execution`) gets a regular -instance group containing itself; a control-only pod keeps the ContainerGroup, -exactly as before. Both defaults are unchanged when the variable is unset, so a -multi-node install that has no opinion behaves as it did. The chart's init Job -additionally asserts group membership rather than trusting `register_queue`, so -a newer chart paired with an older image still converges. - -**Verified, not assumed.** On a freshly created cluster: install 2026.06.0, -`helm upgrade` to this release, launch a job — successful in 78 s with a normal -`PLAY RECAP`, with no manual intervention at any point. Two subsequent -`kubectl rollout restart deploy/forail-task` left the state untouched and the -next job succeeded as well. - -## Upgrade - -From **2026.07.0**, a straight image re-point. No migrations, no new required -values: - -```bash -helm upgrade forail oci://ghcr.io/forail-platform/forail-helm \ - --version 2026.7.1 -n forail \ - --set secrets.forailAdminPassword='' \ - --set 'forail.allowedHosts=forail.example.com\,127.0.0.1\,localhost' \ - --set task.privileged=true --set task.hostCgroup=true # only if you run jobs in-pod -``` - -**If you applied the 2026.07.0 workaround**, you can leave it in place — it sets -exactly the state this release converges to on its own. Nothing needs to be -undone. - -From **2026.06.0**, read the [2026.07.0 release -notes](RELEASE_NOTES_v2026.07.0.md) first: the breaking changes, the required -admin password and the SAML defaults all still apply. The known issue documented -there no longer does. diff --git a/docs/chat_plan.md b/docs/chat_plan.md deleted file mode 100644 index 4f95885..0000000 --- a/docs/chat_plan.md +++ /dev/null @@ -1,616 +0,0 @@ -# Forail AI Assistant — Ollama RAG Chat - -> **Status: DELIVERED in v2026.04.0** (shipped as `forail-assistant`; all-in-one -> image with Ollama + ChromaDB + FastAPI consolidated in v2026.05.0). This -> document is retained as the historical design record — it is not pending work. - -Plan for an integrated AI assistant within the Forail platform that uses a local Ollama LLM with RAG (Retrieval Augmented Generation) for fast answers about the platform. - ---- - -## Overview - -``` -┌──────────────────────────────────────────────────────────┐ -│ Forail Web UI │ -│ │ -│ ┌────────────────────────────────┐ ┌────────────────────┐ │ -│ │ Dashboard / Jobs / │ │ AI Assistant │ │ -│ │ Templates / Settings │ │ │ │ -│ │ │ │ User: How do I │ │ -│ │ │ │ create a scheduled │ │ -│ │ │ │ job? │ │ -│ │ │ │ │ │ -│ │ │ │ Bot: To create a │ │ -│ │ │ │ schedule, go to │ │ -│ │ │ │ Templates > ... │ │ -│ │ │ │ │ │ -│ │ │ │ [____________] Ask │ │ -│ └────────────────────────────────┘ └────────────────────┘ │ -└──────────────────────────────────────────────────────────┘ - │ │ - ▼ ▼ -┌──────────────────┐ ┌───────────────────────┐ -│ Forail API │ │ AI Backend │ -│ (Django) │ │ (Django endpoint) │ -│ │ │ │ -│ /api/v2/... │ │ /api/v2/assistant/ │ -└──────────────────┘ └───────────┬───────────┘ - │ - ┌──────────┴──────────┐ - │ │ - ┌────▼─────┐ ┌──────▼──────┐ - │ ChromaDB │ │ Ollama │ - │ (Vector) │ │ (LLM) │ - │ │ │ │ - │ AWX docs │ │ llama3.1:8b │ - │ API help │ │ mistral:7b │ - │ Playbooks│ │ codellama │ - └──────────┘ └─────────────┘ -``` - ---- - -## Key Features - -| Feature | Description | -| ------------------------ | ---------------------------------------------------- | -| **Contextual help** | Knows which page you're on, gives relevant tips | -| **Documentation search** | Searches AWX/Forail docs, API reference, Ansible docs | -| **Error explanation** | Explains errors from job output or API responses | -| **Playbook assistance** | Suggests Ansible modules, fixes YAML syntax | -| **Admin guide** | RBAC, credential setup, inventory management | -| **Streaming responses** | Token-by-token response display (SSE) | - ---- - -## Architecture - -### Tech Stack - -| Component | Technology | Reason | -| -------------- | ------------------------------------ | ------------------------------------------------ | -| **LLM** | Ollama (llama3.1:8b or mistral:7b) | Local, free, data privacy | -| **Vector DB** | ChromaDB | Lightweight, Python native, no external service | -| **Embeddings** | `nomic-embed-text` (Ollama) | Local embedding model, fast | -| **Backend** | Django endpoint (existing Forail API) | No new service, same auth | -| **Frontend** | React chat component | Integrated into existing UI | -| **Streaming** | Server-Sent Events (SSE) | Simpler than WebSocket for unidirectional stream | - -### Why Ollama + RAG? - -1. **Privacy** — All data stays on the server, nothing goes to the cloud -2. **Free** — No API keys, no monthly costs -3. **Offline** — Works without internet -4. **Accuracy** — RAG ensures answers based on actual documentation -5. **Speed** — Local model on GPU gives a response in 2-5 seconds - ---- - -## Phase 1: Ollama Setup and RAG Pipeline (Week 1) - -### 1.1 Ollama Installation - -```bash -# In Docker Compose — add Ollama service -# docker-compose.yml -services: - ollama: - image: ollama/ollama:latest - ports: - - "11434:11434" - volumes: - - ollama_data:/root/.ollama - deploy: - resources: - reservations: - devices: - - driver: nvidia - count: 1 - capabilities: [gpu] - # Fallback for CPU-only: - # Without the GPU section, use a smaller model (tinyllama, phi3:mini) - - chromadb: - image: chromadb/chroma:latest - ports: - - "8000:8000" - volumes: - - chroma_data:/chroma/chroma - -volumes: - ollama_data: - chroma_data: -``` - -### 1.2 Model Selection - -| Model | RAM | Speed | Quality | Recommendation | -| ---------------- | ---- | ------- | ------------ | --------------------------- | -| `tinyllama:1.1b` | 2 GB | Fastest | Basic | CPU-only, small server | -| `phi3:mini` | 4 GB | Fast | Good | CPU with 8GB+ RAM | -| `mistral:7b` | 6 GB | Medium | Excellent | GPU with 8GB+ VRAM | -| `llama3.1:8b` | 8 GB | Medium | Best | GPU with 10GB+ VRAM | -| `codellama:7b` | 6 GB | Medium | Code-focused | For Ansible/YAML assistance | - -Recommendation: **mistral:7b** for a balance of speed and quality. Fallback to **phi3:mini** for CPU-only. - -```bash -# Pull models -ollama pull mistral:7b -ollama pull nomic-embed-text # For RAG embeddings -``` - -### 1.3 RAG Document Pipeline - -```python -# awx/main/management/commands/index_docs.py -# Django management command for indexing documentation - -""" -Documents to index: -1. AWX API Reference (/api/v2/ — all endpoints with descriptions) -2. AWX User Guide (docs/ directory) -3. Ansible Module Index (most common modules) -4. Forail-specific documentation -5. Common error messages and solutions -6. RBAC model and permission explanations -""" - -# Pipeline: -# 1. Load documents (Markdown, RST, HTML) -# 2. Split into chunks (500 tokens, 50 overlap) -# 3. Generate embeddings with nomic-embed-text -# 4. Save to ChromaDB collection -``` - -### 1.4 Document Sources - -``` -docs_to_index/ -├── api_reference/ # Auto-generated from DRF schema -│ ├── jobs.md -│ ├── templates.md -│ ├── inventories.md -│ ├── credentials.md -│ ├── projects.md -│ ├── users.md -│ └── settings.md -├── user_guide/ # User instructions -│ ├── getting_started.md -│ ├── job_templates.md -│ ├── schedules.md -│ ├── workflows.md -│ ├── rbac.md -│ ├── notifications.md -│ └── troubleshooting.md -├── ansible/ # Ansible help -│ ├── common_modules.md -│ ├── playbook_syntax.md -│ ├── inventory_format.md -│ └── vault.md -└── errors/ # Known errors and solutions - ├── common_errors.md - └── debug_guide.md -``` - ---- - -## Phase 2: Django Backend API (Week 1-2) - -### 2.1 API Endpoint - -```python -# awx/api/views/assistant.py - -class AssistantView(APIView): - """ - POST /api/v2/assistant/ - { - "message": "How do I create a scheduled job?", - "context": { - "page": "/templates", - "selected_id": 42 - } - } - - Response (SSE stream): - data: {"token": "To"} - data: {"token": " create"} - data: {"token": " a"} - data: {"token": " scheduled"} - data: {"token": " job"} - data: {"token": ","} - data: {"token": " navigate"} - ... - data: {"done": true, "sources": ["user_guide/schedules.md"]} - """ -``` - -### 2.2 RAG Query Flow - -```python -# awx/main/services/assistant.py - -class ForailAssistant: - def __init__(self): - self.chroma = chromadb.HttpClient(host="chromadb", port=8000) - self.collection = self.chroma.get_collection("forail_docs") - self.ollama_url = "http://ollama:11434" - - def query(self, message: str, context: dict = None): - # 1. Generate embedding for the question - embedding = self._embed(message) - - # 2. Find relevant documents (top 5) - results = self.collection.query( - query_embeddings=[embedding], - n_results=5 - ) - - # 3. Compose prompt with context - docs_context = "\n\n".join(results["documents"][0]) - - system_prompt = f"""You are Forail Assistant, an AI helper for the Forail -infrastructure automation platform (based on AWX/Ansible Tower). - -Answer questions using ONLY the following documentation context. -If you don't know the answer, say so — don't make things up. - -Be concise and practical. Give step-by-step instructions when helpful. -If the user is on a specific page, tailor your answer to that context. - -Documentation context: -{docs_context}""" - - # 4. Add page context if available - if context and context.get("page"): - system_prompt += f"\n\nUser is currently on page: {context['page']}" - - # 5. Stream response from Ollama - yield from self._stream_chat(system_prompt, message) - - def _embed(self, text: str) -> list[float]: - resp = requests.post(f"{self.ollama_url}/api/embeddings", json={ - "model": "nomic-embed-text", - "prompt": text - }) - return resp.json()["embedding"] - - def _stream_chat(self, system: str, message: str): - resp = requests.post( - f"{self.ollama_url}/api/chat", - json={ - "model": "mistral:7b", - "messages": [ - {"role": "system", "content": system}, - {"role": "user", "content": message} - ], - "stream": True - }, - stream=True - ) - for line in resp.iter_lines(): - if line: - data = json.loads(line) - if not data.get("done"): - yield data["message"]["content"] -``` - -### 2.3 Django URL Config - -```python -# awx/api/urls/assistant.py -urlpatterns = [ - path('assistant/', AssistantView.as_view(), name='assistant'), - path('assistant/history/', AssistantHistoryView.as_view(), name='assistant-history'), -] -``` - -### 2.4 Chat History Model (Optional) - -```python -# awx/main/models/assistant.py - -class ChatMessage(models.Model): - user = models.ForeignKey(User, on_delete=models.CASCADE) - role = models.CharField(max_length=10) # 'user' or 'assistant' - content = models.TextField() - sources = models.JSONField(default=list) - page_context = models.CharField(max_length=255, blank=True) - created = models.DateTimeField(auto_now_add=True) - - class Meta: - ordering = ['created'] -``` - ---- - -## Phase 3: Frontend Chat Component (Week 2-3) - -### 3.1 Chat Widget - -``` -┌──────────────────────────────────────────────┐ -│ Forail Assistant ─ × │ -├──────────────────────────────────────────────┤ -│ │ -│ ┌─────────────────────────────────────────┐ │ -│ │ 🤖 Hi! I'm your Forail assistant. │ │ -│ │ Ask me anything about the platform. │ │ -│ └─────────────────────────────────────────┘ │ -│ │ -│ ┌─────────────────────────────────────────┐ │ -│ │ 👤 How do I create a job template │ │ -│ │ with survey variables? │ │ -│ └─────────────────────────────────────────┘ │ -│ │ -│ ┌─────────────────────────────────────────┐ │ -│ │ 🤖 To create a job template with │ │ -│ │ survey variables: │ │ -│ │ │ │ -│ │ 1. Go to **Templates** > **Add** │ │ -│ │ 2. Fill in name, project, playbook │ │ -│ │ 3. Enable **Survey Enabled** │ │ -│ │ 4. Click **Add Survey** to define │ │ -│ │ variables (text, password, etc) │ │ -│ │ 5. Save the template │ │ -│ │ │ │ -│ │ 📎 Source: user_guide/templates.md │ │ -│ └─────────────────────────────────────────┘ │ -│ │ -│ ┌─────────────────────────────────────────┐ │ -│ │ 🤖 ▊ (typing...) │ │ -│ └─────────────────────────────────────────┘ │ -│ │ -├──────────────────────────────────────────────┤ -│ ┌────────────────────────────────┐ ┌────┐ │ -│ │ Ask anything... │ │Send│ │ -│ └────────────────────────────────┘ └────┘ │ -└──────────────────────────────────────────────┘ -``` - -### 3.2 Frontend Files - -``` -awx/ui_next/src/ -├── components/ -│ └── assistant/ -│ ├── AssistantPanel.tsx # Main chat panel (slide-in sidebar) -│ ├── ChatMessage.tsx # Individual message (user/bot) -│ ├── ChatInput.tsx # Input field + send button -│ └── AssistantButton.tsx # Floating button to open -├── api/hooks/ -│ └── useAssistant.ts # SSE streaming hook -└── stores/ - └── assistant.ts # Zustand store (history, open/close) -``` - -### 3.3 SSE Streaming Hook - -```typescript -// useAssistant.ts -export function useAssistant() { - const [messages, setMessages] = useState([]); - const [isStreaming, setIsStreaming] = useState(false); - - async function sendMessage(text: string, pageContext?: string) { - // Add user message - setMessages((prev) => [...prev, { role: "user", content: text }]); - setIsStreaming(true); - - // Open SSE stream - const response = await fetch("/api/v2/assistant/", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ message: text, context: { page: pageContext } }), - }); - - const reader = response.body!.getReader(); - const decoder = new TextDecoder(); - let botMessage = ""; - - // Add empty bot message - setMessages((prev) => [...prev, { role: "assistant", content: "" }]); - - while (true) { - const { done, value } = await reader.read(); - if (done) break; - - const chunk = decoder.decode(value); - // Parse SSE data lines - for (const line of chunk.split("\n")) { - if (line.startsWith("data: ")) { - const data = JSON.parse(line.slice(6)); - if (data.token) { - botMessage += data.token; - // Update last message - setMessages((prev) => { - const updated = [...prev]; - updated[updated.length - 1] = { - role: "assistant", - content: botMessage, - }; - return updated; - }); - } - } - } - } - - setIsStreaming(false); - } - - return { messages, sendMessage, isStreaming }; -} -``` - ---- - -## Phase 4: Documentation Indexing (Week 3) - -### 4.1 Management Command - -```bash -# Index all documents -awx-manage index_docs - -# Re-index after an update -awx-manage index_docs --rebuild - -# Test RAG search -awx-manage query_docs "how to create inventory" -``` - -### 4.2 Auto-generating API Documentation - -```python -# awx/main/management/commands/generate_api_docs.py -# Iterates through all DRF ViewSets and generates Markdown documentation -# with endpoints, parameters, example request/response - -# Result: docs_to_index/api_reference/*.md -``` - -### 4.3 Suggested Documents to Write - -Priority 1 (most common questions): - -- How to create a Job Template -- How to create an Inventory (manually, from a source) -- How to use Credentials -- How to set up a Schedule -- How RBAC works (Organizations, Teams, Roles) -- What is an Execution Environment - -Priority 2: - -- Workflow visual editor -- Notification templates -- Smart inventories -- Survey variables -- Webhook integration -- Troubleshooting FAQ - ---- - -## Phase 5: Advanced Features (Week 3-4) - -### 5.1 Contextual Hints - -The assistant knows which page the user is on and gives relevant tips: - -``` -Page: /templates/job_template/new -→ "Need help creating a job template? I can explain each field." - -Page: /jobs/42 (failed job) -→ "I see this job failed. Want me to analyze the error output?" - -Page: /settings/authentication -→ "I can help you configure LDAP, SAML, or OAuth2 authentication." -``` - -### 5.2 Error Analysis - -The user can send an error from the job output and get an explanation: - -``` -User: Job #42 failed with "No hosts matched" -Bot: This error means the inventory doesn't contain hosts matching - your "limit" pattern. Check: - 1. Your inventory has hosts added - 2. The "Limit" field in the template matches actual host names - 3. Host patterns use correct syntax (e.g., "web*", "group1:&group2") -``` - -### 5.3 Ansible Playbook Helper - -``` -User: How do I copy a file to remote hosts? -Bot: Use the `ansible.builtin.copy` module: - - - name: Copy config file - ansible.builtin.copy: - src: files/app.conf - dest: /etc/app/app.conf - owner: root - mode: '0644' -``` - ---- - -## Hardware Requirements - -### Minimum (CPU-only, phi3:mini) - -- CPU: 4 core -- RAM: 8 GB (4 for the model + 4 for everything else) -- Disk: 5 GB for the model + 2 GB for ChromaDB -- Response time: 10-20 seconds - -### Recommended (GPU, mistral:7b) - -- CPU: 4+ core -- RAM: 16 GB -- GPU: NVIDIA with 8+ GB VRAM (RTX 3060+, T4, A10) -- Disk: 10 GB for the model + 2 GB for ChromaDB -- Response time: 2-5 seconds - -### Production (GPU, llama3.1:8b) - -- CPU: 8+ core -- RAM: 32 GB -- GPU: NVIDIA with 12+ GB VRAM (RTX 4070+, A100) -- Disk: 15 GB for the model + 5 GB for ChromaDB -- Response time: 1-3 seconds - ---- - -## Integration with Mobile Application - -The chat will also be available in the Forail Mobile app: - -``` -Android: -- Same API endpoint (/api/v2/assistant/) -- Chat screen in bottom navigation -- Voice input (Android Speech-to-Text) -- Offline fallback: download FAQ locally -``` - ---- - -## Timeline - -``` -Week 1: Ollama + ChromaDB setup, RAG pipeline, document indexing -Week 1-2: Django backend API (SSE streaming, RAG query) -Week 2-3: Frontend chat component (panel, streaming, markdown render) -Week 3: Documentation — writing/generating docs for indexing -Week 3-4: Advanced features (context hints, error analysis) -Week 4: Testing, optimization, polish -``` - -**Total: ~4 weeks** - ---- - -## MVP Priorities - -Minimum viable product: - -1. **Ollama service** in Docker Compose with mistral:7b -2. **ChromaDB** with indexed AWX documentation -3. **Django endpoint** /api/v2/assistant/ with SSE streaming -4. **Frontend chat panel** with send/receive and markdown rendering -5. **10-15 documents** indexed (API ref + user guide basics) - -Post-MVP: - -- Chat history (save conversations) -- Contextual hints per page -- Error analysis from job output -- Voice input in the mobile app -- Fine-tuning the model on Forail-specific data -- Multi-language support diff --git a/docs/ci-pipeline-reference.md b/docs/ci-pipeline-reference.md deleted file mode 100644 index 4cef4aa..0000000 --- a/docs/ci-pipeline-reference.md +++ /dev/null @@ -1,224 +0,0 @@ -# Forail CI/CD Pipeline — Reference Document - -This document describes the intended production CI/CD pipeline for Forail. -The pipeline enforces code quality gates — code cannot be merged unless -all required stages pass. - ---- - -## Pipeline Flow - -``` -push / MR git tag v* - │ │ - ▼ ▼ -┌────────┐ ┌────────┐ -│ Lint │ │ Lint │ -│ python │ ◄── parallel ──► │frontend│ -└───┬────┘ └───┬────┘ - │ must pass │ must pass - ▼ ▼ -┌────────┐ ┌────────┐ -│ Test │ │ Test │ -│ python │ ◄── parallel ──► │frontend│ -└───┬────┘ └───┬────┘ - │ must pass │ must pass - ▼ ▼ -┌────────────────────────────────────┐ -│ Build │ (only on default branch + tags) -│ CentOS image │ Ubuntu image │ -└───────────┬────────────────────────┘ - │ must pass - ▼ -┌────────────────────────────────────┐ -│ Security │ (allow_failure: true) -│ pip-audit │ Trivy │ -└───────────┬────────────────────────┘ - │ - ▼ -┌────────────────────────────────────┐ -│ Release │ (only on tags v*) -│ GitLab Registry │ Harbor │ -│ (automatic) │ (manual) │ -└────────────────────────────────────┘ -``` - ---- - -## Stage Details - -### Lint (required — blocks merge if fails) - -| Job | Image | What it checks | Command | -| --------------- | ------------------ | ------------------------------------- | ------------------------------------ | -| `lint:python` | `python:3.12-slim` | PEP8, undefined names, unused imports | `flake8 forail/ --count --statistics` | -| `lint:frontend` | `node:20-slim` | TypeScript type errors | `npx tsc --noEmit` | - -**Triggers:** Every push, every MR, every tag. - -### Test (required — blocks merge if fails) - -| Job | Image | Services | What it checks | Command | -| -------------------- | ------------------ | ---------------------- | ----------------- | ------------------------------------- | -| `test:python-unit` | `python:3.12-slim` | PostgreSQL 15, Redis 7 | 1083 unit tests | `pytest forail/main/tests/unit/ -x -q` | -| `test:frontend-unit` | `node:20-slim` | — | Vitest test suite | `npx vitest run` | - -**Triggers:** Every push, every MR, every tag. - -**Watch out:** Python tests need real PostgreSQL and Redis services. The `-x` flag -stops on the first failure for faster feedback. - -### Build (only default branch + tags) - -| Job | Base image | Output | -| -------------- | --------------- | ------------------------------------------------------ | -| `build:centos` | CentOS Stream 9 | `${IMAGE}:${VERSION}-centos`, `${IMAGE}:centos-latest` | -| `build:ubuntu` | Ubuntu 24.04 | `${IMAGE}:${VERSION}-ubuntu`, `${IMAGE}:ubuntu-latest` | - -**Does not run on feature branches** — only when merged to default branch or tagged. - -Both images are multi-stage builds: - -1. Node.js stage: builds React frontend (`npm run build`) -2. Python stage: installs dependencies, builds sdist package -3. Runtime stage: minimal image with only runtime dependencies - -### Security (informational — does NOT block merge) - -| Job | Tool | What it scans | -| -------------------- | --------- | --------------------------------- | -| `security:pip-audit` | pip-audit | Known CVEs in Python dependencies | -| `security:trivy` | Trivy | Known CVEs in Docker image layers | - -Both have `allow_failure: true` — they report vulnerabilities but don't block the pipeline. - -### Release (only on git tags `v*`) - -| Job | Destination | Trigger | -| ------------------------- | ------------------------- | ---------------------------- | -| `release:gitlab-registry` | GitLab Container Registry | Automatic on tag | -| `release:harbor` | Harbor (`ghcr.io`) | **Manual** (click to deploy) | - -The CentOS image is tagged as the primary (`:latest`, `:${VERSION}`). -Ubuntu is available as `:${VERSION}-ubuntu`. - ---- - -## Workflow Rules — When the Pipeline Runs - -```yaml -workflow: - rules: - # Always run for release tags - - if: $CI_COMMIT_TAG =~ /^v/ - - # Skip entirely if ONLY docs/images changed - - changes: - - "docs/**/*" - - "**/*.md" - - "**/*.png" - - "**/*.jpg" - - "**/*.svg" - when: never - - # Run for everything else - - when: always -``` - -**What this means:** - -- Push changes to `forail/`, `requirements/`, `tools/`, etc. → pipeline runs, must pass -- Push changes to only `docs/`, `*.md`, `*.png` → pipeline does NOT run -- Push a tag `v2026.03.0` → full pipeline including release stage -- Mix of code + docs changes → pipeline runs (code changes take priority) - ---- - -## CI Variables (GitLab Settings → CI/CD → Variables) - -### Required for build stage - -| Variable | Source | Description | -| ---------------------- | ------------------ | ----------------------------- | -| `CI_REGISTRY` | GitLab (automatic) | GitLab container registry URL | -| `CI_REGISTRY_USER` | GitLab (automatic) | Registry username | -| `CI_REGISTRY_PASSWORD` | GitLab (automatic) | Registry password | -| `CI_REGISTRY_IMAGE` | GitLab (automatic) | Full image path | - -### Required for Harbor release - -| Variable | Set manually | Description | -| ----------------- | ------------ | ---------------------------- | -| `HARBOR_USER` | Yes | Harbor registry username | -| `HARBOR_TOKEN` | Yes (masked) | Harbor registry access token | -| `HARBOR_REGISTRY` | Yes | Registry URL (`ghcr.io`) | - ---- - -## Version Resolution - -``` -git tag v2026.03.0 → VERSION=2026.03.0 (release build) -no tag → VERSION=abc1234 (dev build, commit SHA) -``` - -The version is used for: - -- Docker image tags -- `SETUPTOOLS_SCM_PRETEND_VERSION` build arg (Python package version) -- Release notes - ---- - -## Caching - -| Cache | Key | What it caches | -| ----- | --------------------------- | ------------------------------------------- | -| pip | `pip-${CI_COMMIT_REF_SLUG}` | Python packages (`.cache/pip`) | -| npm | `npm-${CI_COMMIT_REF_SLUG}` | Node modules (`forail/ui_next/node_modules`) | -| trivy | `trivy` | Vulnerability database (`.trivycache/`) | - -Caches are per-branch. The lint stage uses `pull-push` (reads and writes), -test stage uses `pull` (reads only) for npm to avoid cache conflicts. - ---- - -## How to Enforce Pipeline in GitLab - -To make the pipeline a hard requirement for merging: - -1. **Settings → Repository → Protected branches** - - Protect `devel` and `main`/`modernization` - - Set "Allowed to merge" to Maintainers - -2. **Settings → Merge requests** - - Enable "Pipelines must succeed" - - This blocks the Merge button until lint + test pass - -3. **Settings → CI/CD → General pipelines** - - Set timeout to 30 minutes (prevents hung jobs) - -With these settings, no code reaches the main branches without passing -flake8, TypeScript checks, Python unit tests, and frontend tests. - ---- - -## Running the Pipeline Locally - -If you want to verify before pushing: - -```bash -# Python lint -flake8 forail/ --count --statistics --max-line-length=160 - -# TypeScript check -cd forail/ui_next && npx tsc --noEmit - -# Python tests (inside Vagrant VM) -python -m pytest forail/main/tests/unit/ -x -q --tb=short - -# Frontend tests -cd forail/ui_next && npx vitest run -``` - -If all four pass locally, the pipeline will pass on GitLab. diff --git a/docs/future_development_plan.md b/docs/future_development_plan.md deleted file mode 100644 index a1c0c80..0000000 --- a/docs/future_development_plan.md +++ /dev/null @@ -1,633 +0,0 @@ -# Forail — Future Development Plan - -Post-release roadmap for Forail beyond v2026.03.0. -Organized by priority tiers with estimated effort and dependencies. - ---- - -## Tier 1: High Impact, Near-Term (Q2-Q3 2026) - -Features that address the most common community pain points and provide -immediate competitive advantage over AWX and alternatives. - -### 1.1 Dynamic Surveys --- COMPLETED (v2026.04.0) - -**Problem:** AWX surveys only support static, hardcoded choices. Users cannot -populate dropdown options from inventory, host facts, or external APIs. -This is the single most upvoted feature request in the AWX community. - -**Solution:** - -- Add a `dynamic_choices` field to survey question spec -- Support three sources: Jinja2 template (from inventory/facts), API endpoint - (external URL returning JSON array), and database query (hosts, groups, projects) -- Evaluate choices at launch time, not at template save time -- Cache results with configurable TTL to avoid slow launches -- Frontend: async dropdown that fetches choices when the launch dialog opens - -**Effort:** 2-3 weeks -**Files:** `awx/main/models/jobs.py`, `awx/api/views/job_templates.py`, -`awx/ui_next/src/components/LaunchDialog.tsx` - ---- - -### 1.2 Event-Driven Automation (EDA) --- COMPLETED (v2026.04.0) - -**Problem:** AWX can only run jobs on schedules or manual triggers. There is no -way to react to real-time events (monitoring alerts, Git pushes, cloud events). -AAP 2.5+ has this as an exclusive feature. - -**Solution:** - -- Add an event router service that accepts inbound webhooks and evaluates - them against user-defined rules (YAML rulebooks) -- Rule format: `source` (webhook path/filter) + `condition` (Jinja2 expression) - - `action` (launch job template, workflow, or notification) -- Integrate with common sources: GitHub/GitLab webhooks, Alertmanager, - PagerDuty, Datadog, CloudWatch, generic HTTP POST -- Store rules as a new model (`EventRule`) with RBAC -- Outbound webhooks: push job status/completion to external systems - -**Effort:** 4-6 weeks -**Dependencies:** None (builds on existing webhook receiver in AWX) - ---- - -### 1.3 Drift Detection and Change Tracking --- COMPLETED (v2026.04.0) - -**Problem:** AWX runs playbooks but does not track what changed between runs. -There is no way to detect configuration drift or prove compliance. -Ascender's "Ledger" product fills this gap commercially. - -**Solution:** - -- Capture host facts (`ansible_facts`) after each playbook run and store - as snapshots in a `HostFactSnapshot` model -- Compare snapshots between runs to detect drift (new packages, changed - configs, modified users/groups, open ports) -- Dashboard widget showing drift summary across hosts -- Alert rules: notify when drift exceeds threshold or specific facts change -- Compliance report export (PDF/CSV) showing baseline vs current state - -**Effort:** 3-4 weeks -**Dependencies:** Fact caching must be enabled on job templates - ---- - -### 1.4 AI Assistant (Ollama RAG) --- COMPLETED (v2026.04.0) - -**Problem:** Users need contextual help while using the platform. Error messages -from failed jobs are often cryptic. New users struggle with RBAC, credentials, -and inventory setup. - -**Solution:** (detailed in `docs/chat_plan.md`) - -- Ollama LLM (mistral:7b or llama3.1:8b) running as a Docker service -- ChromaDB vector store with indexed Forail/Ansible documentation -- Django API endpoint `/api/v2/assistant/` with SSE streaming -- Frontend chat panel integrated into Forail UI -- Context-aware: knows which page the user is on -- Error analysis: explain failed job output - -**Effort:** 4 weeks -**Dependencies:** GPU recommended (CPU fallback with smaller model) - ---- - -### 1.5 Improved Audit Trail --- COMPLETED (v2026.04.0) - -**Problem:** AWX activity stream records changes but lacks detail for compliance -auditing. No way to generate audit reports or track credential access. - -**Solution:** - -- Extend activity stream with: source IP, user agent, session ID -- Add credential access logging (who used which credential, when, on which host) -- Immutable audit log table (append-only, no updates or deletes) -- Audit report generator: filter by user/resource/date range, export PDF/CSV -- Retention policies: auto-archive old records to cold storage -- SIEM integration: structured JSON log export for Splunk/ELK/Datadog - -**Effort:** 2-3 weeks -**Dependencies:** None - ---- - -## Tier 2: Strategic Features (Q3-Q4 2026) - -Features that position Forail as a modern platform beyond basic AWX capabilities. - -### 2.1 Self-Service Portal --- COMPLETED (v2026.04.0) - -**Problem:** Non-technical users (helpdesk, operations, managers) cannot use -AWX without training. They need a simplified interface to run pre-approved -automation without understanding templates, inventories, or credentials. - -**Delivered:** - -- `ServiceCatalogItem` model wraps an existing JobTemplate or - WorkflowJobTemplate with portal metadata (icon, category, tags, - `requires_approval`, `approver_team`). -- `ServiceRequest` lifecycle (`pending_approval` → `approved` / - `rejected` → `running` → `successful` / `failed` / `canceled`) with - `submit/approve/reject` methods and a post_save signal that mirrors - terminal UnifiedJob status back onto the linked request. -- Approver permission model: superuser, `approver_team` membership, or - org admin fallback when no team is set. -- REST API mounted at `/api/v2/service_catalog_items/` and - `/api/v2/service_requests/` (CRUD + `launch_data`, `submit`, - `approve`, `reject`, `pending_approvals` inbox). -- Frontend: Service Portal (catalog grid), multi-step - `ServiceRequestDialog` (justification → workflow survey → per-node - surveys → confirm), My Requests, Approvals inbox, Catalog Admin CRUD. -- Reuses existing launch pipeline (`create_unified_job`) and the - `SurveyQuestionInput` extracted from `WorkflowLaunchDialog` — - no duplication. -- Tests: 22 standalone backend lifecycle tests + 10 frontend - type-shape tests. -- See `forail-backend/docs/17-self-service-portal.md` for full - architecture. - ---- - -### 2.2 Policy-as-Code --- COMPLETED (v2026.04.0) - -**Problem:** No governance framework to enforce rules like "production jobs -must have approval", "credentials must rotate every 90 days", or "only -signed playbooks can run on production inventories". - -**Delivered:** - -- `Policy` model storing Rego modules + metadata; pushed to a - `forail-opa` sidecar (OPA 0.69.0) on save via post_save signal. -- `PolicyDecision` audit row per evaluation hit; full launch context - preserved as JSON. -- `evaluator.evaluate_launch()` hooked into `JobTemplateLaunch.post`, - `WorkflowJobTemplateLaunch.post`, and `AdHocCommandList.create`, - strictly between `create_unified_job` and `signal_start`. -- Three-tier enforcement: global `OPA_ENABLED` kill switch + - per-organization `policy_enforcement` (`none/warn/enforce`) + - per-policy `enforcement` (`warn/enforce`). Org `warn` caps any - policy from blocking. All combinations covered by a unit-tested - resolver. -- Configurable fail mode: `OPA_FAIL_MODE=allow` (default, fail-open - with audit) or `deny` (fail-closed) when the OPA sidecar is - unreachable. -- REST API at `/api/v2/policies/` (CRUD + enable/disable + dry-run - test endpoint) and `/api/v2/policy_decisions/` (audit log). -- Frontend: Policies CRUD page with sync status badges, PolicyForm - with Rego editor and dry-run panel, PolicyDecisions audit log with - expandable context viewer. Compliance sidebar group extended with - Policies and Policy Decisions entries. -- `forail-opa` sidecar added to `forail-deploy/docker-compose.yml` - (image `openpolicyagent/opa:0.69.0-rootless`, healthcheck against - `/health`). -- 19 standalone backend tests + 6 frontend type-shape tests, 0 TS - errors. -- See `forail-backend/docs/19-policy-as-code.md` for the full - architecture. - ---- - -### 2.3 Modern Authentication (OIDC + WebAuthn) --- COMPLETED (v2026.04.0) - -**Problem:** AWX supports LDAP, SAML, and social auth but lacks native OIDC -and passwordless login. WebAuthn/passkeys are now the standard for -phishing-resistant authentication. - -**Delivered:** - -- OIDC client wired through the existing - `social_core.backends.open_id_connect.OpenIdConnectAuth` (no new - dependency — already vendored). Configuration via Settings → Generic - OIDC. New settings: button label, scope override, organization map, - team map. JIT user provisioning + org/team mapping reuses - `forail.sso.social_pipeline`. -- WebAuthn / FIDO2 via `py_webauthn==2.5.2`: - - `WebAuthnCredential` model + 5-minute challenge stores. - - REST API at `/api/v2/webauthn/credentials/`, - `register/{begin,complete}/`, `authenticate/{begin,complete}/`. - - Replay protection via monotonic sign-count guard. - - Origin / RP-ID derived from request — same image works on any host. -- Org-level MFA enforcement: `Organization.webauthn_required` - (`none`/`admins`/`all`) + `WebAuthnMfaEnforcementMiddleware` that - flips `session.mfa_pending` when policy applies. -- Frontend: `/me/security` credential management page, - `/auth/mfa` post-primary-auth interstitial, **Sign in with security - key** and **Sign in with OIDC** buttons on the login page, - TopBar dropdown "Security" entry. Browser side uses - `@simplewebauthn/browser` v13. -- 16 standalone backend tests (policy resolver, replay guard, TTL, - base64url helpers) + 5 frontend type-shape tests. -- See `forail-backend/docs/18-oidc-webauthn.md` for the full architecture. - ---- - -### 2.4 Workflow Survey Prompts per Node --- COMPLETED (v2026.04.0) - -**Problem:** Workflow job templates only support surveys at the workflow level. -Users cannot prompt for different variables at individual job template nodes -within a workflow. - -**Solution:** - -- Add `survey_spec` to `WorkflowJobTemplateNode` model -- At launch time, merge workflow-level and node-level survey prompts -- Frontend: multi-step launch dialog showing prompts grouped by node -- Support `ask_variables_on_launch` per node (not just per workflow) - -**Effort:** 2-3 weeks -**Dependencies:** None - ---- - -### 2.5 Automation Analytics Dashboard --- COMPLETED (v2026.04.0) - -**Problem:** AWX provides basic metrics but no insight into automation value, -trends, or efficiency. Managers cannot answer "how much time did automation -save this month?" - -**Solution:** - -- New analytics models tracking: job duration trends, success/failure rates - over time, most-used templates, busiest hosts, automation coverage -- Time savings calculator: estimated manual time vs automated time -- Dashboard with Recharts visualizations: job trends, host coverage map, - template usage heatmap, failure analysis -- Scheduled email reports: weekly/monthly automation summary -- API: `/api/v2/forail_analytics/` with date range filters - -**Effort:** 3 weeks -**Dependencies:** None (uses existing job data) - ---- - -## Tier 3: Platform Evolution (2027+) - -Long-term features for enterprise scale and ecosystem growth. - -### 3.1 Plugin Architecture - -- Microkernel design: core handles jobs, scheduling, inventory; everything - else is a plugin (credential backends, notification channels, inventory - sources, SCM providers) -- Plugin SDK with documented hooks: pre-job, post-job, credential resolution, - inventory sync, notification dispatch -- Plugin registry with install/update/remove via UI -- Sandboxed execution: plugins run in isolated containers - -**Effort:** 8-12 weeks - ---- - -### 3.2 Multi-Tenancy --- COMPLETED (v2026.04.0) - -**Problem:** Forail had Organizations and per-org RBAC, but running a single -install for multiple customers required trusting RBAC to be airtight, manually -provisioning every customer's org/admin/team, manually enforcing "fair use" -(there were no quotas — one noisy tenant could hog all Celery workers), and -manually skinning the UI per customer. - -**Delivered (v1 — soft multi-tenancy, no new compose service):** - -- `Organization` extended with 11 additive fields: `is_tenant_root`, - `tenant_max_concurrent_jobs`, `tenant_max_daily_launches`, - `tenant_max_hosts`, `tenant_max_storage_mb`, `tenant_isolation_strict`, - `tenant_logo_url`, `tenant_primary_color`, `tenant_secondary_color`, - `tenant_custom_domain` (indexed), `tenant_contact_email`. All default to - safe values — existing orgs are untouched (zero-downtime migration - `0204_multi_tenancy`). -- `TenantUsage` (OneToOne with Organization) — rolling counters for - concurrent jobs, launches-today, hosts_count, storage_mb_used, with a - `launches_today_window_start` for calendar-UTC day rollover. -- `TenantQuotaEvent` — one audit row per quota decision (allow or block), - mirrors the `PolicyDecision` shape; cached `organization_name` so the row - survives org delete. -- `TenantIsolationEvent` — v1 audit-only row for cross-tenant reads observed - when `tenant_isolation_strict=True` (blocking deferred to v2). -- `forail/main/tenancy/` package: pure helpers (`check_quota_value`, - `is_window_expired`, `reset_daily_window`, `format_quota_message`, - `normalize_branding_host`, `validate_hex_color`), `quota.py` with - `check_tenant_quota` + `on_job_finished`, `provisioning.py` with atomic - `provision_tenant` (Org + admin User + default Team + TenantUsage in one - transaction), `branding.py` with `get_branding_for_host`, `usage.py` with - `recalculate_tenant_usage` drift reconciliation, `isolation.py` - middleware. -- Launch hook inserted **before** Policy-as-Code and IaC Scanning in - `JobTemplateLaunch.post`, `WorkflowJobTemplateLaunch.post`, and - `AdHocCommandList.create`. Blocked launches return HTTP **429** with the - quota kind that tripped, inside the `forail.launch` OTel span - (adds `quota_blocked=` attribute for trace filtering). -- Job-finished signal decrements `concurrent_jobs_count`; Celery beat - `recalculate_tenant_usage_all` runs every - `TENANCY_QUOTA_RECALC_INTERVAL_S` seconds and also reconciles the - concurrent counter against actual running UnifiedJob count. -- Settings (System category): `TENANCY_ENABLED` (global kill switch, - default off), `TENANCY_DEFAULT_MAX_CONCURRENT_JOBS`, - `TENANCY_DEFAULT_MAX_DAILY_LAUNCHES`, `TENANCY_QUOTA_RECALC_INTERVAL_S` - (default 300s). -- REST API: `/api/v2/tenants/` (superuser CRUD + provision + recalculate), - `/api/v2/tenant_quota_events/` (audit log), and - `/api/v2/branding/?host=` — **PUBLIC** (no auth classes) so - the frontend can skin itself before login. Returns 404 on miss. -- Frontend: `/tenants`, `/tenants/new`, `/tenants/:id`, `/tenants/:id/edit`, - `/tenant_quota_events` pages with usage bars, branding preview, color - pickers, quota inputs (empty = unlimited), danger-zone delete. NEW - sidebar group **Tenancy** (Building2 + Activity icons) above Compliance. -- Boot-time branding: `src/branding/applyBranding.ts` called from - `src/main.tsx` **before** React mounts. Fetches - `/api/v2/branding/?host=window.location.hostname` with no credentials, - sets CSS variables `--forail-primary` / `--forail-secondary` on `:root`, - swaps the favicon and document title, caches in localStorage for 5 min. - Tailwind exposes the CSS vars as `colors.brand.primary`/`secondary`. -- No new compose service — tenancy piggybacks on the existing `forail-web` - and `forail-task` containers and is gated by `TENANCY_ENABLED`. -- Standalone tests in `tests_standalone/test_tenancy.py` cover all pure - helpers, QuotaResult aggregation, window rollover edge cases, branding - host normalization, and provisioning payload validation. -- See `forail-backend/docs/22-multi-tenancy.md` for the full architecture. - -**Deferred to v2:** - -- Postgres row-level security policies (real DB-level isolation). -- Strict-mode enforcement (cross-tenant reads blocked, not just audited). -- Per-tenant API rate limiting at the middleware layer (token bucket). -- Per-tenant Celery queues (single shared queue + quota is the v1 fairness - story). -- Custom-domain TLS provisioning (Let's Encrypt automation). -- Billing / metering hooks. -- Tenant-scoped LDAP/SAML/OIDC federation. - -**Effort:** 6-8 weeks - ---- - -### 3.3 Kubernetes Operator --- COMPLETED (v2026.05.0) - -**Delivered:** - -- 9 CRDs spanning the full Forail resource model: `Inventory`, - `Credential`, `JobTemplate`, `Schedule`, `Project`, `Organization`, - `Team`, `Workflow`, `ForailInstance` (in `forail-operator/api/v1alpha1/`). -- Reconciliation controllers for each CRD with finalizer-driven - cleanup, 60-second drift reconcile, and Secret watch for instant - Credential rotation. -- Helm chart (`forail-operator/helm/`) with full RBAC + all 9 CRD - manifests; chart bumped to 1.0.0. -- OLM bundle: `config/manifests/bases/forail-operator.clusterserviceversion.yaml` - with `alm-examples` for all 9 CRDs, `spec.icon`, `bundle.Dockerfile`, - Makefile targets (`bundle`, `bundle-build`, `bundle-validate`, - `catalog-build`). `operator-sdk bundle validate` clean. -- **Multi-cluster control plane** via `ForailInstance` CR + - `forailapi.ClientPool` (per-CR routing to different Forail backends - by name + tokenSecretRef; generation-gated cache invalidation). -- **Declarative Workflow DAG**: `spec.nodes[]` keyed by `identifier`, - three edge types (`successNodes`, `failureNodes`, `alwaysNodes`) - reconciled against `/workflow_job_template_nodes/`. -- e2e tested live against 3m+4w k3s 1.30 cluster - (see `forail-dev-cluster/` for the topology). - -**Effort spent:** 5 days (2026-05-17 → 2026-05-21). - ---- - -### 3.4 IaC Scanning and Supply Chain Security --- COMPLETED (v2026.04.0) - -**Problem:** Policy-as-Code (Tier 2.2) gates launches on metadata (who, -what, where) but never inspects the playbook body. Nothing prevents a -playbook from disabling SELinux, embedding a secret, using `shell:` -with unquoted user input, pulling an unpinned role, or importing a -Python package with a known CVE. - -**Delivered:** - -- `Scanner` model — one row per configured tool (ansible-lint, checkov, - pip-audit) with severity threshold + enforcement + `applies_to`. -- `ScanResult` audit row per scanner execution (status ok / warn / - blocked / error / timeout, duration, finding_count, highest severity, - truncated raw output, cached scanner_name so rows survive delete). -- `ScanFinding` child row per finding at or above threshold - (rule_id, severity, file_path, line, message). -- `forail/main/scanning/runner.py` — subprocess runner with per-scanner - timeout, project checkout path + playbook resolution, output parsing, - ScanResult + ScanFinding persistence, aggregate `ScanRunResult`. -- Tool adapters in `forail/main/scanning/tools/` — one module per CLI - (`ansible-lint -f json --strict`, `checkov -o json`, `pip-audit ---format json`) with severity normalization to info/low/medium/ - high/critical. -- Pure helpers: `severity_at_or_above`, `effective_enforcement`, - `aggregate_status`, `fail_mode_decision` — unit-tested standalone. -- Hook inserted **after** the Policy-as-Code hook in - `JobTemplateLaunch.post`, `WorkflowJobTemplateLaunch.post`, and - `AdHocCommandList.create`. Blocked launches return 403 with - `reasons`; warn launches append a one-liner to `job_explanation`. -- Settings: `SCANNER_ENABLED` (master switch), `SCANNER_TIMEOUT_S` - (per-scanner subprocess timeout), `SCANNER_FAIL_MODE` (allow / - deny on timeout/crash), `SCANNER_RAW_OUTPUT_MAX` — all in the - Security category. -- REST API at `/api/v2/scanners/` (CRUD + enable/disable) and - `/api/v2/scan_results/` (audit log with embedded findings). -- Frontend: Scanners CRUD page with tool badge, severity threshold, - enforcement badge, last-run status, enable toggle; ScannerForm with - tool dropdown, severity selector, JSON config editor, applies_to - checkboxes; ScanResults audit table with status filter and finding - drawer. Compliance sidebar group extended with Scanners and Scan - Results entries. -- Scanner CLIs bundled into the `forail-backend` image (installed into - `/var/lib/awx/venv/awx`), no new compose service — the existing - `forail_projects` volume is already mounted on every forail container. -- Standalone backend tests for helpers, adapter parsers, applies_to - matching, and fail-mode resolver. -- See `forail-backend/docs/20-iac-scanning.md` for the full - architecture. - -**Deferred to v2:** - -- Collection / role provenance verification (sigstore / checksums) — - needs a separate signing infrastructure conversation. -- Live CVE feed for non-Python EE packages (system OS packages). -- In-line annotations on the playbook source viewer. -- Custom rule authoring UI. - -**Effort:** 3-4 weeks - ---- - -### 3.5 Mobile Application - -Detailed plan in `docs/mobile_plan.md`: - -- Deployment approval with biometric verification -- Real-time server monitoring (containers, CPU, RAM, disk) -- Live log streaming -- Push notification alerts -- AI assistant chat - -**Effort:** 7 weeks - ---- - -### 3.6 Observability Integration - -- OpenTelemetry export for all automation runs (traces, metrics) -- Distributed tracing across multi-node receptor mesh -- Grafana dashboard templates for Forail metrics -- Closed-loop: observability alerts feed into EDA rules - -**Effort:** 3-4 weeks - ---- - -## Priority Matrix - -| # | Feature | Impact | Effort | Priority | -| --- | ----------------------- | ------ | ---------- | --------------------- | -| 1.1 | Dynamic Surveys | High | 2-3w | **DONE** | -| 1.2 | Event-Driven Automation | High | 4-6w | **DONE** | -| 1.3 | Drift Detection | High | 3-4w | **DONE** | -| 1.4 | AI Assistant (Ollama) | High | 4w | **DONE** | -| 1.5 | Audit Trail | Medium | 2-3w | **DONE** | -| 2.1 | Self-Service Portal | High | 3-4w | **DONE** | -| 2.2 | Policy-as-Code (OPA) | Medium | 4-5w | **DONE** | -| 2.3 | OIDC + WebAuthn | Medium | 3-4w | **DONE** | -| 2.4 | Workflow Node Surveys | Medium | 2-3w | **DONE** | -| 2.5 | Analytics Dashboard | Medium | 3w | **DONE** | -| 3.1 | Plugin Architecture | High | 8-12w | P2 | -| 3.2 | Multi-Tenancy | High | 6-8w | **DONE** | -| 3.3 | Kubernetes Operator | Medium | 5d (spent) | **DONE** (v2026.05.0) | -| 3.4 | IaC Scanning | Medium | 3-4w | **DONE** | -| 3.5 | Mobile App | Medium | 7w | P2 | -| 3.6 | Observability (OTel) | Medium | 3-4w | **DONE** | - ---- - -## Infrastructure & Test Environments - -- ~~**Provision Kubernetes test instance for Forail Platform**~~ — - **DONE** (2026-05-13..16). `forail-dev-cluster` switched from - 2-master + 2-worker kubeadm to **3-master + 4-worker k3s 1.30.4** - Vagrant cluster (`192.168.56.30-36`, 14 vCPU / 28 GB total) with - embedded etcd HA, bundled Traefik / local-path / klipper-lb / - metrics-server, and `--flannel-iface=eth1` fix for the long-standing - VirtualBox cross-node VXLAN issue. This unblocked Tier 3.3 - (Kubernetes Operator v1.0.0) and lets us validate 3.6 manifest - stubs end-to-end. - ---- - -## Competitive Landscape - -| Feature | Forail | AWX | AAP 2.5+ | Ascender | Semaphore | -| --------------------- | ------------------------------- | ------- | -------- | -------- | --------- | -| Docker Compose deploy | Yes | No | No | Yes | Yes | -| Dynamic surveys | Yes | No | No | No | No | -| Event-driven (EDA) | Yes | No | Yes | No | No | -| Drift detection | Yes | No | No | Yes | No | -| AI assistant | Yes | No | Yes | No | No | -| Self-service portal | **Yes** | No | Yes | No | No | -| Policy-as-Code | **Yes** | No | Planned | No | No | -| OIDC native | **Yes** | Partial | Yes | Partial | No | -| WebAuthn/passkeys | **Yes** | No | No | No | No | -| Modern UI (React 18) | Yes | Legacy | Yes | Legacy | Yes | -| Multi-tenancy | **Yes** | No | Yes | No | No | -| K8s operator | **Yes** (9 CRDs, multi-cluster) | Yes | Yes | Yes | No | -| Open source | Yes | Yes | No | Partial | Yes | - ---- - -## Research Sources - -- [AWX GitHub Issues — feature requests](https://github.com/ansible/awx/issues) -- [Ansible Forum — Is there a future for AWX?](https://forum.ansible.com/t/is-there-a-future-for-awx/44527) -- [Ansible Forum — Programmable survey feature](https://forum.ansible.com/t/programable-survey-feature-in-awx/5806) -- [Ascender Ledger — CIQ](https://github.com/ctrliq/ascender-ledger) -- [AAP 2.5 Release Notes — Red Hat](https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/release_notes/new-features) -- [What's New in AAP 2.6 — Red Hat](https://www.redhat.com/en/blog/whats-new-in-ansible-automation-platform-2.6) -- [Event-Driven Ansible — Red Hat](https://www.redhat.com/en/technologies/management/ansible/event-driven-ansible) -- [Terraform Cloud Alternatives 2026 — env0](https://www.env0.com/blog/terraform-cloud-tfc-alternatives-comprehensive-buyers-guide) -- [GitOps 2026 Complete Guide — Calmops](https://calmops.com/devops/gitops-2026-complete-guide/) -- [AI and AIOps in 2026 — Refonte Learning](https://www.refontelearning.com/blog/ai-and-aiops-in-2026-how-intelligent-automation-is-redefining-devops-engineering) -- [Policy-as-Code Tools 2026 — Spacelift](https://spacelift.io/blog/policy-as-code-tools) -- [OpenTelemetry in 2026 — The New Stack](https://thenewstack.io/can-opentelemetry-save-observability-in-2026/) -- [Multi-Tenant Architecture 2026 — QABash](https://www.qabash.com/saas-multi-tenancy-architecture-testing-2026/) -- [Authentication Trends 2026 — C# Corner](https://www.c-sharpcorner.com/article/authentication-trends-in-2026-passkeys-oauth3-and-webauthn/) -- [IaC Security 2026 — Fidelis](https://fidelissecurity.com/cybersecurity-101/cloud-security/infrastructure-as-code-iac-security-drives-cloud-confidence/) -- [Semaphore vs AWX](https://semaphoreui.com/vs/awx) - ---- - -## Wiki Documentation (Developer Onboarding) - -**Problem:** Novi developeri koji pristupe projektu nemaju pregled arhitekture, -ne znaju šta koji fajl radi, niti kako su komponente povezane. Bez kvalitetne -dokumentacije, onboarding traje predugo i razvoj se usporava. - -**Cilj:** Napraviti ultra detaljnu wiki dokumentaciju koja objašnjava svaki -fajl i modul u projektu, tako da budući kolege mogu samostalno da se snadju -i razvijaju platformu. - -**Sadržaj wiki dokumentacije:** - -1. **Architecture Overview** — dijagram sistema (backend, frontend, task engine, - Redis, PostgreSQL, Receptor), kako komponente komuniciraju -2. **Backend (Django)** — objašnjenje svakog modula: - - `forail/main/models/` — svaki model, relacije, migracije - - `forail/api/views/` — svaki API endpoint, šta radi, koji serializer koristi - - `forail/api/serializers/` — logika validacije i transformacije podataka - - `forail/main/tasks/` — Celery taskovi, job runner, callback pipeline - - `forail/main/signals/` — Django signali i side-effecti - - `forail/conf/` — settings, konfiguracija, environment varijable -3. **Frontend (React/TypeScript)** — struktura UI koda: - - Svaka stranica i komponenta - - Routing, state management, API pozivi - - Stilizacija i UI framework -4. **Task Engine** — kako se jobovi pokreću, lifecycle joba od launcha do - završetka, receptor mesh, izolacija izvršavanja -5. **Authentication & RBAC** — autentifikacija, permisije, organizacije, timovi, - kako RBAC radi od API-ja do baze -6. **Database Schema** — ER dijagram, ključne tabele, relacije -7. **Docker & Deployment** — objašnjenje svakog kontejnera, docker-compose - konfiguracija, environment varijable, volumeni -8. **CI/CD Pipeline** — `.github/workflows/ci.yml`, build proces, testovi -9. **Testing** — kako pokrenuti testove, struktura testova, šta koji test pokriva -10. **Contributing Guide** — coding standardi, git workflow, PR proces, - commit konvencije - -**Format:** GitHub Wiki (u okviru `forail-platform/forail-platform` repozitorijuma) -ili `docs/wiki/` direktorijum u samom projektu. - -**Effort:** 3-4 weeks -**Dependencies:** None — može se raditi paralelno sa razvojem feature-a - ---- - -## FreeBSD Support (Host & Jail) - -**Problem:** Forail trenutno radi isključivo na Linux-u (Ubuntu 24.04+) i u -Docker kontejnerima. FreeBSD korisnici, koji često koriste Ansible za -upravljanje serverima i mrežnom opremom, nemaju mogućnost da pokrenu Forail -nativno na svom sistemu. - -**Cilj:** Omogućiti pokretanje Forail platforme direktno na FreeBSD hostu -i unutar FreeBSD jail-a kao alternativu Docker deployment-u. - -**Potrebne izmene:** - -1. **Dependency kompatibilnost** — proveriti i prilagoditi sve Python zavisnosti - za FreeBSD (posebno: psycopg2, uwsgi/gunicorn, receptor, channels/daphne) -2. **Konfiguracija servisa** — rc.d skripte za pokretanje Forail komponenti - (web, task engine, daphne/websocket, beat scheduler) -3. **PostgreSQL & Redis** — dokumentovati instalaciju iz portova/pkg-a, - konfiguracija za Forail -4. **Jail deployment** — jail konfiguracija sa izolovanim Forail okruženjem, - networking (VNET ili alias IP), storage (ZFS dataset per jail) -5. **Port/package** — kreirati FreeBSD port (`sysutils/forail-platform`) za - jednostavnu instalaciju putem `pkg install` -6. **Receptor mesh** — proveriti da receptor radi na FreeBSD-u, prilagoditi - ako koristi Linux-specific sistemske pozive -7. **Testiranje** — pokrenuti test suite na FreeBSD 14.x, ispraviti sve - platform-specifične probleme (putanje, signali, korisnici/grupe) -8. **Dokumentacija** — instalacioni vodič za FreeBSD host i jail deployment - -**Effort:** 4-6 weeks -**Dependencies:** FreeBSD 14.x test okruženje, Python 3.12+ iz portova diff --git a/docs/img/architecture.dot b/docs/img/architecture.dot deleted file mode 100644 index 8951917..0000000 --- a/docs/img/architecture.dot +++ /dev/null @@ -1,129 +0,0 @@ -digraph ForailArchitecture { - rankdir=TB; - bgcolor="#1e1e2e"; - fontname="Helvetica Neue,Helvetica,Arial,sans-serif"; - node [fontname="Helvetica Neue,Helvetica,Arial,sans-serif", fontsize=11, style="filled", - shape="box", penwidth=1.5, margin="0.2,0.1", fontcolor="#cdd6f4"]; - edge [fontname="Helvetica Neue,Helvetica,Arial,sans-serif", fontsize=9, penwidth=1.2, - color="#6c7086", fontcolor="#a6adc8"]; - graph [fontname="Helvetica Neue,Helvetica,Arial,sans-serif", fontsize=12, fontcolor="#cdd6f4"]; - compound=true; - newrank=true; - splines=true; - nodesep=0.6; - ranksep=0.8; - pad=0.5; - - // ── Source Repositories ── - subgraph cluster_source { - label=" Source Repositories "; - labeljust="c"; - style="filled,rounded,bold"; - fillcolor="#313244"; - color="#89b4fa"; - fontcolor="#89b4fa"; - penwidth=2; - margin=20; - - backend [label="forail-backend\n(Django / Python)", - fillcolor="#1e1e2e", color="#89b4fa", fontcolor="#89b4fa", - shape="box", style="filled,rounded"]; - frontend [label="forail-frontend\n(React / TypeScript)", - fillcolor="#1e1e2e", color="#a6e3a1", fontcolor="#a6e3a1", - shape="box", style="filled,rounded"]; - } - - // ── Docker Registry ── - registry [label="Harbor Registry\n(ghcr.io)", - fillcolor="#313244", color="#f9e2af", fontcolor="#f9e2af", - shape="box", style="filled,rounded", penwidth=2]; - - // ── Deployment ── - subgraph cluster_deploy { - label=" forail-deploy (docker-compose) "; - labeljust="c"; - style="filled,rounded,bold"; - fillcolor="#313244"; - color="#cba6f7"; - fontcolor="#cba6f7"; - penwidth=2; - margin=20; - - web [label="forail-web\n(uwsgi + daphne)", - fillcolor="#1e1e2e", color="#89b4fa", fontcolor="#89b4fa", - shape="box", style="filled,rounded"]; - task [label="forail-task\n(dispatcher + receptor)", - fillcolor="#1e1e2e", color="#89b4fa", fontcolor="#89b4fa", - shape="box", style="filled,rounded"]; - fe [label="forail-frontend\n(nginx + React SPA)", - fillcolor="#1e1e2e", color="#a6e3a1", fontcolor="#a6e3a1", - shape="box", style="filled,rounded"]; - init [label="forail-init\n(migrations)", - fillcolor="#1e1e2e", color="#89b4fa", fontcolor="#89b4fa", - shape="box", style="filled,rounded"]; - } - - // ── Infrastructure ── - subgraph cluster_infra { - label=" Infrastructure "; - labeljust="c"; - style="filled,rounded,bold"; - fillcolor="#313244"; - color="#f38ba8"; - fontcolor="#f38ba8"; - penwidth=2; - margin=20; - - nginx [label="nginx\n(TLS + routing)", - fillcolor="#1e1e2e", color="#f9e2af", fontcolor="#f9e2af", - shape="box", style="filled,rounded"]; - postgres [label="PostgreSQL\n:5432", - fillcolor="#1e1e2e", color="#f38ba8", fontcolor="#f38ba8", - shape="cylinder"]; - redis [label="Redis\n:6379", - fillcolor="#1e1e2e", color="#f38ba8", fontcolor="#f38ba8", - shape="cylinder"]; - } - - // ── Users ── - users [label="Users\n(Browser / API)", - shape="ellipse", fillcolor="#313244", color="#6c7086", - fontcolor="#cdd6f4", fontsize=11]; - - // ── Connections ── - - // Build → Registry - backend -> registry [label=" docker push ", color="#89b4fa", fontcolor="#89b4fa"]; - frontend -> registry [label=" docker push ", color="#a6e3a1", fontcolor="#a6e3a1"]; - - // Registry → Deploy - registry -> web [label=" forail-platform/forail-backend ", color="#f9e2af", fontcolor="#f9e2af"]; - registry -> task [style="invis"]; - registry -> fe [label=" forail-platform/forail-frontend ", color="#a6e3a1", fontcolor="#a6e3a1"]; - registry -> init [style="invis"]; - - // Deploy → Infra - web -> postgres [color="#f38ba8"]; - web -> redis [color="#f38ba8"]; - task -> postgres [color="#f38ba8"]; - task -> redis [color="#f38ba8"]; - init -> postgres [label=" migrations ", color="#f38ba8", fontcolor="#f38ba8"]; - - // Nginx routing - nginx -> web [label=" /api /sso /ws ", color="#89b4fa", fontcolor="#89b4fa"]; - nginx -> fe [label=" /* ", color="#a6e3a1", fontcolor="#a6e3a1"]; - - // Users → Nginx - users -> nginx [label=" HTTPS :443 ", color="#f9e2af", fontcolor="#f9e2af", penwidth=2]; - - // Layout hints - {rank=same; backend; frontend} - {rank=same; web; task; fe; init} - {rank=same; nginx; postgres; redis} - - // Title - labelloc="t"; - label="\n Forail Platform — Architecture \n "; - fontsize=16; - fontcolor="#cdd6f4"; -} diff --git a/docs/img/architecture.png b/docs/img/architecture.png deleted file mode 100644 index d0cbb2cb9f7eef16ed539d129872d58ebdfbcbb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122286 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 z 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≠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 &%gq7 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

I_*@2!3`*ruGdt54cOMECOuP-J` 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 diff --git a/docs/img/handbook/alert_rules_new.png b/docs/img/handbook/alert_rules_new.png deleted file mode 100644 index 27940842508f4b6e27a4f1bd2c2dd3883e8c5f9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243056 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
    tN2!g}fXfYuI>SsCAn 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�U?ar8AM!te@;CW~0VlYC7(e-PJ2NhN-1 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