Files
computer-playbook/utils
kevinveenbirkenbachandClaude Opus 5 351d1f4553 fix(env): take the services.yml path from the role-mapping SPOT
3f0bca4d83 replaced the YAML walk with a line scan and glob-ed the role file
by hand. test_file_spot refuses a hard-coded role-file path: the name belongs
to utils.roles.mapping, which every other reader imports it from.

The import is safe for the bootstrap layer this handler lives on, which is the
whole point of the preceding commit: utils/roles/mapping.py declares nothing
but a future-import, so its closure stays stdlib-only. That is the shape the
handler README allows and the one 77292f9041 established.

The derived registry set is unchanged, asserted against the previous value.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-01 05:50:21 +02:00
..
…
…

Shared Utilities (utils/)

This directory contains shared Python helpers used by custom modules and plugins.

Purpose

Use utils/ for reusable code that should not be duplicated across:

  • library/ modules,
  • plugins/action/,
  • plugins/filter/,
  • plugins/lookup/.

Typical shared utilities:

  • API clients,
  • validation/conversion helpers,
  • path and configuration helpers,
  • cross-plugin/module domain logic.
  • Shared HTTP(S) connection handler for multiple modules.
  • Common validation or transformation functions for user input.
  • Utility functions for interacting with Docker, LDAP, etc.
  • Grouped helper packages such as utils/domains/ for related domain logic.

Design Guidelines

  • Keep helpers focused and composable.
  • Avoid side effects during import.
  • Prefer explicit function/class APIs over implicit globals.
  • Keep dependencies minimal so modules/plugins stay lightweight.

Example Import

from utils.domains.primary_domain import get_primary_domain

What Does Not Belong Here

  • Standalone executable modules (put in library/).
  • Ansible plugin entrypoints (put in plugins/*).

References