Files
computer-playbook/plugins/action/uri_retry.py
kevinveenbirkenbachandClaude Opus 5 5137465c6f style: delete every comment the comments-valid policy rejects
3529 invalid comments in 528 files, grandfathered in while the linter
only saw the working-tree diff. Removal ran through the linter's own
collectors, so detection and deletion cannot drift: a comment whose
opener line is blank before it and whose closer line is blank after it
loses all its lines, anything else loses only the comment region, and a
line left holding a bare delimiter goes with it.

Five files keep their comments behind a nocheck marker instead. Four are
upstream configs whose inline docs are upstream's own (mautrix, systemd
journald, nextcloud-oidc-login, MediaWiki). In littlejs the
commented-out entries ARE the deactivation mechanism for an example
tile, so deleting them would delete configuration.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 03:22:02 +02:00

66 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Local action plugin that extends ansible's uri action plugin with centralized
# retry defaults while preserving full uri feature compatibility.
from __future__ import annotations
import time
from ansible.plugins.action.uri import ActionModule as UriActionModule
class ActionModule(UriActionModule):
DEFAULT_RETRIES = 30
DEFAULT_DELAY = 2
def run(self, tmp=None, task_vars=None):
if task_vars is None:
task_vars = {}
if self._task_keyword_is_set("until"):
return super().run(tmp=tmp, task_vars=task_vars)
if self._task.async_val:
return super().run(tmp=tmp, task_vars=task_vars)
retries = self._task_keyword_int("retries", self.DEFAULT_RETRIES)
delay = self._task_keyword_int("delay", self.DEFAULT_DELAY)
attempts_total = max(1, retries + 1)
last_result = None
for attempt in range(1, attempts_total + 1):
last_result = super().run(tmp=tmp, task_vars=task_vars)
if not last_result.get("failed", False):
last_result["attempts"] = attempt
return last_result
if attempt < attempts_total:
time.sleep(delay)
last_result["attempts"] = attempts_total
return last_result
def _task_keyword_is_set(self, key):
ds = self._task.get_ds()
return isinstance(ds, dict) and key in ds
def _task_keyword_int(self, key, fallback):
if key == "retries":
retries_value = getattr(self._task, "retries", None)
if retries_value is None:
return fallback
return self._as_int(retries_value, fallback)
if not self._task_keyword_is_set(key):
return fallback
return self._as_int(getattr(self._task, key, None), fallback)
@staticmethod
def _as_int(value, fallback):
try:
return int(value)
except (TypeError, ValueError):
return fallback