Hetzner Cloud
Статус: доступен · пакет wg-flow-plugin-hetzner 0.1.0 · провайдер hetzner · категория cloud.
Плагин ходит в Hetzner Cloud API и отдаёт проект в инвентарь. Нужен API-токен проекта. Токен остаётся в YAML агента.
Токен создаётся в проекте Cloud: Security → API tokens. Плагин шлёт только GET. Один source — один проект.
SSH-ключи, образы, снапшоты и ISO в 0.1.0 не эмитятся.
Установка
Агент должен быть подключён к API.
docker compose exec agent wg-flow-agent plugin install hetzner
# или
wg-flow-agent plugin install hetznerДальше — локальный UI → Connections → hetzner или YAML.
Что попадает в инвентарь
| Объект Hetzner | resource_type | Заметки |
|---|---|---|
| Cloud server | server | provider_resource_id = server:{id}. running → active, off → stopped, переходные состояния → pending. Публичный IPv4 → metadata.primary_ipv4 |
| Volume | storage | volume:{id}. available → active, creating → pending. Размер в metadata.size_gb |
| Load balancer | load_balancer | lb:{id}. Публичная сеть enabled: false → stopped |
| Floating IP | network | floating-ip:{id}. blocked → error. IPv4 также в metadata.primary_ipv4 |
| Primary IP | network | primary-ip:{id}, в том числе адрес без сервера |
| Private network | network | network:{id}. Регион — network_zone подсети |
| Firewall | firewall | firewall:{id}. Краткий список правил в metadata |
| Certificate | certificate | certificate:{id}. Неготовность или ошибка выпуска → pending / error. not_valid_after — срок |
Отдельного типа ip в инвентаре нет, поэтому адреса — это network с metadata.product floating_ip или primary_ip.
Куски сбора можно выключить отдельно. Выключенный кусок не попадает в следующий успешный sync, и инвентарь помечает эти строки неактивными. Ошибка API роняет весь source: частичный список не отправляется.
Несколько проектов — несколько sources. provider_account — ваша метка; проект выбирает сам токен.
YAML
plugins:
hetzner:
enabled: true
sources:
- id: prod
provider_account: "hz-prod"
sync_interval_seconds: 300
url: "https://api.hetzner.cloud/v1"
token: "…"
collect_servers: true
collect_volumes: true
collect_load_balancers: true
collect_floating_ips: true
collect_primary_ips: true
collect_networks: true
collect_firewalls: true
collect_certificates: trueПоля source
| Поле | Обязательно | Описание |
|---|---|---|
id | да | Ключ в логах (hetzner/prod) |
provider_account | да | Метка проекта в инвентаре |
url | нет | По умолчанию https://api.hetzner.cloud/v1 |
token | да | API-токен проекта; в UI скрыт |
collect_* | нет | По умолчанию true. См. таблицу выше |
sync_interval_seconds | нет | Минимум 300 |
Проверка
wg-flow-agent status
wg-flow-agent dry-runВ JSON provider: hetzner. Health вызывает GET /servers?per_page=1. Сам токен в инвентарь не пишется.
Частые ошибки
| Симптом | Что проверить |
|---|---|
| 401 / 403 | Токен от этого проекта и скопирован целиком |
| Пустой список серверов | collect_servers включён; в проекте есть серверы |
| Volumes пропали после sync | collect_volumes выключили; инвентарь гасит пропущенные строки |
| У сервера нет адреса | У сервера нет IPv4 (public_net.ipv4 пустой). IPv6 лежит в metadata.ipv6 |
| Дубли с другим плагином | разный provider — это нормально; слияние в кабинете |