# services/finance/firefly-cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: firefly-cron
  namespace: finance
spec:
  schedule: "0 3 * * *"
  suspend: true
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 1
  failedJobsHistoryLimit: 3
  jobTemplate:
    spec:
      backoffLimit: 1
      template:
        metadata:
          annotations:
            vault.hashicorp.com/agent-inject: "true"
            vault.hashicorp.com/agent-pre-populate-only: "true"
            vault.hashicorp.com/role: "finance"
            vault.hashicorp.com/agent-inject-secret-firefly-cron-token: "kv/data/atlas/finance/firefly-secrets"
            vault.hashicorp.com/agent-inject-template-firefly-cron-token: |
              {{- with secret "kv/data/atlas/finance/firefly-secrets" -}}
              {{ .Data.data.STATIC_CRON_TOKEN }}
              {{- end -}}
        spec:
          serviceAccountName: finance-vault
          restartPolicy: Never
          affinity:
            nodeAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
                - weight: 100
                  preference:
                    matchExpressions:
                      - key: hardware
                        operator: In
                        values: ["rpi5"]
                - weight: 70
                  preference:
                    matchExpressions:
                      - key: hardware
                        operator: In
                        values: ["rpi4"]
          nodeSelector:
            kubernetes.io/arch: arm64
            node-role.kubernetes.io/worker: "true"
          containers:
            - name: cron
              image: curlimages/curl:8.5.0
              command: ["/bin/sh", "-c"]
              args:
                - |
                  set -eu
                  token="$(cat /vault/secrets/firefly-cron-token)"
                  curl -fsS "http://firefly.finance.svc.cluster.local/api/v1/cron/${token}"
