Skip to content

Selectel ​

Status: available · package wg-flow-plugin-selectel 0.1.1 · provider selectel · category cloud.

The plugin requests a project-scoped Keystone token and reads the Selectel service catalog. Inventory receives cloud servers as instances (Nova), dedicated and Chipcore servers (Dedicated API), network disks (Cinder), networks and floating IPs (Neutron), security groups, and load balancers (Octavia). The service user password stays in the agent YAML.

One source is one cloud project in one pool. The default pool is ru-9 and the default auth URL is https://cloud.api.selcloud.ru/identity/v3. For another pool (ru-3, ru-7, …) set OS_REGION_NAME from the OpenStack RC file. Servers in another pool need another source.

account_id is the account number in the top-right corner of the panel (OS_USER_DOMAIN_NAME and OS_PROJECT_DOMAIN_NAME). project_id is the cloud project id from the project menu on the cloud servers page (OS_PROJECT_ID), not the project name. The user is a service user from IAM → Service users with access to that project.

The plugin only reads the API.

DNS, S3, Managed Kubernetes, Managed Databases, and images are not collected in 0.1.1. If the pool catalog has no Octavia endpoint, load balancers are skipped and the source still succeeds. The dedicated list is account-wide: turn collect_dedicated off on extra sources of the same account, or inventory will see the same machines under another label.

Install ​

The agent must be connected to the API.

bash
docker compose exec agent wg-flow-agent plugin install selectel
# or
wg-flow-agent plugin install selectel

Then the local UI → Connections → selectel, or YAML.

What lands in inventory ​

Selectel objectresource_typeNotes
Cloud serverinstanceprovider_resource_id = instance:{id}. ACTIVE → active, SHUTOFF and paused → stopped, transitional states → pending, ERROR → error. Region is the availability zone (ru-9a). The pool is metadata.pool. Public IPv4 → metadata.primary_ipv4, private addresses → metadata.private_ips. vCPU and RAM are cpu_cores and mem_gb. Local flavor disk is disk_gb only when it is greater than zero
Dedicated serverserverserver:{uuid}. Dedicated API GET /resource, types server and serverchip. The name is user_desc, otherwise the configuration. active → active, processing → pending, expired → stopped. Public IPv4 from IPAM → metadata.primary_ipv4. Firewalls, network gear, and colocation are skipped
Network diskstoragevolume:{id}. available and in-use → active, creating → pending. Size in metadata.size_gb
Networknetworknetwork:{id}. Subnet CIDRs in metadata.ip_ranges
Floating IPnetworkfloating-ip:{id}. metadata.product = floating_ip. DOWN → stopped
Security groupfirewallfirewall:{id}. A short rule list in metadata
Load balancerload_balancerlb:{id}. operating_status: OFFLINE → stopped, provisioning_status: ERROR → error

Inventory has no separate ip type, so a floating IP is a network.

Each collect flag can be turned off. A disabled slice is absent from the next successful sync, and inventory marks those rows inactive. An error while listing servers, disks, networks, or security groups fails the whole source: a partial list is not sent.

Several projects or pools mean several sources. provider_account is your label.

YAML ​

yaml
plugins:
  selectel:
    enabled: true
    sources:
      - id: ru9
        provider_account: "selectel-ru9"
        sync_interval_seconds: 300
        auth_url: "https://cloud.api.selcloud.ru/identity/v3"
        region: "ru-9"
        username: "svc-inventory"
        password: "…"
        account_id: "123456"
        project_id: "…"
        collect_servers: true
        collect_dedicated: true
        collect_volumes: true
        collect_networks: true
        collect_floating_ips: true
        collect_firewalls: true
        collect_load_balancers: true

Source fields ​

FieldRequiredDescription
idyesLog key (selectel/ru9)
provider_accountyesProject label in inventory
auth_urlnoDefault https://cloud.api.selcloud.ru/identity/v3
regionnoPool, default ru-9. This is OS_REGION_NAME
username, passwordyesService user
account_idyesAccount number
project_idyesOS_PROJECT_ID
collect_*noDefault true
sync_interval_secondsnoMinimum 300

Check ​

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

JSON shows provider: selectel. Health requests a token and calls GET {nova}/servers/detail?limit=1. The password is not stored in inventory. If Nova rejects microversion 2.67, the server list is requested again without that header.

Common errors ​

SymptomWhat to check
401 / 403Service user name and password, account number, and OS_PROJECT_ID. The user has a role on this project
Compute endpoint not foundregion matches the pool where the servers were created. Another pool’s catalog is not used
Empty server listcollect_servers is on; the project has servers in this pool
Disks disappeared after synccollect_volumes was turned off; inventory retires omitted rows
No load balancersThe pool catalog has no Octavia endpoint — the source did not fail
Duplicates from another pluginA different provider is expected; merge them in the console