Role - edpm_cyborg

This role deploys the OpenStack Cyborg agent as a Podman container on EDPM compute nodes. The cyborg-agent discovers accelerator hardware (GPUs, FPGAs, etc.) and reports it to the Cyborg conductor on the controlplane.

The service is opt-in: users add cyborg to their OpenStackDataPlaneNodeSet services list when accelerator management is needed.

Configuration

The cyborg-agent receives its configuration from two sources, all synced to the compute host by this role:

  1. Base secret (cyborg-agent-config) – generated by the controlplane operator and declared as a secretRef in the OpenStackDataPlaneService CR dataSources. Contains the default agent configuration.

  2. Extra config – an optional configMapRef in the same dataSources for user-provided .conf overrides.

All .conf files from these sources are placed into /etc/cyborg/cyborg.conf.d/ inside the container.

If the same extra configuration applies to all compute nodes, a single OpenStackDataPlaneService with one configMapRef (e.g., cyborg-extra-config) is sufficient.

If different compute nodes require different configurations (e.g., GPU nodes vs FPGA nodes), create a separate OpenStackDataPlaneService per accelerator type, each pointing to its own ConfigMap. All variants use the same playbook (osp.edpm.cyborg):

# GPU service
apiVersion: dataplane.openstack.org/v1beta1
kind: OpenStackDataPlaneService
metadata:
  name: cyborg-gpu
spec:
  dataSources:
    - secretRef:
        name: cyborg-agent-config
    - configMapRef:
        name: cyborg-gpu-extra-config
  playbook: osp.edpm.cyborg
  caCerts: combined-ca-bundle
  edpmServiceType: cyborg

# FPGA service
apiVersion: dataplane.openstack.org/v1beta1
kind: OpenStackDataPlaneService
metadata:
  name: cyborg-fpga
spec:
  dataSources:
    - secretRef:
        name: cyborg-agent-config
    - configMapRef:
        name: cyborg-fpga-extra-config
  playbook: osp.edpm.cyborg
  caCerts: combined-ca-bundle
  edpmServiceType: cyborg

Then reference the appropriate service in each NodeSet:

# GPU NodeSet
spec:
  services:
    - cyborg-gpu

# FPGA NodeSet
spec:
  services:
    - cyborg-fpga

Bind mounts

The cyborg-agent container includes the following device and system mounts by default:

  • /dev – Host devices

  • /sys – Sysfs

  • /etc/nvme – NVMe configuration

Accelerator devices often require additional host paths (e.g., /dev/dri) to be mounted into the container. Use edpm_cyborg_extra_bind_mounts to declare them:

edpm_cyborg_extra_bind_mounts:
  - src: /dev/dri
    dest: /dev/dri
    options: rw

The role validates that source directories exist and that destination paths do not collide with the standard mounts (/var/lib/cyborg, /var/lib/openstack, /etc/cyborg).

osp.edpm.edpm_cyborg role – The main entry point for the edpm_cyborg role.

Entry point main – The main entry point for the edpm_cyborg role.

Synopsis
Parameters

Parameter

Comments

edpm_cyborg_agent_image

string

The container image to use for the cyborg agent container. This image is used to create the cyborg-agent container on the compute node and generally will be set via the container bundle by the dataplane operator.

Default: "quay.io/openstack.kolla/cyborg-agent:master-rocky-10"

edpm_cyborg_config_dest

string

The path to the directory where the cyborg config files will be rendered on the compute node.

Default: "/var/lib/openstack/cyborg"

edpm_cyborg_config_src

string

The path to the directory containing the cyborg config files in the ansibleEE container. This is the directory where all configmaps and secrets containing cyborg config files are mounted.

Default: "/var/lib/openstack/configs/cyborg"

edpm_cyborg_extra_bind_mounts

list / elements=string

A list of additional host mounts to be added to the cyborg agent container. This enables passing device paths for accelerators (GPUs, FPGAs, etc.) to the container. Each item should be a dictionary with the following keys: - src: The path to the file or directory on the host - dest: The path to the file or directory in the container - options: The options to set for the bind mount in podman format (optional) src directories must exist on the host. dest must not collide with standard mounts: - /var/lib/cyborg - /var/lib/openstack - /etc/cyborg options defaults to “ro” if not specified.

Default: []

edpm_cyborg_image_download_delay

integer

The seconds between retries for failed download tasks.

Default: 60

edpm_cyborg_image_download_retries

integer

The number of retries for failed download tasks.

Default: 5

edpm_cyborg_service_name

string

The service name identifier used for config path construction.

Default: "cyborg"

edpm_cyborg_tls_ca_src_dir

string

The path to the directory containing the TLS CA bundle to mount into the cyborg agent container.

Default: "/var/lib/openstack/cacerts/cyborg"