Files
UmbraDatastore/k8s/base/06-import-job.yaml
umbra audio cce2ce55dc Initial commit: UmbraDatastore configuration and deployment scripts
- Database deployment script (scripts/deploy-database.sh)
- Kubernetes manifests for CNPG PostgreSQL cluster (k8s/base/)
- Documentation (docs/DEPLOYMENT_GUIDE.md, DATASTORE_SPEC.md, INTEGRATION_SPEC.md)
- README with architecture overview and operations guide
2026-10-31 19:47:27 -07:00

149 lines
4.5 KiB
YAML

# Copyright 2026 Umbra Tools (umbratools.com)
# SPDX-License-Identifier: Apache-2.0
---
# Job to import existing productions data into PostgreSQL
# Run once after initial deployment: kubectl apply -f 06-import-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: umbratrans-import-productions
namespace: umbratrans
labels:
app: umbratrans-import
component: import
annotations:
# Allow job to run for a long time
batch.kubernetes.io/job-tracking: "true"
spec:
ttlSecondsAfterFinished: 86400 # Keep job for 24h after completion
backoffLimit: 3
activeDeadlineSeconds: 7200 # 2 hours max
template:
metadata:
labels:
app: umbratrans-import
component: import
annotations:
prometheus.io/scrape: "false"
spec:
serviceAccountName: umbratrans-worker
restartPolicy: OnFailure
securityContext:
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
initContainers:
- name: wait-for-db
image: postgres:16-alpine
command: ["sh", "-c", "until pg_isready -h umbratrans-db-rw -U umbratrans -d umbratrans; do sleep 5; done"]
env:
- name: PGPASSWORD
valueFrom:
secretKeyRef:
name: umbratrans-db-credentials
key: password
containers:
- name: import
image: umbratrans-worker:latest
imagePullPolicy: IfNotPresent
command: ["python", "-m", "umbratrans_web.cli", "import-productions"]
args:
- "--organization"
- "umbra" # Organization slug
- "--confirm"
envFrom:
- secretRef:
name: umbratrans-worker-config
- secretRef:
name: umbratrans-db-credentials
- secretRef:
name: umbratrans-secrets
volumeMounts:
- name: productions
mountPath: /mnt/productions
readOnly: true
- name: artifacts
mountPath: /mnt/artifacts
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "2000m"
volumes:
- name: productions
persistentVolumeClaim:
claimName: umbratrans-productions
- name: artifacts
persistentVolumeClaim:
claimName: umbratrans-artifacts
---
# CronJob for periodic re-import (optional - for catching new productions)
apiVersion: batch/v1
kind: CronJob
metadata:
name: umbratrans-import-productions-schedule
namespace: umbratrans
labels:
app: umbratrans-import
component: import
spec:
schedule: "0 3 * * *" # Daily at 3 AM UTC
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
jobTemplate:
spec:
ttlSecondsAfterFinished: 86400
backoffLimit: 1
activeDeadlineSeconds: 7200
template:
spec:
serviceAccountName: umbratrans-worker
restartPolicy: OnFailure
securityContext:
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
containers:
- name: import
image: umbratrans-worker:latest
imagePullPolicy: IfNotPresent
command: ["python", "-m", "umbratrans_web.cli", "import-productions"]
args:
- "--organization"
- "umbra"
- "--incremental" # Only import new/changed
envFrom:
- secretRef:
name: umbratrans-worker-config
- secretRef:
name: umbratrans-db-credentials
- secretRef:
name: umbratrans-secrets
volumeMounts:
- name: productions
mountPath: /mnt/productions
readOnly: true
- name: artifacts
mountPath: /mnt/artifacts
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "2000m"
volumes:
- name: productions
persistentVolumeClaim:
claimName: umbratrans-productions
- name: artifacts
persistentVolumeClaim:
claimName: umbratrans-artifacts