Cloud.ru
Статус: доступен · пакет wg-flow-plugin-cloudru 0.1.0 · провайдер cloudru · категория cloud.
Плагин читает один проект Cloud.ru Evolution. В инвентарь попадают виртуальные машины, диски, подсети, клиентские VPC, публичные IP, группы безопасности и сетевые балансировщики. Секрет остаётся в YAML агента.
Агент меняет ключ доступа (Key ID и Key Secret) на IAM-токен и ходит с Authorization: Bearer. Токен живёт час, агент запрашивает новый сам. Подойдёт ключ сервисного аккаунта или персональный ключ доступа.
Один source — один проект. Идентификатор проекта копируется в консоли. Ключу нужно право читать этот проект.
Плагин только читает API. Платформа Cloud.ru Advanced этим плагином не покрывается.
Bare Metal, образы, бэкапы, группы размещения, SNAT-шлюзы, Managed Kubernetes, управляемые базы, Object Storage и DNS в 0.1.0 не читаются. Адреса консолей в инвентарь не копируются. Технические подсети, сервисные VPC и уже удалённые балансировщики пропускаются. Если API VPC или балансировщика отвечает 403 или 404, этот список пустой и source не падает. Ошибка любого другого списка роняет весь source: частичный снимок не отправляется.
Установка
Агент должен быть подключён к API.
docker compose exec agent wg-flow-agent plugin install cloudru
# или
wg-flow-agent plugin install cloudruДальше — локальный UI → Connections → cloudru или YAML.
Ключ создаётся в консоли Cloud.ru: сервисный аккаунт → ключ доступа, либо персональный ключ в профиле. Key Secret показывается один раз. Обмен описан в документации Cloud.ru.
Что попадает в инвентарь
| Объект Evolution | resource_type | Заметки |
|---|---|---|
| Виртуальная машина | instance | provider_resource_id = instance:{id}. running → active, stopped → stopped, error* → error, переходные состояния → pending. Регион — зона (ru.AZ-1). Прямой публичный IP или floating → metadata.primary_ipv4, внутренние адреса → metadata.private_ips. vCPU, память и доля ядра — cpu_cores, mem_gb, core_fraction (1:1 → 100, 1:3 → 30, 1:10 → 10). Если диски собираются в том же запуске, размер загрузочного диска пишется в disk_gb |
| Диск | storage | disk:{id}. available, in_use и reserved → active. Размер уже в гигабайтах: metadata.disk_gb и metadata.size_gb |
| Подсеть | network | subnet:{id}, metadata.product = subnet. CIDR в metadata.ip_ranges. Типы technical и zone_technical пропускаются |
| VPC | network | network:{id}, metadata.product = network. Сервисные VPC пропускаются |
| Публичный IP | network | address:{id}. metadata.product = public_ip. Адрес в metadata.primary_ipv4 |
| Группа безопасности | firewall | firewall:{id}. В metadata только rule_count, не сами правила |
| Сетевой балансировщик | load_balancer | nlb:{id}. NLB_STATUS_RUNNING → active, NLB_STATUS_SUSPENDED → stopped. Удалённый балансировщик пропускается |
Отдельного типа ip в инвентаре нет, поэтому публичный адрес — это network.
Куски сбора можно выключить отдельно. Выключенный кусок не запрашивается и не попадает в следующий успешный sync, и инвентарь помечает эти строки неактивными. disk_gb у машины появляется только когда сбор дисков включён.
Несколько проектов — несколько sources. provider_account — ваша метка.
YAML
plugins:
cloudru:
enabled: true
sources:
- id: prod
provider_account: "cloudru-prod"
sync_interval_seconds: 300
project_id: "496e40f7-cc4b-4fa4-b42a-8cd2c9360716"
key_id: "…"
secret: "…"
collect_instances: true
collect_disks: true
collect_networks: true
collect_addresses: true
collect_firewalls: true
collect_load_balancers: trueПоля source
| Поле | Обязательно | Описание |
|---|---|---|
id | да | Ключ в логах (cloudru/prod) |
provider_account | да | Метка проекта в инвентаре |
project_id | да | UUID проекта |
key_id | да | Key ID ключа доступа |
secret | да | Key Secret |
collect_* | нет | По умолчанию true |
sync_interval_seconds | нет | Минимум 300 |
Проверка
wg-flow-agent status
wg-flow-agent dry-runВ JSON provider: cloudru. Health получает IAM-токен и вызывает список ВМ с limit=1. Ключ и токен в инвентарь не пишутся.
Частые ошибки
| Симптом | Что проверить |
|---|---|
| 401 | Key ID и Key Secret от одного ключа доступа. API-ключ (Authorization: Api-Key) сюда не подходит |
| 403 на проект | У сервисного аккаунта есть право читать этот project_id |
| Пустой список ВМ | collect_instances включён и машины лежат в этом проекте Evolution, не в Advanced |
Нет disk_gb у машины | collect_disks выключен, размер диска не запрашивался |
| Нет VPC или балансировщиков | Нет доступа к этому API — это не ошибка source |
| Диски пропали после sync | collect_disks выключили; инвентарь гасит пропущенные строки |