refactor: update project references from Agathos to Ouranos across documentation and configuration files

This commit is contained in:
2026-03-14 01:15:02 +00:00
parent d996d179eb
commit 06118fbd40
38 changed files with 78 additions and 78 deletions

View File

@@ -13,7 +13,7 @@ Containers are named after moons of Uranus and resolved via the `.incus` DNS dom
## Quick Start ## Quick Start
The Ansible virtual environment is expected at `~/env/agathos/bin/activate`. The Ansible virtual environment is expected at `~/env/ouranos/bin/activate`.
```bash ```bash
# Provision containers # Provision containers
@@ -22,7 +22,7 @@ terraform init && terraform apply
# Configure services # Configure services
cd ../ansible cd ../ansible
source ~/env/agathos/bin/activate source ~/env/ouranos/bin/activate
ansible-playbook site.yml ansible-playbook site.yml
``` ```

View File

@@ -72,7 +72,7 @@
openssl req -x509 -nodes -days 365 -newkey rsa:2048 openssl req -x509 -nodes -days 365 -newkey rsa:2048
-keyout {{ haproxy_cert_path }} -keyout {{ haproxy_cert_path }}
-out {{ haproxy_cert_path }} -out {{ haproxy_cert_path }}
-subj "/C=US/ST=State/L=City/O=Agathos/CN=*.{{ haproxy_domain }}" -subj "/C=US/ST=State/L=City/O=Ouranos/CN=*.{{ haproxy_domain }}"
-addext "subjectAltName=DNS:*.{{ haproxy_domain }},DNS:{{ haproxy_domain }}" -addext "subjectAltName=DNS:*.{{ haproxy_domain }},DNS:{{ haproxy_domain }}"
when: not cert_file.stat.exists and 'certbot' not in services when: not cert_file.stat.exists and 'certbot' not in services

View File

@@ -1,4 +1,4 @@
# HAProxy configuration for Agathos Titania # HAProxy configuration for Ouranos Titania
# Managed by Ansible - Red Panda Approved # Managed by Ansible - Red Panda Approved
global global

View File

@@ -10,11 +10,11 @@ keeper_group: robert
keeper_home: /srv/ponos keeper_home: /srv/ponos
watcher_user: poros watcher_user: poros
watcher_uid: 520 watcher_uid: 520
deployment_environment: "agathos" deployment_environment: "ouranos"
ansible_python_interpreter: /usr/bin/python3 ansible_python_interpreter: /usr/bin/python3
# Incus configuration (matches terraform.tfvars) # Incus configuration (matches terraform.tfvars)
incus_project_name: agathos incus_project_name: ouranos
incus_storage_pool: default incus_storage_pool: default
# Gitea Runner # Gitea Runner
@@ -89,7 +89,7 @@ rabbitmq_permissions:
smtp_host: oberon.incus smtp_host: oberon.incus
smtp_port: 22025 smtp_port: 22025
smtp_from: noreply@ouranos.helu.ca smtp_from: noreply@ouranos.helu.ca
smtp_from_name: "Agathos" smtp_from_name: "Ouranos"
# Release directory paths # Release directory paths
github_dir: ~/gh github_dir: ~/gh

View File

@@ -92,7 +92,7 @@ searxng_group: searxng
searxng_directory: /srv/searxng searxng_directory: /srv/searxng
searxng_port: 22083 searxng_port: 22083
searxng_base_url: http://oberon.incus:22083/ searxng_base_url: http://oberon.incus:22083/
searxng_instance_name: "Agathos Search" searxng_instance_name: "Ouranos Search"
searxng_secret_key: "{{ vault_searxng_secret_key }}" searxng_secret_key: "{{ vault_searxng_secret_key }}"
# SearXNG OAuth2-Proxy Sidecar # SearXNG OAuth2-Proxy Sidecar

View File

@@ -423,7 +423,7 @@
openssl req -x509 -nodes -days 365 -newkey rsa:2048 openssl req -x509 -nodes -days 365 -newkey rsa:2048
-keyout {{pplg_haproxy_cert_path}} -keyout {{pplg_haproxy_cert_path}}
-out {{pplg_haproxy_cert_path}} -out {{pplg_haproxy_cert_path}}
-subj "/C=US/ST=State/L=City/O=Agathos/CN=*.{{pplg_haproxy_domain}}" -subj "/C=US/ST=State/L=City/O=Ouranos/CN=*.{{pplg_haproxy_domain}}"
-addext "subjectAltName=DNS:*.{{pplg_haproxy_domain}},DNS:{{pplg_haproxy_domain}}" -addext "subjectAltName=DNS:*.{{pplg_haproxy_domain}},DNS:{{pplg_haproxy_domain}}"
when: "'titania.incus' not in groups['ubuntu']" when: "'titania.incus' not in groups['ubuntu']"
args: args:

View File

@@ -3,7 +3,7 @@
# Incus configuration (should match terraform.tfvars) # Incus configuration (should match terraform.tfvars)
storage_pool: default storage_pool: default
project_name: agathos project_name: ouranos
bucket_role: admin bucket_role: admin
# Service-specific variables (must be provided) # Service-specific variables (must be provided)

View File

@@ -2,7 +2,7 @@
# Role metadata and dependencies # Role metadata and dependencies
galaxy_info: galaxy_info:
author: Agathos Project author: Ouranos Project
description: Manages Incus S3-compatible storage buckets with Ansible Vault credential storage description: Manages Incus S3-compatible storage buckets with Ansible Vault credential storage
license: MIT license: MIT
min_ansible_version: "2.9" min_ansible_version: "2.9"

View File

@@ -1,5 +1,5 @@
--- ---
- name: Stop Agathos Sandbox Uranian Hosts - name: Stop Ouranos Sandbox Uranian Hosts
hosts: localhost hosts: localhost
gather_facts: false gather_facts: false
vars: vars:
@@ -16,7 +16,7 @@
tasks: tasks:
- name: Stop Uranian host containers - name: Stop Uranian host containers
ansible.builtin.command: ansible.builtin.command:
cmd: incus stop {{ item }} --project agathos cmd: incus stop {{ item }} --project ouranos
loop: "{{ uranian_hosts }}" loop: "{{ uranian_hosts }}"
register: stop_result register: stop_result
failed_when: stop_result.rc != 0 and 'not running' not in stop_result.stderr failed_when: stop_result.rc != 0 and 'not running' not in stop_result.stderr

View File

@@ -1,5 +1,5 @@
--- ---
- name: Start Agathos Sandbox Uranian Hosts - name: Start Ouranos Sandbox Uranian Hosts
hosts: localhost hosts: localhost
gather_facts: false gather_facts: false
vars: vars:
@@ -16,7 +16,7 @@
tasks: tasks:
- name: Start Uranian host containers - name: Start Uranian host containers
ansible.builtin.command: ansible.builtin.command:
cmd: incus start {{ item }} --project agathos cmd: incus start {{ item }} --project ouranos
loop: "{{ uranian_hosts }}" loop: "{{ uranian_hosts }}"
register: start_result register: start_result
failed_when: start_result.rc != 0 and 'already running' not in start_result.stderr failed_when: start_result.rc != 0 and 'already running' not in start_result.stderr

View File

@@ -1,6 +1,6 @@
# Service Documentation Template # Service Documentation Template
This is a template for documenting services deployed in the Agathos sandbox. Copy this file and replace placeholders with service-specific information. This is a template for documenting services deployed in the Ouranos sandbox. Copy this file and replace placeholders with service-specific information.
--- ---

View File

@@ -1,6 +1,6 @@
# Ansible Project Structure - Best Practices # Ansible Project Structure - Best Practices
This document describes the clean, maintainable Ansible structure implemented in the Agathos project. Use this as a reference template for other Ansible projects. This document describes the clean, maintainable Ansible structure implemented in the Ouranos project. Use this as a reference template for other Ansible projects.
## Overview ## Overview
@@ -661,17 +661,17 @@ casdoor_s3_region: "us-phoenix-1"
**OCI Vault Organization**: **OCI Vault Organization**:
``` ```
OCI Compartment: production OCI Compartment: production
├── Vault: agathos-databases ├── Vault: ouranos-databases
│ ├── Secret: postgres-admin-password │ ├── Secret: postgres-admin-password
│ └── Secret: casdoor-db-password │ └── Secret: casdoor-db-password
├── Vault: agathos-services ├── Vault: ouranos-services
│ ├── Secret: casdoor-s3-access-key │ ├── Secret: casdoor-s3-access-key
│ ├── Secret: casdoor-s3-secret-key │ ├── Secret: casdoor-s3-secret-key
│ ├── Secret: casdoor-s3-bucket │ ├── Secret: casdoor-s3-bucket
│ └── Secret: openwebui-db-password │ └── Secret: openwebui-db-password
└── Vault: agathos-integrations └── Vault: ouranos-integrations
├── Secret: apikey-openai ├── Secret: apikey-openai
└── Secret: apikey-anthropic └── Secret: apikey-anthropic
``` ```
@@ -713,7 +713,7 @@ ansible-playbook remove_s3.yml -e bucket_name=casdoor -e service_name=casdoor
- Incus CLI must be configured and accessible - Incus CLI must be configured and accessible
**What Gets Created**: **What Gets Created**:
1. Incus storage bucket in project `agathos`, pool `default` 1. Incus storage bucket in project `ouranos`, pool `default`
2. Admin access key for the bucket 2. Admin access key for the bucket
3. Encrypted vault entries: `vault_<service>_s3_access_key`, `vault_<service>_s3_secret_key`, `vault_<service>_s3_bucket` 3. Encrypted vault entries: `vault_<service>_s3_access_key`, `vault_<service>_s3_secret_key`, `vault_<service>_s3_bucket`
@@ -764,5 +764,5 @@ src: "{{playbook_dir}}/{{inventory_hostname_short}}/config.j2"
--- ---
**Last Updated**: December 2025 **Last Updated**: December 2025
**Project**: Agathos Infrastructure **Project**: Ouranos Infrastructure
**Approval**: Red Panda Approved™ **Approval**: Red Panda Approved™

View File

@@ -98,7 +98,7 @@ No Terraform changes required—AnythingLLM uses port 22084 within Rosalind's ex
```bash ```bash
cd ansible cd ansible
source ~/env/agathos/bin/activate source ~/env/ouranos/bin/activate
# Deploy PostgreSQL database first (if not already done) # Deploy PostgreSQL database first (if not already done)
ansible-playbook postgresql/deploy.yml ansible-playbook postgresql/deploy.yml

View File

@@ -1,6 +1,6 @@
# Casdoor SSO Identity Provider # Casdoor SSO Identity Provider
Casdoor provides Single Sign-On (SSO) authentication for Agathos services. This document covers the design decisions, architecture, and deployment procedures. Casdoor provides Single Sign-On (SSO) authentication for Ouranos services. This document covers the design decisions, architecture, and deployment procedures.
## Design Philosophy ## Design Philosophy

View File

@@ -16,7 +16,7 @@ This playbook deploys certbot with the Namecheap DNS plugin for DNS-01 validatio
### Titania (ouranos.helu.ca) ### Titania (ouranos.helu.ca)
Production deployment providing Let's Encrypt certificates for the Agathos sandbox HAProxy reverse proxy. Production deployment providing Let's Encrypt certificates for the Ouranos sandbox HAProxy reverse proxy.
| Setting | Value | | Setting | Value |
|---------|-------| |---------|-------|

View File

@@ -1,6 +1,6 @@
# Daedalus — Deployment Requirements # Daedalus — Deployment Requirements
All infrastructure runs within the Agathos Incus sandbox. Hosts are resolved via DNS using the `.incus` suffix. All infrastructure runs within the Ouranos Incus sandbox. Hosts are resolved via DNS using the `.incus` suffix.
--- ---
@@ -24,7 +24,7 @@ backend daedalus
**Requirements:** **Requirements:**
- ACL entry in the HAProxy `frontend https` block - ACL entry in the HAProxy `frontend https` block
- Backend definition with health check on `/api/health` - Backend definition with health check on `/api/health`
- Casdoor application configured for `daedalus.ouranos.helu.ca` (same pattern as other Agathos services) - Casdoor application configured for `daedalus.ouranos.helu.ca` (same pattern as other Ouranos services)
- TLS certificate covering `daedalus.ouranos.helu.ca` (wildcard or SAN) - TLS certificate covering `daedalus.ouranos.helu.ca` (wildcard or SAN)
--- ---

View File

@@ -57,7 +57,7 @@
<div class="container-fluid"> <div class="container-fluid">
<nav class="navbar navbar-dark bg-dark rounded mb-4"> <nav class="navbar navbar-dark bg-dark rounded mb-4">
<div class="container-fluid"> <div class="container-fluid">
<a class="navbar-brand" href="agathos.html"> <a class="navbar-brand" href="ouranos.html">
<i class="bi bi-arrow-left"></i> Back to Main Documentation <i class="bi bi-arrow-left"></i> Back to Main Documentation
</a> </a>
<div class="navbar-nav d-flex flex-row"> <div class="navbar-nav d-flex flex-row">
@@ -72,7 +72,7 @@
<nav aria-label="breadcrumb"> <nav aria-label="breadcrumb">
<ol class="breadcrumb"> <ol class="breadcrumb">
<li class="breadcrumb-item"><a href="agathos.html"><i class="bi bi-house-door"></i> Main Documentation</a></li> <li class="breadcrumb-item"><a href="ouranos.html"><i class="bi bi-house-door"></i> Main Documentation</a></li>
<li class="breadcrumb-item active" aria-current="page">Style Guide</li> <li class="breadcrumb-item active" aria-current="page">Style Guide</li>
</ol> </ol>
</nav> </nav>

View File

@@ -1,6 +1,6 @@
# Gitea MCP Server - Red Panda Approved™ # Gitea MCP Server - Red Panda Approved™
Model Context Protocol (MCP) server providing programmatic access to Gitea repositories, issues, and pull requests. Deployed as a Docker container on Miranda (MCP Docker Host) in the Agathos sandbox. Model Context Protocol (MCP) server providing programmatic access to Gitea repositories, issues, and pull requests. Deployed as a Docker container on Miranda (MCP Docker Host) in the Ouranos sandbox.
--- ---
@@ -612,7 +612,7 @@ The Gitea MCP Server exposes these resources and tools via the MCP protocol:
The assistant can interact with Gitea repositories through natural language: The assistant can interact with Gitea repositories through natural language:
- "List all repositories in the organization" - "List all repositories in the organization"
- "Show me open issues in the agathos repository" - "Show me open issues in the ouranos repository"
- "Create an issue about improving documentation" - "Create an issue about improving documentation"
- "Search for 'ansible' in repository code" - "Search for 'ansible' in repository code"
@@ -714,10 +714,10 @@ rate({job="syslog", container_name="gitea-mcp"} |= "error" [5m])
## Related Documentation ## Related Documentation
### Agathos Infrastructure ### Ouranos Infrastructure
- [Agathos Overview](agathos.md) - Complete infrastructure documentation - [Ouranos Overview](ouranos.md) - Complete infrastructure documentation
- [Ansible Best Practices](ansible.md) - Deployment patterns and structure - [Ansible Best Practices](ansible.md) - Deployment patterns and structure
- [Miranda Host](agathos.md#miranda---mcp-docker-host) - MCP Docker host details - [Miranda Host](ouranos.md#miranda---mcp-docker-host) - MCP Docker host details
### Related Services ### Related Services
- [Gitea Service](gitea.md) - Gitea server deployment and configuration - [Gitea Service](gitea.md) - Gitea server deployment and configuration
@@ -753,7 +753,7 @@ docker inspect gitea-mcp | jq '.[0].Config.Image'
--- ---
**Last Updated**: February 2026 **Last Updated**: February 2026
**Project**: Agathos Infrastructure **Project**: Ouranos Infrastructure
**Host**: Miranda (MCP Docker Host) **Host**: Miranda (MCP Docker Host)
**Status**: Red Panda Approved™ ✓ **Status**: Red Panda Approved™ ✓

View File

@@ -14,7 +14,7 @@ The name "act" comes from [nektos/act](https://github.com/nektos/act), an open-s
4. Logs and status are streamed back to Gitea in real time 4. Logs and status are streamed back to Gitea in real time
5. The container is destroyed after the job completes 5. The container is destroyed after the job completes
### Architecture in Agathos ### Architecture in Ouranos
``` ```
Gitea (Rosalind) Act Runner (Puck) Gitea (Rosalind) Act Runner (Puck)

View File

@@ -58,7 +58,7 @@ The GitHub MCP server requires a **read-only Personal Access Token (PAT)** with
1. Navigate to GitHub Settings → Developer settings → Personal access tokens → Tokens (classic) 1. Navigate to GitHub Settings → Developer settings → Personal access tokens → Tokens (classic)
2. Click "Generate new token (classic)" 2. Click "Generate new token (classic)"
3. Set name: `Agathos GitHub MCP - Read Only` 3. Set name: `Ouranos GitHub MCP - Read Only`
4. Set expiration: Custom or 90 days (recommended) 4. Set expiration: Custom or 90 days (recommended)
5. Select scopes: `public_repo`, `read:org`, `read:user` 5. Select scopes: `public_repo`, `read:org`, `read:user`
6. Click "Generate token" 6. Click "Generate token"
@@ -158,7 +158,7 @@ client = openai.OpenAI(
### Deploy GitHub MCP Server ### Deploy GitHub MCP Server
```bash ```bash
cd /home/robert/dv/agathos/ansible cd /home/robert/dv/ouranos/ansible
ansible-playbook github_mcp/deploy.yml ansible-playbook github_mcp/deploy.yml
``` ```
@@ -319,7 +319,7 @@ Useful Loki queries in Grafana:
## Security Considerations ## Security Considerations
**Read-Only PAT** - Server uses minimal scopes, cannot modify repositories **Read-Only PAT** - Server uses minimal scopes, cannot modify repositories
**Network Isolation** - Only accessible within Agathos network (miranda.incus) **Network Isolation** - Only accessible within Ouranos network (miranda.incus)
**Vault Storage** - PAT stored encrypted in Ansible Vault **Vault Storage** - PAT stored encrypted in Ansible Vault
**No Public Exposure** - MCP endpoint not exposed to internet **No Public Exposure** - MCP endpoint not exposed to internet
⚠️ **PAT Rotation** - Consider rotating PAT every 90 days ⚠️ **PAT Rotation** - Consider rotating PAT every 90 days
@@ -340,5 +340,5 @@ Useful Loki queries in Grafana:
- [GitHub MCP Server Repository](https://github.com/github/github-mcp-server) - [GitHub MCP Server Repository](https://github.com/github/github-mcp-server)
- [Model Context Protocol Specification](https://modelcontextprotocol.io/) - [Model Context Protocol Specification](https://modelcontextprotocol.io/)
- [MCPO Documentation](https://github.com/open-webui/mcpo) - [MCPO Documentation](https://github.com/open-webui/mcpo)
- [Agathos README](../../README.md) - [Ouranos README](../../README.md)
- [Agathos Sandbox Documentation](../sandbox.html) - [Ouranos Sandbox Documentation](../sandbox.html)

View File

@@ -419,4 +419,4 @@ If this fails, check:
- [Grafana MCP Server](https://github.com/grafana/mcp-grafana) — Upstream project - [Grafana MCP Server](https://github.com/grafana/mcp-grafana) — Upstream project
- [Model Context Protocol Specification](https://modelcontextprotocol.io/) - [Model Context Protocol Specification](https://modelcontextprotocol.io/)
- [Ansible Practices](ansible.md) - [Ansible Practices](ansible.md)
- [Agathos Overview](agathos.md) - [Ouranos Overview](ouranos.md)

View File

@@ -2,7 +2,7 @@
## Overview ## Overview
[Home Assistant](https://github.com/home-assistant/core) is an open-source home automation platform. In the Agathos sandbox it runs as a native Python application inside a virtual environment, backed by PostgreSQL for state recording and fronted by HAProxy for TLS termination. [Home Assistant](https://github.com/home-assistant/core) is an open-source home automation platform. In the Ouranos sandbox it runs as a native Python application inside a virtual environment, backed by PostgreSQL for state recording and fronted by HAProxy for TLS termination.
**Host:** Oberon **Host:** Oberon
**Role:** container_orchestration **Role:** container_orchestration

View File

@@ -84,7 +84,7 @@ Valid values for `pull`:
They are independent mechanisms. The Ansible `pull` parameter runs a pull step before compose up, regardless of what the compose file says. Belt and suspenders. They are independent mechanisms. The Ansible `pull` parameter runs a pull step before compose up, regardless of what the compose file says. Belt and suspenders.
# Agathos Fix # Ouranos Fix
Applied to `ansible/gitea_mcp/` as the first instance. The same pattern should be applied to any service using mutable tags (`:latest`, `:stable`, etc.). Applied to `ansible/gitea_mcp/` as the first instance. The same pattern should be applied to any service using mutable tags (`:latest`, `:stable`, etc.).

View File

@@ -56,8 +56,8 @@ If you need to fix this manually (e.g., before running Terraform/Ansible):
```bash ```bash
# On the HOST (pan.helu.ca), not in the container # On the HOST (pan.helu.ca), not in the container
incus config set <container-name> raw.lxc "lxc.apparmor.profile=unconfined" --project agathos incus config set <container-name> raw.lxc "lxc.apparmor.profile=unconfined" --project ouranos
incus restart <container-name> --project agathos incus restart <container-name> --project ouranos
``` ```
## Step 2: Disable AppArmor for Docker inside the container ## Step 2: Disable AppArmor for Docker inside the container

View File

@@ -2,7 +2,7 @@
## Overview ## Overview
MCPO is an OpenAI-compatible proxy that aggregates multiple Model Context Protocol (MCP) servers behind a single HTTP endpoint. It acts as the central MCP gateway for the Agathos sandbox, exposing tools from 13 MCP servers through a unified REST API with interactive Swagger documentation. MCPO is an OpenAI-compatible proxy that aggregates multiple Model Context Protocol (MCP) servers behind a single HTTP endpoint. It acts as the central MCP gateway for the Ouranos sandbox, exposing tools from 13 MCP servers through a unified REST API with interactive Swagger documentation.
**Host:** miranda.incus **Host:** miranda.incus
**Role:** MCP Docker Host **Role:** MCP Docker Host
@@ -300,4 +300,4 @@ ssh miranda.incus "ss -tlnp | grep 25530"
- **MCPO Repository**: https://github.com/nicobailey/mcpo - **MCPO Repository**: https://github.com/nicobailey/mcpo
- **MCP Specification**: https://modelcontextprotocol.io/ - **MCP Specification**: https://modelcontextprotocol.io/
- [Ansible Practices](ansible.md) - [Ansible Practices](ansible.md)
- [Agathos Overview](agathos.md) - [Ouranos Overview](ouranos.md)

View File

@@ -280,4 +280,4 @@ See [Neo4j MCP documentation](#neo4j-mcp-servers) for deployment details.
- [APOC Library Documentation](https://neo4j.com/labs/apoc/) - [APOC Library Documentation](https://neo4j.com/labs/apoc/)
- [Terraform Practices](../terraform.md) - [Terraform Practices](../terraform.md)
- [Ansible Practices](../ansible.md) - [Ansible Practices](../ansible.md)
- [Sandbox Overview](../agathos.html) - [Sandbox Overview](../ouranos.html)

View File

@@ -229,7 +229,7 @@ Nextcloud requires a PostgreSQL database on Portia. This is automatically create
resource "incus_storage_volume" "nextcloud_data" { resource "incus_storage_volume" "nextcloud_data" {
name = "nextcloud-data" name = "nextcloud-data"
pool = "default" pool = "default"
project = "agathos" project = "ouranos"
config = { size = "100GB" } config = { size = "100GB" }
} }
``` ```

View File

@@ -8,7 +8,7 @@ It acts as a reverse proxy that requires users to authenticate via Casdoor befor
accessing the upstream service. accessing the upstream service.
This document describes the generic approach for adding OAuth2-Proxy authentication This document describes the generic approach for adding OAuth2-Proxy authentication
to any service in the Agathos infrastructure. to any service in the Ouranos infrastructure.
## Architecture ## Architecture

View File

@@ -459,7 +459,7 @@ terraform apply
# Start all containers # Start all containers
cd ../ansible cd ../ansible
source ~/env/agathos/bin/activate source ~/env/ouranos/bin/activate
ansible-playbook sandbox_up.yml ansible-playbook sandbox_up.yml
# Deploy all services # Deploy all services

View File

@@ -185,7 +185,7 @@ terraform apply
# Start all containers # Start all containers
cd ../ansible cd ../ansible
source ~/env/agathos/bin/activate source ~/env/ouranos/bin/activate
ansible-playbook sandbox_up.yml ansible-playbook sandbox_up.yml
# Deploy all services # Deploy all services

View File

@@ -2,7 +2,7 @@
## Overview ## Overview
PostgreSQL 17 serves as the primary relational database engine for the Agathos sandbox. There are **two separate deployment playbooks**, each targeting a different host with a distinct purpose: PostgreSQL 17 serves as the primary relational database engine for the Ouranos sandbox. There are **two separate deployment playbooks**, each targeting a different host with a distinct purpose:
| Playbook | Host | Purpose | | Playbook | Host | Purpose |
|----------|------|---------| |----------|------|---------|

View File

@@ -2,7 +2,7 @@
## Overview ## Overview
RabbitMQ 3 (management-alpine) serves as the central message broker for the Agathos sandbox, providing AMQP-compliant message queuing for asynchronous communication between services. The deployment includes the management web interface for monitoring and administration. RabbitMQ 3 (management-alpine) serves as the central message broker for the Ouranos sandbox, providing AMQP-compliant message queuing for asynchronous communication between services. The deployment includes the management web interface for monitoring and administration.
**Host:** Oberon (container_orchestration) **Host:** Oberon (container_orchestration)
**Role:** Message broker for event-driven architectures **Role:** Message broker for event-driven architectures
@@ -542,5 +542,5 @@ Each service operates in its own virtual host:
--- ---
**Last Updated**: February 12, 2026 **Last Updated**: February 12, 2026
**Project**: Agathos Infrastructure **Project**: Ouranos Infrastructure
**Approval**: Red Panda Approved™ **Approval**: Red Panda Approved™

View File

@@ -2,7 +2,7 @@
## Overview ## Overview
smtp4dev is a fake SMTP server for development and testing. It accepts all incoming email without delivering it, capturing messages for inspection via a web UI and IMAP client. All services in the Agathos sandbox that send email (Casdoor, Gitea, etc.) are wired to smtp4dev so email flows can be tested without a real mail server. smtp4dev is a fake SMTP server for development and testing. It accepts all incoming email without delivering it, capturing messages for inspection via a web UI and IMAP client. All services in the Ouranos sandbox that send email (Casdoor, Gitea, etc.) are wired to smtp4dev so email flows can be tested without a real mail server.
**Host:** Oberon (container_orchestration) **Host:** Oberon (container_orchestration)
**Web UI Port:** 22085 → `https://smtp4dev.ouranos.helu.ca` **Web UI Port:** 22085 → `https://smtp4dev.ouranos.helu.ca`
@@ -48,7 +48,7 @@ smtp4dev connection details are defined once in `ansible/inventory/group_vars/al
| `smtp_host` | `oberon.incus` | SMTP server hostname | | `smtp_host` | `oberon.incus` | SMTP server hostname |
| `smtp_port` | `22025` | SMTP server port | | `smtp_port` | `22025` | SMTP server port |
| `smtp_from` | `noreply@ouranos.helu.ca` | Default sender address | | `smtp_from` | `noreply@ouranos.helu.ca` | Default sender address |
| `smtp_from_name` | `Agathos` | Default sender display name | | `smtp_from_name` | `Ouranos` | Default sender display name |
Any service that needs to send email references these shared variables rather than defining its own SMTP config. This means switching to a real SMTP server only requires changing `group_vars/all/vars.yml`. Any service that needs to send email references these shared variables rather than defining its own SMTP config. This means switching to a real SMTP server only requires changing `group_vars/all/vars.yml`.
@@ -115,7 +115,7 @@ The Casdoor email provider is declared in `ansible/casdoor/init_data.json.j2` an
"port": 22025, "port": 22025,
"disableSsl": true, "disableSsl": true,
"fromAddress": "noreply@ouranos.helu.ca", "fromAddress": "noreply@ouranos.helu.ca",
"fromName": "Agathos" "fromName": "Ouranos"
} }
``` ```

View File

@@ -28,9 +28,9 @@ Never rely solely on implicit resource ordering for critical infrastructure. Cod
## Repository Strategy ## Repository Strategy
### Agathos (Sandbox) ### Ouranos (Sandbox)
Agathos is the **Sandbox repository** — isolated, safe for external demos, and uses local state. Ouranos is the **Sandbox repository** — isolated, safe for external demos, and uses local state.
| Aspect | Decision | | Aspect | Decision |
|--------|----------| |--------|----------|
@@ -78,7 +78,7 @@ A pattern is a good module candidate when it meets these criteria:
### The `incus_host` Module ### The `incus_host` Module
The standard container provisioning pattern extracted from Agathos: The standard container provisioning pattern extracted from Ouranos:
**Inputs:** **Inputs:**
- `hosts` — Map of host definitions (name, role, image, devices, config) - `hosts` — Map of host definitions (name, role, image, devices, config)
@@ -123,7 +123,7 @@ Key differences in tfvars:
## State Management ## State Management
### Sandbox (Agathos) ### Sandbox (Ouranos)
Local state is acceptable because: Local state is acceptable because:
- Environment is ephemeral - Environment is ephemeral
@@ -154,10 +154,10 @@ terraform {
### Terraform → DHCP/DNS ### Terraform → DHCP/DNS
The `agathos_inventory` output provides host information for DHCP/DNS provisioning: The `ouranos_inventory` output provides host information for DHCP/DNS provisioning:
1. Terraform creates containers with cloud-init 1. Terraform creates containers with cloud-init
2. `agathos_inventory` output includes hostnames and IPs 2. `ouranos_inventory` output includes hostnames and IPs
3. MAC addresses registered in DHCP server 3. MAC addresses registered in DHCP server
4. DHCP server creates DNS entries (`hostname.incus` domain) 4. DHCP server creates DNS entries (`hostname.incus` domain)
5. Ansible uses DNS names for host connectivity 5. Ansible uses DNS names for host connectivity
@@ -185,7 +185,7 @@ ubuntu:
The `ssh_key_update.sh` script demonstrates proper integration: The `ssh_key_update.sh` script demonstrates proper integration:
```bash ```bash
terraform output -json agathos_inventory | jq -r \ terraform output -json ouranos_inventory | jq -r \
'.uranian_hosts.hosts | to_entries[] | "\(.key) \(.value.ipv4)"' | \ '.uranian_hosts.hosts | to_entries[] | "\(.key) \(.value.ipv4)"' | \
while read hostname ip; do while read hostname ip; do
ssh-keyscan -H "$ip" >> ~/.ssh/known_hosts ssh-keyscan -H "$ip" >> ~/.ssh/known_hosts
@@ -198,7 +198,7 @@ terraform output -json agathos_inventory | jq -r \
All infrastructure changes flow through this pipeline: All infrastructure changes flow through this pipeline:
``` ```
Agathos (Sandbox) Ouranos (Sandbox)
↓ Validate pattern works ↓ Validate pattern works
↓ Extract to module if reusable ↓ Extract to module if reusable
Dev Dev
@@ -213,7 +213,7 @@ Prod
↓ Deploy from tested artifacts ↓ Deploy from tested artifacts
``` ```
**Critical:** Nothing starts in Prod. Every change originates in Agathos, is validated through the pipeline, and only then deployed to production. **Critical:** Nothing starts in Prod. Every change originates in Ouranos, is validated through the pipeline, and only then deployed to production.
### Promotion Includes ### Promotion Includes
@@ -224,12 +224,12 @@ When promoting Terraform changes, always update corresponding:
## Output Conventions ## Output Conventions
### `agathos_inventory` ### `ouranos_inventory`
The primary output for documentation and DNS integration: The primary output for documentation and DNS integration:
```hcl ```hcl
output "agathos_inventory" { output "ouranos_inventory" {
description = "Host inventory for documentation and DHCP/DNS provisioning" description = "Host inventory for documentation and DHCP/DNS provisioning"
value = { value = {
uranian_hosts = { uranian_hosts = {

View File

@@ -1,6 +1,6 @@
resource "incus_project" "agathos" { resource "incus_project" "ouranos" {
name = var.project_name name = var.project_name
description = "Agathos Project" description = "Ouranos Project"
remote = "local" remote = "local"
config = { config = {
"features.storage.volumes" = true "features.storage.volumes" = true

View File

@@ -12,14 +12,14 @@ output "uranian_hosts" {
} }
output "project_info" { output "project_info" {
description = "Agathos project information" description = "Ouranos project information"
value = { value = {
name = incus_project.agathos.name name = incus_project.ouranos.name
description = incus_project.agathos.description description = incus_project.ouranos.description
} }
} }
output "agathos_inventory" { output "ouranos_inventory" {
description = "Host inventory for documentation (sandbox.html) and DHCP/DNS provisioning reference" description = "Host inventory for documentation (sandbox.html) and DHCP/DNS provisioning reference"
value = { value = {
uranian_hosts = { uranian_hosts = {

View File

@@ -1,4 +1,4 @@
# Storage Resources for Agathos Containers # Storage Resources for Ouranos Containers
# Provisions Incus storage volumes and S3 buckets with access keys # Provisions Incus storage volumes and S3 buckets with access keys
# Storage volume for Nextcloud data # Storage volume for Nextcloud data

View File

@@ -1,7 +1,7 @@
variable "project_name" { variable "project_name" {
description = "Name of the Incus project for sandbox environment" description = "Name of the Incus project for sandbox environment"
type = string type = string
default = "agathos" default = "ouranos"
} }
variable "profile_name" { variable "profile_name" {