Files
computer-playbook/roles/sys-svc-container/files/README.md
kevinveenbirkenbachandClaude Opus 4.7 79409ebf10 test(tooling): integrate markdownlint-cli2, ansible-lint, galaxy-importer + fix the resulting baseline
Tooling integration
* add .markdownlint-cli2.jsonc, .ansible-lint, .ansible-lint-ignore
  configs (permissive day-1: cosmetic rules disabled, semantic ones on)
* extend scripts/install/lint.sh with generic install_pip_pkg helper +
  ensure_ansible_lint / ensure_galaxy_importer / ensure_markdownlint_cli2
  ensure_* functions (pip / npm with sudo / --user / --break-system-packages
  fallbacks). install_ansible_tools now also pulls ansible-lint and
  galaxy-importer; new `markdown` install group.
* extend scripts/lint/ansible.sh to run ansible-lint after the existing
  syntax-check.
* add scripts/lint/markdown.sh and scripts/lint/galaxy.sh runners. The
  galaxy runner parallelizes via xargs (-P=$(nproc)), prints OK/FAIL per
  role, and treats `bare-name dependency` errors as success since our
  roles/ tree is not a Galaxy collection layout. All other Galaxy schema
  errors still fail.
* Makefile: new lint-markdown and lint-galaxy targets, both wired into
  `make lint`.
* CI: new workflows lint-markdown.yml and lint-galaxy.yml; lint-ansible.yml
  now installs ansible-core + ansible-lint; ci-orchestrator wires both
  new lint workflows into lint-gate.

Galaxy schema fixes
* shorten the canonical `galaxy_info.company` block from three lines to
  two ("Kevin Veen-Birkenbach\nhttps://www.veen.world", 45 chars) so it
  stays under Galaxy's hard 50-char limit. Updated everywhere: 229 role
  meta/main.yml plus _CANONICAL_COMPANY in
  tests/lint/repository/test_role_meta_main_galaxy_schema.py.
* shorten 19 over-long role descriptions to <=255 chars.
* add stub READMEs for sys-svc-compose-ca and sys-utils-service-loader.

Markdown baseline fixes
* markdownlint-cli2 --fix run repo-wide (formatting normalization
  across CHANGELOG, role READMEs, docs).
* manual MD041 fixes: prepend H1 in 15 files (CHANGELOG, LICENSE,
  TODO.md helpers, role README templates, etc.).
* MD025 / MD003 / MD001 / MD032 manual fixes for heading-style and
  list-spacing edge cases.
* role README content polish: "## Single Point of Truth (SPOT)" headings
  renamed to "## User data resolution" (D3 self-label rule).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 23:46:37 +02:00

139 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# sys-svc-container – Files Overview
This directory contains helper scripts and binaries that are installed on the host
to provide **container-related runtime functionality** for Infinito.Nexus.
The files here are **not application-specific**. They are **infrastructure helpers**
used by other roles, health checks, CI jobs, and runtime scripts that interact with
Docker containers in a controlled and reproducible way.
---
## container.py
**Purpose**
`container.py` is a **general-purpose Docker wrapper CLI** installed as:
```
/usr/local/bin/container
```
It provides a **stable, opinionated entry point** for container execution within
Infinito.Nexus.
**Why it exists**
- Centralizes container execution logic
- Injects **CA trust** only where it makes sense (`container run`)
- Avoids duplicating fragile `container run` logic across roles and scripts
- Provides predictable behavior in CI and production
**Key responsibilities**
- Implements `container run` with:
- CA trust injection (`with-ca-trust.sh`)
- ENTRYPOINT detection and recovery
- `--pull` policy handling
- Passes through commands where wrapping does **not** make sense:
- `container exec`
- `container logs`
- `container ps`
- `container inspect`
- `container pull`
- Provides a raw escape hatch:
```bash
container docker <any docker args>
```
**Who uses it**
* Health-check scripts (e.g. CSP, DNS, HTTP checks)
* CI jobs running Docker-in-Docker
* Infrastructure roles that need reliable container execution
* Any script that would otherwise call `container run` directly
---
## test-dns.sh
**Purpose**
`test-dns.sh` is a **Docker-in-Docker DNS health check script**.
It validates that DNS resolution works correctly *inside containers*, which is
critical for:
* Node.js (`dns.lookup`, `getaddrinfo`)
* CSP checker containers
* Any service relying on outbound DNS
**What it tests**
1. Docker daemon availability (DinD readiness)
2. DNS resolution via BusyBox:
* A record resolution
* No `SERVFAIL` responses
3. DNS resolution via Node.js:
* `dns.lookup()` behavior
* Real-world behavior matching CSP checker usage
**Who uses it**
* CI pipelines
* System health checks
* Debugging DNS issues in containerized environments
---
## install-cli.sh
**Purpose**
`install-cli.sh` installs the **Docker CLI (client only)** in a
distribution-aware way.
It is intentionally limited to the CLI and does **not** start or manage the Docker
daemon.
**Supported distributions**
* Arch Linux
* Debian / Ubuntu
* Fedora
* CentOS / RHEL
**Who uses it**
* CI images
* Minimal container images
* Test environments where only `docker` client access is required
* Roles that need to interact with an external Docker daemon or DinD
---
## Design Principles
* **Separation "docker logic" from application logic**
* **One canonical container entry point** (`container`)
* **Minimal magic** – wrapping only where it is technically justified
* **CI-first design** (predictable behavior without a full system)
---
## Summary
| File | Used by | Purpose |
| ---------------- | ----------------------- | ---------------------------------- |
| `container.py` | Scripts, roles, CI | Safe, CA-aware container execution |
| `test-dns.sh` | CI, health checks | Validate container DNS behavior |
| `install-cli.sh` | CI images, test systems | Install Docker CLI only |
This directory forms the **container runtime foundation** of Infinito.Nexus.