id: hetzner-server-available-list namespace: hetzner triggers: - id: every-15-minutes-daytime type: io.kestra.plugin.core.trigger.Schedule cron: "*/15 7-21 * * *" timezone: Europe/Berlin tasks: - id: fetch_servers type: io.kestra.plugin.scripts.shell.Commands containerImage: alpine:latest env: HCLOUD_TOKEN: "{{ secret('HCLOUD_TOKEN') }}" beforeCommands: - apk add --no-cache curl jq commands: - | set -eo pipefail curl -sS \ -H "Authorization: Bearer $HCLOUD_TOKEN" \ "https://api.hetzner.cloud/v1/servers" \ | jq -c ' [ .servers[] | { id: .id, name: .name, status: .status, ipv4: .public_net.ipv4.ip, server_type: .server_type.name, location: .datacenter.location.name, labels: .labels, created: .created } ] ' > hetzner-server-available.json jq -c '[.[].name]' hetzner-server-available.json > hetzner-server-names.json echo "Komplette Serverliste:" cat hetzner-server-available.json echo "Nur Servernamen für Kestra Dropdown:" cat hetzner-server-names.json outputFiles: - hetzner-server-available.json - hetzner-server-names.json - id: upload_to_minio type: io.kestra.plugin.scripts.shell.Commands containerImage: minio/mc:latest env: AWS_ACCESS_KEY_ID: "{{ secret('AWS_ACCESS_KEY_ID') }}" AWS_SECRET_ACCESS_KEY: "{{ secret('AWS_SECRET_ACCESS_KEY') }}" TF_BACKEND_BUCKET: "{{ secret('TF_BACKEND_BUCKET') }}" TF_BACKEND_ENDPOINT: "{{ secret('TF_BACKEND_ENDPOINT') }}" inputFiles: hetzner-server-available.json: "{{ outputs.fetch_servers.outputFiles['hetzner-server-available.json'] }}" hetzner-server-names.json: "{{ outputs.fetch_servers.outputFiles['hetzner-server-names.json'] }}" commands: - | set -eo pipefail mc alias set tfstate "$TF_BACKEND_ENDPOINT" "$AWS_ACCESS_KEY_ID" "$AWS_SECRET_ACCESS_KEY" mc cp hetzner-server-available.json "tfstate/$TF_BACKEND_BUCKET/inventory/hetzner-server-available.json" mc cp hetzner-server-names.json "tfstate/$TF_BACKEND_BUCKET/inventory/hetzner-server-names.json" echo "Dateien wurden nach MinIO geschrieben:" echo "$TF_BACKEND_BUCKET/inventory/hetzner-server-available.json" echo "$TF_BACKEND_BUCKET/inventory/hetzner-server-names.json" - id: set_server_names_kv type: io.kestra.plugin.core.kv.Set key: hetzner_server_names kvType: JSON value: "{{ read(outputs.fetch_servers.outputFiles['hetzner-server-names.json']) }}" - id: log_result type: io.kestra.plugin.core.log.Log message: | ✅ Hetzner-Serverliste wurde aktualisiert. MinIO: s3://{{ secret('TF_BACKEND_BUCKET') }}/inventory/hetzner-server-available.json s3://{{ secret('TF_BACKEND_BUCKET') }}/inventory/hetzner-server-names.json Kestra KV wurde gesetzt: hetzner_server_names Inhalt: {{ read(outputs.fetch_servers.outputFiles['hetzner-server-names.json']) }}