Files
computer-playbook/plugins/lookup/active_alertmanager_channels.py
T
kevinveenbirkenbachandClaude Opus 5 747aff6b45 fix(docs): let docutils read these class docstrings
The same failure class as 3dee332350, in the places that only became
visible once the louder messages were gone. Nine of them are class
docstrings, which the detector used to find the first round skipped
because it walked modules and functions only.

restart_condition carried a section title inside its docstring, where
docutils allows none, and the indented block below it held a second.

cert_utils indented the closing brace of its example shallower than the
body it closes.

Two are regressions of my own first round: filters lacked the blank line
between its new literal block and the paragraph after it, and
fediwall_active had the wrong one of its two colons corrected.

make i18n-extract domain=docs now finishes with zero warnings under -W.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-25 19:31:02 +02:00

63 lines
1.9 KiB
Python

from __future__ import annotations
from typing import Any
from ansible.plugins.loader import lookup_loader
from ansible.plugins.lookup import LookupBase
from utils.roles.applications.config import get as get_app_conf
class LookupModule(LookupBase):
"""
Return a sorted list of communication-channel app IDs that are deployed on
this host.
Checks::
Deployment check : app ID must appear in group_names.
Channel check : app must declare services.prometheus.communication.channel: true
in its own role config — the self-declaration pattern (SPOT per
app, no hardcoded list anywhere).
Usage in a template::
{% set _comm_channels = lookup('active_alertmanager_channels') %}
'applications' is obtained via lookup('applications'), the merged-config SPOT.
"""
def run(
self,
terms: list[Any],
variables: dict[str, Any] | None = None,
**kwargs: Any,
) -> list[list[str]]:
vars_ = variables or getattr(self._templar, "available_variables", {}) or {}
applications = lookup_loader.get(
"applications",
loader=self._loader,
templar=getattr(self, "_templar", None),
).run([], variables=vars_)[0]
group_names: list[str] = vars_.get("group_names", [])
result: list[str] = []
for app_id in sorted(applications.keys()):
if app_id not in group_names:
continue
is_channel = get_app_conf(
applications=applications,
application_id=app_id,
config_path="services.prometheus.communication.channel",
strict=False,
default=False,
skip_missing_app=True,
)
if is_channel:
result.append(app_id)
return [result]