add hetzner-server-available-list flow and document it in README
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
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']) }}
|
||||
Reference in New Issue
Block a user