Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
# CLAUDE.md - solti-containers Collection
# CLAUDE.md - solti-podman Collection

This file provides guidance to Claude Code when working in the **solti-containers** collection.
This file provides guidance to Claude Code when working in the **solti-podman** collection.

**Context**: This is one collection within the [SOLTI Ansible Collections Suite](../CLAUDE.md). The parent project coordinates multiple collections (solti-monitoring, solti-containers, solti-ensemble) with the [mylab orchestrator](../mylab/).
**Context**: This is one collection within the [SOLTI Ansible Collections Suite](../CLAUDE.md). The parent project coordinates multiple collections (solti-monitoring, solti-podman, solti-ensemble) with the [mylab orchestrator](../mylab/).

**Scope**: This CLAUDE.md covers collection-specific patterns. For system-wide context (reference machines, orchestrator workflows, cross-collection coordination), see [../CLAUDE.md](../CLAUDE.md).

## Core Commands

> **Surfacing to unified docs:** Update `solti-docs.yml` at the collection root
> to declare which files and CLAUDE.md sections should appear on solti.jackaltx.com.
> Local `docs/` detail stays local — only declare what matters to the suite-wide audience.
> See [solti-docs/HARVEST.md](https://github.com/jackaltx/solti-docs/blob/main/HARVEST.md).


### Service Management

```bash
Expand Down
2 changes: 1 addition & 1 deletion JACKALTX.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Ansible Collection - jackaltx.solti_containers
# Ansible Collection - jackaltx.solti_podman

This was an experiment to explore how to use an AI to create new container services quickly based on "convention".
The question was, what kinds of conventions could it learn and keep repeating. In that endeavor there were many "Plan this.." and "Summarize this...". I tried a few Claude slash commands out. Oh, the sounds of learning that came from my
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SOLTI Containers - Lightweight Development Services
# SOLTI Podman - Lightweight Development Services

> **A comprehensive Ansible collection for deploying containerized development and testing services using Podman, Quadlets, and systemd integration.**

Expand All @@ -8,7 +8,7 @@

| Attribute | Value |
|-----------|-------|
| **Collection** | `jackaltx.solti_containers` |
| **Collection** | `jackaltx.solti_podman` |
| **Container Runtime** | Podman (rootless) |
| **Service Management** | Systemd user services via Quadlets |
| **Network** | `ct-net` (shared container network with DNS) |
Expand Down Expand Up @@ -371,7 +371,7 @@ loginctl enable-linger $USER
## 📁 Project Structure

```
solti-containers/
solti-podman/
├── roles/ # Service role definitions
│ ├── _base/ # Common functionality
│ │ ├── tasks/
Expand Down Expand Up @@ -790,7 +790,7 @@ This section provides structured information for AI documentation tools and code
### Collection Metadata

```yaml
collection_name: jackaltx.solti_containers
collection_name: jackaltx.solti_podman
collection_type: ansible_collection
namespace: jackaltx
version: 1.0.0
Expand Down
4 changes: 2 additions & 2 deletions backup-before-cleanup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ set -euo pipefail

# Configuration
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
BACKUP_DIR="${HOME}/backups/ansible/solti-containers"
REPO_NAME="solti-containers"
BACKUP_DIR="${HOME}/backups/ansible/solti-podman"
REPO_NAME="solti-podman"

# Colors for output
RED='\033[0;31m'
Expand Down
2 changes: 1 addition & 1 deletion bin/matrix-log.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

This script sends structured log messages to a Matrix room for
tracking deployments, task executions, tests, and other events
in the solti-containers collection.
in the solti-podman collection.

Jackal Says: This is a synapse matrix bot experiment. E2EE is important!

Expand Down
2 changes: 1 addition & 1 deletion create_symlinks.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@
mkdir -p ~/.ansible/collections/ansible_collections/jackaltx/

# Create the symlink
ln -s $(pwd) ~/.ansible/collections/ansible_collections/jackaltx/solti_containers
ln -s $(pwd) ~/.ansible/collections/ansible_collections/jackaltx/solti_podman

2 changes: 1 addition & 1 deletion docs/DNS-Service-Guide.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# DNS Service - Quick Start Guide

Automated DNS management for solti-containers services using Linode DNS.
Automated DNS management for solti-podman services using Linode DNS.

## Prerequisites

Expand Down
16 changes: 8 additions & 8 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
# solti-containers/docs - Development Documentation
# solti-podman/docs - Development Documentation

> **Patterns, Architectures, and Development Guides**
> *Comprehensive technical documentation for the solti-containers collection, covering patterns, decisions, and development workflows.*
> *Comprehensive technical documentation for the solti-podman collection, covering patterns, decisions, and development workflows.*

## Purpose

This directory contains technical documentation, architectural decisions, development patterns, and sprint reports for the solti-containers Ansible collection.
This directory contains technical documentation, architectural decisions, development patterns, and sprint reports for the solti-podman Ansible collection.

## Document Categories

### Architecture & Design Patterns

#### [Container-Role-Architecture.md](Container-Role-Architecture.md)

Complete architecture guide for the solti-containers pattern.
Complete architecture guide for the solti-podman pattern.

**For:** Developers (human)
**Topics:**
Expand Down Expand Up @@ -137,7 +137,7 @@ Guide for using Claude AI for code review.

#### [molecule-strategy.md](molecule-strategy.md)

Molecule testing strategy for solti-containers.
Molecule testing strategy for solti-podman.

**For:** Developers (testing guide)
**Topics:**
Expand Down Expand Up @@ -253,14 +253,14 @@ Should provide:

## Related Documentation

- **[solti-containers README](../README.md)** - User-facing documentation
- **[solti-containers CLAUDE.md](../CLAUDE.md)** - Collection-specific context
- **[solti-podman README](../README.md)** - User-facing documentation
- **[solti-podman CLAUDE.md](../CLAUDE.md)** - Collection-specific context
- **[Root CLAUDE.md](../../CLAUDE.md)** - Multi-collection development context
- **[solti-docs repository](https://github.com/jackaltx/solti-docs)** - Public philosophy docs

## Usage Notes

**Target Audience:** Primarily for developers working on solti-containers and those implementing similar patterns.
**Target Audience:** Primarily for developers working on solti-podman and those implementing similar patterns.

**Not User Documentation:** For user guides, see the main [README.md](../README.md) and role-specific READMEs.

Expand Down
2 changes: 1 addition & 1 deletion docs/Security-Audit-20260412.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Security Audit Report - April 12, 2026

## Overview
This document summarizes the findings and recommendations from a security audit of the **solti-containers** collection. The audit focused on secrets management, container isolation, and system-level configuration within the Ansible-driven rootless Podman architecture.
This document summarizes the findings and recommendations from a security audit of the **solti-podman** collection. The audit focused on secrets management, container isolation, and system-level configuration within the Ansible-driven rootless Podman architecture.

## 1. High-Impact Findings

Expand Down
2 changes: 1 addition & 1 deletion docs/archive/Claude-new-quadlet.md
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ MONGO_INITDB_DATABASE={{ mongodb_database }}

```yaml
# MongoDB configuration file
# Generated by Ansible for {{ ansible_managed | default('solti-containers') }}
# Generated by Ansible for {{ ansible_managed | default('solti-podman') }}

# Network settings
net:
Expand Down
14 changes: 7 additions & 7 deletions docs/archive/docker-podman-synergy-exploration.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# Docker-Podman Synergy Exploration

**Date:** 2025-12-01
**Context:** Comparing solti-containers (Podman/dev tools) with TrueNAS Docker (persistent services)
**Context:** Comparing solti-podman (Podman/dev tools) with TrueNAS Docker (persistent services)

---

## 🎯 Core Insight: Different Missions, Shared DNA

**solti-containers (Podman):** Development/testing tools - ephemeral workloads
**solti-podman (Podman):** Development/testing tools - ephemeral workloads
**TrueNAS (Docker):** Production infrastructure - persistent services

But underneath, they share nearly **identical lifecycle requirements**.
Expand All @@ -18,7 +18,7 @@ But underneath, they share nearly **identical lifecycle requirements**.

### Current State Comparison

| Phase | Podman (solti-containers) | Docker (TrueNAS) | Gap |
| Phase | Podman (solti-podman) | Docker (TrueNAS) | Gap |
|-------|--------------------------|------------------|-----|
| **Initialize** | `./manage-svc.sh redis prepare`<br>Creates dirs, SELinux contexts, network | Manual: `mkdir /mnt/zpool/Docker/Stacks/redis`<br>`chown 1000:1000 ...` | ❌ No automation |
| **Deploy** | `./manage-svc.sh redis deploy`<br>Templates Quadlets → systemd → verify | Manual: `cd redis && sudo docker compose up -d` | ❌ No templating |
Expand Down Expand Up @@ -379,7 +379,7 @@ solti-common/ # Shared library repo
└── docs/
└── Service-Pattern.md # Architecture docs

solti-containers/ # Podman-specific
solti-podman/ # Podman-specific
├── roles/
│ ├── _base/ # Includes solti-common/service_base
│ └── redis/ # Podman Quadlet templates
Expand Down Expand Up @@ -408,7 +408,7 @@ true-docker/ # Docker-specific

## 📋 Concrete Next Steps for TrueNAS

Based on solti-containers patterns, your TrueNAS project needs:
Based on solti-podman patterns, your TrueNAS project needs:

### 1. **Lifecycle Automation** (Missing entirely)

Expand Down Expand Up @@ -575,7 +575,7 @@ Every service inherits this pattern.

## 🤔 The Deeper Question: Should You?

**Arguments FOR adopting solti-containers patterns:**
**Arguments FOR adopting solti-podman patterns:**
- ✅ Consistent lifecycle across all container platforms
- ✅ Reduced duplication (11 services × 20 lines Traefik labels = 220 lines eliminated)
- ✅ Verification framework catches deployment issues
Expand All @@ -594,7 +594,7 @@ The synergy is **very strong** for the lifecycle/verification/inventory patterns

- **< 5 services:** Hand-written compose files fine, Arcane GUI sufficient
- **5-15 services:** Template generation starts paying off (you're at 11)
- **15+ services:** Automation essential, solti-containers patterns mandatory
- **15+ services:** Automation essential, solti-podman patterns mandatory

Since you're evaluating TrueNAS for "persistent containers" vs Podman for "dev tools," I'd suggest:

Expand Down
32 changes: 16 additions & 16 deletions docs/archive/matrix-logging-setup.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Matrix Development Logging System

Automated logging system for solti-containers deployments, tasks, and tests to Matrix room.
Automated logging system for solti-podman deployments, tasks, and tests to Matrix room.

## Overview

Expand Down Expand Up @@ -59,7 +59,7 @@ ansible-playbook playbooks/create-matrix-logger-room.yml

**Creates**:
- Room: "SOLTI Containers - Development Logs"
- Alias: `#solti-containers-dev:jackaltx.com`
- Alias: `#solti-podman-dev:jackaltx.com`
- Room ID: `mylab/data/matrix-logger-room.txt` (mode 0600)

**Alternative (Manual)**:
Expand All @@ -77,7 +77,7 @@ cd /home/lavender/sandbox/ansible/jackaltx/mylab
```

**Creates**:
- Config: `solti-containers/data/matrix-logger.conf` (mode 0600)
- Config: `solti-podman/data/matrix-logger.conf` (mode 0600)

---

Expand All @@ -86,7 +86,7 @@ cd /home/lavender/sandbox/ansible/jackaltx/mylab
### Manual Logging

```bash
cd /home/lavender/sandbox/ansible/jackaltx/solti-containers
cd /home/lavender/sandbox/ansible/jackaltx/solti-podman

# Simple message
./bin/matrix-log.py message "Test deployment started"
Expand Down Expand Up @@ -169,7 +169,7 @@ Attached in custom field `dev.solti.log_data`:

1. Open https://matrix.jackaltx.com
2. Login
3. Find room: `#solti-containers-dev:jackaltx.com`
3. Find room: `#solti-podman-dev:jackaltx.com`
4. View messages and JSON data

### Via API (Future)
Expand All @@ -182,7 +182,7 @@ Query structured data for dashboards, reports, or automation.

### Config File

Location: `solti-containers/data/matrix-logger.conf`
Location: `solti-podman/data/matrix-logger.conf`

```json
{
Expand Down Expand Up @@ -222,15 +222,15 @@ ls -l mylab/data/matrix-logger-token.txt
ls -l mylab/data/matrix-logger-room.txt

# Check config exists
ls -l solti-containers/data/matrix-logger.conf
ls -l solti-podman/data/matrix-logger.conf

# Check script is executable
ls -l solti-containers/bin/matrix-log.py
ls -l solti-podman/bin/matrix-log.py
```

**Test manually**:
```bash
cd /home/lavender/sandbox/ansible/jackaltx/solti-containers
cd /home/lavender/sandbox/ansible/jackaltx/solti-podman
./bin/matrix-log.py --dry-run message "Test"
# Should print message without errors

Expand All @@ -240,7 +240,7 @@ cd /home/lavender/sandbox/ansible/jackaltx/solti-containers

**Check script is found**:
```bash
cd /home/lavender/sandbox/ansible/jackaltx/solti-containers
cd /home/lavender/sandbox/ansible/jackaltx/solti-podman
[[ -x "./bin/matrix-log.py" ]] && echo "Found and executable" || echo "NOT FOUND or NOT EXECUTABLE"
```

Expand Down Expand Up @@ -272,14 +272,14 @@ Logging is designed to NEVER break deployments:
**If deployments break**:
```bash
# Disable logging temporarily
chmod -x /home/lavender/sandbox/ansible/jackaltx/solti-containers/bin/matrix-log.py
chmod -x /home/lavender/sandbox/ansible/jackaltx/solti-podman/bin/matrix-log.py

# Scripts will skip logging (checks -x flag)
```

**Re-enable**:
```bash
chmod +x /home/lavender/sandbox/ansible/jackaltx/solti-containers/bin/matrix-log.py
chmod +x /home/lavender/sandbox/ansible/jackaltx/solti-podman/bin/matrix-log.py
```

---
Expand All @@ -290,7 +290,7 @@ chmod +x /home/lavender/sandbox/ansible/jackaltx/solti-containers/bin/matrix-log

Remove execute permission:
```bash
chmod -x solti-containers/bin/matrix-log.py
chmod -x solti-podman/bin/matrix-log.py
```

Scripts check `-x` flag and skip logging automatically.
Expand All @@ -299,7 +299,7 @@ Scripts check `-x` flag and skip logging automatically.

Remove integration from scripts:
```bash
cd solti-containers
cd solti-podman
git checkout manage-svc.sh svc-exec.sh
```

Expand Down Expand Up @@ -340,13 +340,13 @@ git checkout manage-svc.sh svc-exec.sh
- `data/matrix-logger-token.txt` - Access token (auto-generated)
- `data/matrix-logger-room.txt` - Room ID (auto-generated)

**solti-containers/** (logging):
**solti-podman/** (logging):
- `bin/matrix-log.py` - Core logging script
- `data/matrix-logger.conf` - Config file (auto-generated)

### Modified Files

**solti-containers/**:
**solti-podman/**:
- `manage-svc.sh` - Added deployment logging hooks
- `svc-exec.sh` - Added task execution logging hooks

Expand Down
2 changes: 1 addition & 1 deletion docs/decisions/URL-Standardization-Plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

**Date:** 2025-11-18
**Status:** In Progress (Gitea Complete)
**Purpose:** Standardize service URL construction across all solti-containers roles for multi-host deployments
**Purpose:** Standardize service URL construction across all solti-podman roles for multi-host deployments

---

Expand Down
6 changes: 3 additions & 3 deletions docs/inventory/Inventory-Architecture-Goals.md
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ elasticsearch_password: "{{ lookup('env', 'ELASTICSEARCH_PASSWORD') }}"
**Future State**: External secrets repository

```
solti-containers/ # Public repository
solti-podman/ # Public repository
├── inventory/
│ └── group_vars/
│ └── elasticsearch_svc.yml # No secrets, references only
Expand Down Expand Up @@ -288,7 +288,7 @@ ansible-playbook -i inventory/localhost.yml \
- name: Deploy monitoring stack
workflow:
collections:
- solti-containers
- solti-podman
inventory: ~/lab-inventory
secrets: ~/lab-secrets
targets:
Expand Down Expand Up @@ -316,7 +316,7 @@ ansible-playbook -i inventory/localhost.yml \
- Send notifications
- Record audit trail

**Collection responsibilities** (solti-containers):
**Collection responsibilities** (solti-podman):

- Implement service deployment roles
- Provide verification tasks
Expand Down
Loading
Loading