fix: P0 — add User-Agent + retry to bash urllib, retry to service_spec_gen, empty-list guard
This commit is contained in:
+33
-12
@@ -139,6 +139,14 @@ fi
|
||||
|
||||
rm -f "$FAILURES_FILE"
|
||||
|
||||
# Проверка что список сервисов не пустой
|
||||
svc_count=$(grep -cv '^\s*$\|^\s*#' "$SERVICES_FILE" || true)
|
||||
if [[ "$svc_count" -eq 0 ]]; then
|
||||
echo "Error: services list is empty or all commented out: $SERVICES_FILE" >&2
|
||||
exit 2
|
||||
fi
|
||||
echo "Generating YAML for ${svc_count} services from ${SERVICES_FILE}"
|
||||
|
||||
# Читаем список сервисов, пропуская пустые строки и комментарии.
|
||||
while IFS= read -r line; do
|
||||
line="${line//$'\r'/}"
|
||||
@@ -164,28 +172,41 @@ while IFS= read -r line; do
|
||||
# Если имя не указано в списке — подтягиваем по API.
|
||||
if [[ -z "$svc_name" ]]; then
|
||||
svc_name=$(python3 - <<PY
|
||||
import json
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
import json, sys, time, urllib.parse, urllib.request
|
||||
|
||||
sid = "${sid}"
|
||||
endpoint = "${API_ENDPOINT}"
|
||||
token = "${NUBES_API_TOKEN}"
|
||||
max_retries = 3
|
||||
|
||||
params = urllib.parse.urlencode({"endpoint": f"/services/{sid}"})
|
||||
url = f"{endpoint}?{params}"
|
||||
req = urllib.request.Request(url)
|
||||
if token:
|
||||
req.add_header("Authorization", f"Bearer {token}")
|
||||
|
||||
with urllib.request.urlopen(req) as resp:
|
||||
data = json.loads(resp.read().decode("utf-8"))
|
||||
|
||||
svc = data.get("svc", {})
|
||||
name = svc.get("svcShort") or svc.get("name") or svc.get("title") or f"service_{sid}"
|
||||
print(name)
|
||||
for attempt in range(1, max_retries + 1):
|
||||
try:
|
||||
req = urllib.request.Request(url)
|
||||
if token:
|
||||
req.add_header("Authorization", f"Bearer {token}")
|
||||
req.add_header("User-Agent", "Mozilla/5.0 (compatible; Terraform-Provider-Nubes/BashGenerator)")
|
||||
with urllib.request.urlopen(req, timeout=30) as resp:
|
||||
data = json.loads(resp.read().decode("utf-8"))
|
||||
svc = data.get("svc", {})
|
||||
name = svc.get("svcShort") or svc.get("name") or svc.get("title") or f"service_{sid}"
|
||||
print(name)
|
||||
sys.exit(0)
|
||||
except Exception as e:
|
||||
if attempt < max_retries:
|
||||
time.sleep(2 * attempt)
|
||||
else:
|
||||
print(f"ERROR: failed to fetch service {sid} after {max_retries} attempts: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
PY
|
||||
)
|
||||
if [[ "$svc_name" == ERROR:* ]]; then
|
||||
echo "$svc_name" >&2
|
||||
echo "${sid} api_error" >> "$FAILURES_FILE"
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
|
||||
# Один YAML на сервис формируется Go-генератором.
|
||||
|
||||
Reference in New Issue
Block a user