This document provides a complete reference for configuring Waldur Site Agent. It’s a reference, not a tutorial — if this is your first setup, start with the Quickstart instead and come back here once something needs a field this page covers but the Quickstart didn’t.
Required in every offering, regardless of backend: name,
waldur_api_url, waldur_api_token,
waldur_offering_uuid, a *_backend setting for each process you run
(e.g. order_processing_backend), and at least one entry under
backend_components. Everything else on this page — global settings,
event processing, resource management, backend-specific backend_settings, and the ~15 optional
component fields — has a working default and can be added when you actually need it.
The agent uses a YAML configuration file (waldur-site-agent-config.yaml) with the following structure:
sentry_dsn: ""
timezone: "UTC"
offerings:
- name: "Example Offering"
# Offering-specific configuration...
sentry_dsn"https://key@sentry.io/project"elastic_apm_server_url"https://apm-server.example.com:8200"timezone"UTC""UTC", "Europe/Tallinn", "America/New_York"Note: Important when agent and Waldur are deployed in different timezones to prevent billing period mismatches at month boundaries.
Each offering in the offerings array represents a separate service offering.
namewaldur_api_url"http://localhost:8081/api/"waldur_api_tokenwaldur_offering_uuid. This grants the permissions needed for order processing, usage reporting,
membership sync, and event subscriptions.verify_ssltruewaldur_offering_uuidWaldur site agent (Marketplace.Slurm), Script (Marketplace.Script), Basic
(Marketplace.Basic) or OpenStack tenant (OpenStack.Tenant). Point an agent at any other
type — a service desk offering, say — and identity registration is refused with a misleading
400 Object with uuid=... does not exist, even though the offering is there. The agent logs a
warning and carries on syncing without agent telemetry; see
Agent Identity Registration Is Refused.
The set of accepted types is a property of the Waldur server, so it can differ between Waldur
versions.backend_type"slurm", "moab", "mup"Configure which backends to use for different operations:
order_processing_backend: "slurm" # Backend for order processing
membership_sync_backend: "slurm" # Backend for membership syncing
reporting_backend: "slurm" # Backend for usage reporting
username_management_backend: "base" # Backend for username management
Available backends (via entry points):
"slurm": SLURM cluster management"moab": MOAB cluster management"mup": MUP portal integration"waldur": Waldur-to-Waldur federation"base": Basic username management"rancher": Direct Rancher REST API integration (single offering = one cluster)"rancher-kc-crd": CRD-driven Rancher + Keycloak management via the
rancher-keycloak-operator.
Membership-sync only; targets multiple clusters per offering by reading
cluster_id from each Resource’s backend_id. See
plugins/rancher-kc-crd/README.md.Note: If a backend setting is omitted, that process won’t start for the offering.
stomp_enabledfalsestomp_membership_sync_enablednull (inherits stomp_enabled)stomp_enabled is true this defaults to true as well.
Set to false to keep HTTP polling for membership sync while using STOMP for
order processing.true while stomp_enabled is false leaves
membership sync with no runner at all — the polling agent skips it (assuming
STOMP owns it) and the STOMP consumers never start. The agent logs a
MISCONFIGURATION warning on startup if it sees this combination.websocket_use_tlstrueresource_import_enabledfalseThese settings can be used in backend_settings for any backend type.
check_backend_id_uniquenessfalsecheck_all_offeringsfalsecheck_backend_id_uniqueness is enabled, check
uniqueness across all customer offerings instead of only the current offering.backend_id_max_retries50check_backend_id_uniqueness is enabled or the
project_slug account name generation policy is used. Set to a lower value
if collisions are rare or a higher value for large deployments.The offering’s account_name_generation_policy plugin option (set in Waldur,
not in the agent config) controls how the agent derives a resource’s backend ID
(e.g. the SLURM account name):
{allocation_prefix}{resource_slug}. If the offering also defines a
resource_slug_template (e.g. {project_slug}-{counter}), the slug is already
unique and is used as-is, with no extra suffix.project_slug — the agent ignores the resource slug and instead
derives the backend ID from the project slug, appending an incrementing
-{counter} on each collision to disambiguate multiple resources in the same
project.Warning:
account_name_generation_policy: project_slugandresource_slug_templateare two mutually exclusive ways to make backend IDs unique. If you set both, theproject_slugpolicy wins and appends its own counter on top of (and ignoring) your template — producing IDs likeprefix-test-prj-01-2-31. If you use aresource_slug_template, leaveaccount_name_generation_policyunset so the unique slug is used directly.
backend_settings:
default_account: "root" # DefaultAccount= on user associations
# root_account: "root" # Parent of top-tier customer account
# default_account_policy: "common" # common (default) | individual | none
customer_prefix: "hpc_" # Prefix for customer accounts
project_prefix: "hpc_" # Prefix for project accounts
allocation_prefix: "hpc_" # Prefix for allocation accounts
qos_downscaled: "limited" # QoS for downscaled accounts
qos_paused: "paused" # QoS for paused accounts
qos_default: "normal" # Default QoS
enable_user_homedir_account_creation: true # Create home directories
default_homedir_umask: "0077" # Umask for home directories
backend_settings:
default_account: "root"
customer_prefix: "c_"
project_prefix: "p_"
allocation_prefix: "a_"
enable_user_homedir_account_creation: true
backend_settings:
# MUP-specific settings
api_url: "https://mup.example.com/api/"
api_token: "your-api-token"
# Other MUP-specific configuration
The target_api_token user must be a customer owner (can be a non-SP customer
separate from the offering’s service provider) and an ISD identity manager
(is_identity_manager: true with managed_isds set). Access to the target
offering’s users is granted via ISD overlap, not via OFFERING.MANAGER.
backend_settings:
target_api_url: "https://waldur-b.example.com/api/"
target_api_token: "token-for-waldur-b" # customer owner + ISD manager
target_offering_uuid: "offering-uuid-on-waldur-b"
target_customer_uuid: "customer-uuid-on-waldur-b"
user_match_field: "cuid" # cuid | email | username
order_poll_timeout: 300 # Max seconds for sync order completion
order_poll_interval: 5 # Seconds between sync order polls
user_not_found_action: "warn" # warn | fail
identity_bridge_source: "isd:efp" # ISD source for identity bridge
user_resolve_method: "identity_bridge" # identity_bridge | remote_eduteams | user_field
role_mapping: # Optional: translate role names A -> B
PROJECT.ADMIN: PROJECT.ADMIN
PROJECT.MANAGER: PROJECT.MANAGER
end_date_sync_direction: "bidirectional" # a_to_b | b_to_a | bidirectional | disabled
limit_sync_direction: "b_to_a" # b_to_a (default) | disabled -- limit sync
passthrough_attributes: [] # Offering attribute keys forwarded verbatim to B
fetch_consented_users_only: false # Only sync users with data-sharing consent
# Optional: target STOMP for instant async order completion
# Requires target_offering_uuid to be a Marketplace.Slurm offering
target_stomp_enabled: false
Define computing components tracked by the backend:
backend_components:
cpu:
measured_unit: "k-Hours" # Waldur measured unit
unit_factor: 60000 # Conversion factor
accounting_type: "usage" # "usage", "limit", or "one"
label: "CPU" # Display label in Waldur
mem:
limit: 10 # Fixed limit amount
measured_unit: "gb-Hours"
unit_factor: 61440 # 60 * 1024
accounting_type: "usage"
label: "RAM"
measured_unit"k-Hours", "gb-Hours", "EUR"unit_factor60000 for CPU (60 * 1000, converts k-Hours to CPU-minutes)61440 for memory (60 * 1024, converts gb-Hours to MB-minutes)accounting_type"usage", "limit", or "one""usage" for usage-based tracking, "limit" for fixed
allocation caps, "one" for prepaid ONE_TIME billing
(automatically sets is_prepaid: true in Waldur).labellimitdescriptionmin_valuemax_valuemax_available_limitdefault_limitlimit_period"annual", "month", "quarterly", "total"article_codeis_booleanis_prepaidtrue when accounting_type: "one".min_prepaid_durationaccounting_type: "one".max_prepaid_durationaccounting_type: "one".prepaid_duration_stepmin_prepaid_duration) are valid.
For example, min_prepaid_duration: 3 and
prepaid_duration_step: 3 allows 3, 6, 9, 12 months.min_renewal_durationmax_renewal_durationrenewal_duration_stepmin_renewal_duration) are valid.Prepaid billing allows customers to pay upfront for a fixed
capacity over a specified duration.
Prepaid components use accounting_type: "one" which maps
to Waldur’s ONE_TIME billing type and automatically sets
is_prepaid: true.
When a component has accounting_type: "one",
the following flow applies:
end_date. Waldur validates the duration
against component constraints.GrpTRESMins = limit × duration_months × unit_factor
and sets it on the SLURM account. This gives SLURM
a cumulative budget cap for the subscription period.end_date and
recalculates GrpTRESMins with the extended duration.end_date is reached,
Waldur automatically creates a TERMINATE order.SLURM: Supports cpu, mem, and other custom components
MOAB: Only supports deposit component
backend_components:
deposit:
measured_unit: "EUR"
accounting_type: "limit"
label: "Deposit (EUR)"
Override configuration values using environment variables:
WALDUR_SITE_AGENT_ORDER_PROCESS_PERIOD_MINUTES: Order processing period (default: 5)WALDUR_SITE_AGENT_REPORT_PERIOD_MINUTES: Reporting period (default: 30)WALDUR_SITE_AGENT_MEMBERSHIP_SYNC_PERIOD_MINUTES: Membership sync period (default: 5)SENTRY_ENVIRONMENT: Environment name for Sentrysentry_dsn: ""
timezone: "UTC"
offerings:
- name: "HPC SLURM Cluster"
waldur_api_url: "https://waldur.example.com/api/"
waldur_api_token: "your-api-token"
verify_ssl: true
waldur_offering_uuid: "uuid-from-waldur"
order_processing_backend: "slurm"
membership_sync_backend: "slurm"
reporting_backend: "slurm"
username_management_backend: "base"
resource_import_enabled: true
stomp_enabled: false
backend_settings:
default_account: "root"
customer_prefix: "hpc_"
project_prefix: "hpc_"
allocation_prefix: "hpc_"
qos_default: "normal"
enable_user_homedir_account_creation: true
default_homedir_umask: "0077"
backend_components:
cpu:
measured_unit: "k-Hours"
unit_factor: 60000
accounting_type: "usage"
label: "CPU"
mem:
measured_unit: "gb-Hours"
unit_factor: 61440
accounting_type: "usage"
label: "RAM"
offerings:
- name: "MOAB Cluster"
waldur_api_url: "https://waldur.example.com/api/"
waldur_api_token: "your-api-token"
waldur_offering_uuid: "uuid-from-waldur"
order_processing_backend: "moab"
membership_sync_backend: "moab"
reporting_backend: "moab"
username_management_backend: "base"
backend_settings:
default_account: "root"
customer_prefix: "c_"
project_prefix: "p_"
allocation_prefix: "a_"
enable_user_homedir_account_creation: true
backend_components:
deposit:
measured_unit: "EUR"
accounting_type: "limit"
label: "Deposit (EUR)"
offerings:
- name: "Event-Driven SLURM"
# ... basic settings ...
stomp_enabled: true
websocket_use_tls: true
order_processing_backend: "slurm"
reporting_backend: "slurm"
# Note: membership_sync_backend omitted for event processing
offerings:
- name: "Federated HPC Access"
waldur_api_url: "https://waldur-a.example.com/api/"
waldur_api_token: "token-for-waldur-a"
waldur_offering_uuid: "offering-uuid-on-waldur-a"
backend_type: "waldur"
order_processing_backend: "waldur"
membership_sync_backend: "waldur"
reporting_backend: "waldur"
# Optional: STOMP event processing
stomp_enabled: true
websocket_use_tls: true
backend_settings:
target_api_url: "https://waldur-b.example.com/api/"
target_api_token: "token-for-waldur-b" # customer owner + ISD manager
target_offering_uuid: "offering-uuid-on-waldur-b"
target_customer_uuid: "customer-uuid-on-waldur-b"
user_match_field: "cuid"
order_poll_timeout: 300
order_poll_interval: 5
user_not_found_action: "warn"
target_stomp_enabled: true
backend_components:
node_hours:
measured_unit: "Node-hours"
unit_factor: 1.0
accounting_type: "limit"
label: "Node Hours"
target_components:
cpu_k_hours:
factor: 128.0
tb_hours:
measured_unit: "TB-hours"
unit_factor: 1.0
accounting_type: "limit"
label: "TB Hours"
target_components:
gb_k_hours:
factor: 1.0
Validate your configuration:
# Test configuration syntax
waldur_site_diagnostics -c /etc/waldur/waldur-site-agent-config.yaml
# Load components (validates backend configuration)
waldur_site_load_components -c /etc/waldur/waldur-site-agent-config.yaml