Concepts

Virtual Datacenters

Multi-tenant isolation for Proxmox. Per-VDC resource quotas, network separation, and role-based access control let CSPs scope VMs, networks, and storage to teams or customers.

Virtual Datacenters (VDCs) are flex.plane's multi-tenancy primitive. They provide logical isolation between groups of users and resources, each with its own quotas, networks, and access controls. If you're a cloud service provider running Proxmox and need to isolate customer environments, or an enterprise separating workloads by team, VDCs are how you do it. Think of them as the equivalent of VMware vCloud Director organizations or OpenStack projects, without the operational overhead.

Understand the VDC model

A VDC is a logical boundary within a flex.plane tenant. Think of it as a "workspace" that isolates one team or customer from another. Inside a VDC, users see only the resources that belong to that VDC: their VMs, their networks, their members.

Tenant: My Company
Production
64 vCPU / 128 GiB
web-01, web-02, db-01
10.1.0.0/24
alice (Admin), bob
Staging
16 vCPU / 32 GiB
staging-app, staging-db
10.2.0.0/24
alice (Admin), charlie
Customer: ACME
32 vCPU / 64 GiB
acme-web, acme-app
10.3.0.0/24
dave (Admin)

VDCs are the primary isolation mechanism for CSPs serving multiple customers, MSPs managing client environments, and enterprise teams separating workloads by department or project.

Scope resources to a VDC

All resource-level API operations in flex.plane are VDC-aware. The VDC context is passed via the FlexPlane-VDC-ID HTTP header, not as a field in the GraphQL schema. This keeps the API clean and makes scoping transparent.

When the header is present, queries return only resources belonging to that VDC:

# List VMs in the "production" VDC
curl -X POST https://flexplane.example.com/graphql \
  -H "Authorization: Bearer $TOKEN" \
  -H "FlexPlane-VDC-ID: production" \
  -d '{"query": "{ vms { id name status } }"}'

When the header is absent, operations run in tenant-wide context, visible to users with global roles (USER, ADMIN).

In the portal, you select the active VDC from the VDC switcher in the sidebar. Every page and query is automatically scoped to the selected VDC.

Enforce resource quotas

Each VDC can have resource quotas that limit the total vCPUs and memory available. Set quotas when creating the VDC or update them later.

When a user in a VDC tries to create or scale a VM that would exceed the quota, the operation is rejected. This prevents any single VDC from consuming all available resources.

Quotas are enforced by the orchestrator at request time by summing the current resource usage across all VMs in the VDC and comparing against the limits. Since the orchestrator is stateless, this check always reflects the current truth from Proxmox.

Manage access within a VDC

Each VDC has its own member list with two roles:

RoleCapabilities
VDC_USERView and manage VMs, networks, and other resources within the VDC
VDC_ADMINEverything a VDC_USER can do, plus manage members, firewall rules, and VDC settings

To manage members, navigate to the Members page within a VDC. Here you can add new members, change roles, and remove access.

The Members page lists all users in the VDC with their role and email.

Add a member by selecting a user and assigning a role.

VDC membership is stored in Zitadel as project role grants. When a user authenticates, their VDC memberships are included in the OIDC token claims. The orchestrator reads these claims to determine which VDCs the user can access.

Switch between VDCs

A user can be a member of multiple VDCs. In the portal, the VDC switcher in the sidebar lets you move between them. Each VDC has its own view of resources.

Via the API, you switch context by changing the FlexPlane-VDC-ID header. The virtualDatacenters query returns all VDCs the authenticated user has access to, regardless of which VDC is currently selected.

VDCs integrate with other flex.plane concepts: roles and permissions control who can access each VDC, zones and hosts determine where VDC resources are provisioned, and compute profiles standardize the VM sizes available to VDC users.