Skip to main content

Resource Model

Everything you create on DevsPortal — organizations, projects, components, environments, roles — is a Kubernetes custom resource in the openchoreo.dev/v1alpha1 API group, reconciled by the control-plane controllers and surfaced through the REST API and the portal. This page is the map: how the resources nest and flow, grouped by who works with them, with a link to a focused reference page for every core kind.

note

DevsPortal is built on the Control Plane Operator engine. The API group openchoreo.dev/v1alpha1, the CRD kinds, the namespaces, and the occ CLI are the engine's own identifiers and are kept unchanged. This page maps the surface; each linked page gives the shape and a minimal example, and points to the upstream field-level reference for the full spec.

The two halves of the model

DevsPortal draws a clean line between developer resources (what application teams create to ship software) and platform resources (what platform engineers author once to shape the golden paths). Developers express what they need; platform engineers control how it runs.

Ownership and the release chain

This is the spine of the model — what a developer creates, and how it becomes running Kubernetes objects on a data plane. An Organization (a control-plane namespace) holds Projects; a Project holds Components and Resources; each is snapshotted into an immutable release that a binding renders into a target Environment.

Blue = developer resources · amber = the immutable release chain · green = the platform target.

Templates, delivery, and planes

The platform-engineer half: the templates developers pick from (the golden paths), the delivery structure releases move through, and the planes — registered clusters — where work actually runs.

Most platform kinds have a cluster-scoped sibling (ClusterComponentType, ClusterTrait, ClusterResourceType, ClusterWorkflow, ClusterDataPlane, …) for definitions shared across every organization namespace.

Developer resources

The resources application teams work with day to day — directly, via the occ CLI, or through the portal.

KindScopePurposeReference
ProjectNamespacedA bounded context — a team's group of components and its runtime cellProject
ComponentNamespacedA deployable unit (service, web app, job, …); picks a ComponentTypeComponent
WorkloadNamespacedA component's runtime contract — image, endpoints, dependenciesWorkload
ResourceNamespacedA declared dependency on managed infrastructure (DB, cache, queue)Resource
ComponentReleaseNamespacedAn immutable snapshot of a component — the unit you deploy and promoteRelease binding
ResourceReleaseNamespacedAn immutable snapshot of a resourceRelease binding
WorkflowRunNamespacedA single execution of a Workflow (e.g. a CI build)Workflow

Platform resources

The resources platform engineers author to shape the golden paths, the delivery structure, and the plane topology. Cluster… variants are cluster-scoped versions of their namespaced kin.

KindScopePurposeReference
ComponentType / ClusterComponentTypeBothThe template a component picks — workload shape, parameters, rendered resourcesComponent type
Trait / ClusterTraitBothA composable capability attached to a component (storage, autoscaling, …)Trait
ResourceType / ClusterResourceTypeBothThe template a Resource references — how infrastructure is provisioned and exposedResource type
Workflow / ClusterWorkflowBothA CI/build or automation templateWorkflow
EnvironmentNamespacedA delivery stage mapped to a data planeEnvironment
DeploymentPipelineNamespacedThe promotion paths across environmentsDeployment pipeline
ReleaseBindingNamespacedBinds a ComponentRelease to an environment, with overridesRelease binding
ResourceReleaseBindingNamespacedBinds a ResourceRelease to an environmentRelease binding
RenderedReleaseNamespacedThe fully-rendered Kubernetes objects for a releaseRelease binding
DataPlane / ClusterDataPlaneBothRegisters a data plane (where workloads run) and its gatewayPlanes
WorkflowPlane / ClusterWorkflowPlaneBothRegisters a workflow (build) planePlanes
ObservabilityPlane / ClusterObservabilityPlaneBothRegisters an observability planePlanes

Authorization

RBAC for the platform itself — who can do what, where.

KindScopePurposeReference
AuthzRole / ClusterAuthzRoleBothA named set of permitted actionsAuthorization
AuthzRoleBinding / ClusterAuthzRoleBindingBothGrants a role to subjects at a scope, with optional conditionsAuthorization

Observability and infrastructure

Less commonly hand-authored kinds. Their field-level reference lives upstream.

KindScopePurpose
ObservabilityAlertRuleNamespacedAn alerting rule over logs/metrics/traces
ObservabilityAlertsNotificationChannelNamespacedWhere alerts are delivered (email, webhook)
SecretReferenceNamespacedReferences a secret in the configured backend (OpenBao)

For the complete, field-level reference of every kind — spec, status, and examples — see the upstream API docs:

Creating resources in the portal

Most resources are created from the Create… page in the console's left nav, which groups templates into Application Resources (Project, Component, Resource — what developers use) and Platform Resources (Namespace, Environment, Deployment Pipeline, ComponentType, Trait, ResourceType, Workflow — what platform engineers author). Each per-kind page below has a "Create in the portal" section with the exact steps.

The portal Create… page — Application Resources and Platform Resources templates

A few kinds aren't made here: release bindings come from a component's Deploy tab, roles from Settings → Access Control, and the planes are installed by the platform admin.

  • API and CRDs — how the API maps to these resources, and how to authenticate.
  • Concepts — the same model told as prose, with the developer/platform split.
  • Links — the full "read here vs read upstream" map.