diff --git a/infra/inttest/minio.yaml b/infra/inttest/minio.yaml index 32f7a0b..e42f14b 100644 --- a/infra/inttest/minio.yaml +++ b/infra/inttest/minio.yaml @@ -2,7 +2,7 @@ # Namespace is substituted at runtime via envsubst # No persistence — uses emptyDir # Credentials: minioadmin/minioadmin (hardcoded for ephemeral sandbox) -# Includes a Job that waits for MinIO readiness and creates the stonks-normalized bucket +# Bucket creation is handled by seed_minio.py (no separate init job needed) --- apiVersion: apps/v1 kind: Deployment @@ -100,98 +100,3 @@ spec: - port: 9000 targetPort: 9000 protocol: TCP ---- -apiVersion: batch/v1 -kind: Job -metadata: - name: minio-bucket-init - namespace: ${NAMESPACE} - labels: - app: minio - tier: infra - app.kubernetes.io/part-of: stonks-oracle -spec: - backoffLimit: 4 - template: - metadata: - labels: - app: minio-bucket-init - tier: infra - spec: - imagePullSecrets: - - name: dockerhub-credentials - automountServiceAccountToken: false - securityContext: - runAsNonRoot: true - runAsUser: 1000 - runAsGroup: 1000 - seccompProfile: - type: RuntimeDefault - restartPolicy: OnFailure - containers: - - name: bucket-init - image: registry.celestium.life/dockerhub-cache/library/python:3.12-slim - imagePullPolicy: IfNotPresent - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: ["ALL"] - resources: - requests: - cpu: 50m - memory: 64Mi - limits: - cpu: 250m - memory: 128Mi - env: - - name: HTTP_PROXY - value: "" - - name: HTTPS_PROXY - value: "" - - name: http_proxy - value: "" - - name: https_proxy - value: "" - - name: NO_PROXY - value: "*" - - name: no_proxy - value: "*" - command: ["python", "-c"] - args: - - | - import urllib.request, urllib.error, time - - # Disable all proxy usage in urllib - no_proxy_handler = urllib.request.ProxyHandler({}) - opener = urllib.request.build_opener(no_proxy_handler) - urllib.request.install_opener(opener) - - endpoint = "http://minio:9000" - max_wait = 60 - - # Wait for MinIO readiness - print("Waiting for MinIO to be ready...") - start = time.time() - while time.time() - start < max_wait: - try: - r = urllib.request.urlopen(f"{endpoint}/minio/health/ready", timeout=3) - if r.status == 200: - print("MinIO is ready.") - break - except Exception: - pass - time.sleep(2) - else: - raise SystemExit("MinIO did not become ready within 60s") - - # Create bucket via S3 PUT request - bucket = "stonks-normalized" - req = urllib.request.Request(f"{endpoint}/{bucket}", method="PUT") - try: - urllib.request.urlopen(req, timeout=5) - print(f"Bucket '{bucket}' created successfully.") - except urllib.error.HTTPError as e: - if e.code == 409: - print(f"Bucket '{bucket}' already exists.") - else: - raise diff --git a/infra/inttest/run_pipeline.sh b/infra/inttest/run_pipeline.sh index 8795a68..cb4aab0 100755 --- a/infra/inttest/run_pipeline.sh +++ b/infra/inttest/run_pipeline.sh @@ -312,14 +312,6 @@ if ! kubectl wait --for=condition=ready pod -l app=minio -n "$NAMESPACE" --timeo exit 2 fi -log "Waiting for minio-bucket-init job ..." -if ! kubectl wait --for=condition=complete job/minio-bucket-init -n "$NAMESPACE" --timeout=120s; then - log "WARNING: minio-bucket-init job did not complete within 120s" - log "Bucket-init pod logs:" - kubectl logs -l app=minio-bucket-init -n "$NAMESPACE" --tail=30 2>&1 || true - kubectl describe job/minio-bucket-init -n "$NAMESPACE" 2>&1 | tail -20 || true -fi - stage_end "infra_deploy" "ok" # ══════════════════════════════════════════════════════════════════════════════ @@ -402,6 +394,15 @@ envsubst < "$REPO_ROOT/infra/inttest/services.yaml" \ | kubectl apply -n "$NAMESPACE" -f - log "Waiting for all API services to become ready ..." +# Wait for pods to be created by the ReplicaSet controller before checking readiness. +# kubectl wait fails immediately with "no matching resources found" if no pods exist yet. +for i in $(seq 1 30); do + POD_COUNT=$(kubectl get pods -n "$NAMESPACE" -l tier=api --no-headers 2>/dev/null | wc -l) + if [ "$POD_COUNT" -ge 4 ]; then + break + fi + sleep 2 +done if ! kubectl wait --for=condition=ready pod -l tier=api -n "$NAMESPACE" --timeout=120s; then log "FATAL: API services did not become ready" log "Pod statuses:"