mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 02:54:26 +00:00
Tighten the utils namespace so each subpackage owns one concern:
- utils/applications/* moves under utils/roles/applications/* (helpers
that operate on the runtime applications dict and meta/services.yml).
- utils/service_registry.py and utils/database_service.py move under
utils/roles/applications/services/ as registry.py and database.py.
- utils/entity_name_utils.py becomes utils/roles/entity_name.py.
- utils/invokable.py, utils/valid_deploy_id.py, and the existing
utils/roles/resource_validation.py group under utils/roles/validation/
as invokable.py, deploy_id.py, and resources.py.
- utils/templating.py and utils/jinja_strict.py split into
utils/templating/ansible.py (Templar + TrustedAsTemplate, lookup-env
shortcut) and utils/templating/jinja.py (vanilla Jinja2 Environment,
multi-pass strict render).
Every caller in utils, cli, plugins, roles/<role>/{filter,lookup}_plugins,
tests, and the docs that link to the moved files is updated to the new
import paths. Test files mirror the new source layout
(tests/unit/utils/{roles,templating}/...).
New READMEs at utils/cleanup/, utils/roles/, utils/roles/applications/services/,
utils/roles/validation/, and utils/templating/ follow the
documentation.md and readme_md.md guidelines.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1.4 KiB
1.4 KiB
Role Validation Helpers ✅
Validators that gate role inputs and outputs against project rules.
Scope 📋
Modules in utils/roles/validation/ MUST limit themselves to checking that role artefacts and their derived names obey the constraints documented in docs/contributing/: legal application identifiers, deployment-target invokability, container resource shape.
Validators MUST raise typed exceptions (or return the offending value with a clear message) so callers can surface the failure at the right layer (CLI exit code, lint test failure, runtime assertion).
Validators MUST stay independent of Ansible plugin loader behavior at import time so the same code runs from filter plugins, lookup plugins, the CLI, and tests.
Modules 📦
| Module | Validates |
|---|---|
| deploy_id.py | Application id strings against the canonical <bucket>-<entity> shape and the active deploy-id grammar. |
| invokable.py | Whether an application can legitimately be invoked under a given deployment type (e.g. server, workstation, universal). |
| resources.py | Container resource declarations (cpus, mem_reservation, mem_limit, pids_limit) for shape and unit consistency. |
Example Imports ✍️
from utils.roles.validation.deploy_id import validate_deploy_id
from utils.roles.validation.invokable import is_invokable_for
from utils.roles.validation.resources import validate_resource_block