Skip to content

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.

bash
docker compose exec agent wg-flow-agent plugin install hetzner
# или
wg-flow-agent plugin install hetzner

Дальше — локальный UI → Connections → hetzner или YAML.

Что попадает в инвентарь ​

Объект Hetznerresource_typeЗаметки
Cloud serverserverprovider_resource_id = server:{id}. running → active, off → stopped, переходные состояния → pending. Публичный IPv4 → metadata.primary_ipv4
Volumestoragevolume:{id}. available → active, creating → pending. Размер в metadata.size_gb
Load balancerload_balancerlb:{id}. Публичная сеть enabled: false → stopped
Floating IPnetworkfloating-ip:{id}. blocked → error. IPv4 также в metadata.primary_ipv4
Primary IPnetworkprimary-ip:{id}, в том числе адрес без сервера
Private networknetworknetwork:{id}. Регион — network_zone подсети
Firewallfirewallfirewall:{id}. Краткий список правил в metadata
Certificatecertificatecertificate:{id}. Неготовность или ошибка выпуска → pending / error. not_valid_after — срок

Отдельного типа ip в инвентаре нет, поэтому адреса — это network с metadata.product floating_ip или primary_ip.

Куски сбора можно выключить отдельно. Выключенный кусок не попадает в следующий успешный sync, и инвентарь помечает эти строки неактивными. Ошибка API роняет весь source: частичный список не отправляется.

Несколько проектов — несколько sources. provider_account — ваша метка; проект выбирает сам токен.

YAML ​

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

Проверка ​

bash
wg-flow-agent status
wg-flow-agent dry-run

В JSON provider: hetzner. Health вызывает GET /servers?per_page=1. Сам токен в инвентарь не пишется.

Частые ошибки ​

СимптомЧто проверить
401 / 403Токен от этого проекта и скопирован целиком
Пустой список серверовcollect_servers включён; в проекте есть серверы
Volumes пропали после synccollect_volumes выключили; инвентарь гасит пропущенные строки
У сервера нет адресаУ сервера нет IPv4 (public_net.ipv4 пустой). IPv6 лежит в metadata.ipv6
Дубли с другим плагиномразный provider — это нормально; слияние в кабинете