Skip to main content
This page provides definitions and details for every entity in Ctrlplane. For a gentler introduction, see How It Works.

Entity Overview

System
  ├── Environments (group resources via selectors)
  ├── Deployments (what to deploy)
  │     └── Versions (specific builds)
  └── Resources (deployment targets)

Release Target = Deployment × Environment × Resource

Release = Version deployed to a Release Target
  └── Job (executed by Job Agent)

Policy → Rules that govern releases

System

A System is a logical grouping of related deployments, environments, and resources. Think of it as a workspace for a product or team.
PropertyDescription
nameDisplay name
slugURL-friendly identifier
descriptionWhat this system encompasses
Example: “E-commerce Platform” system containing API, Frontend, and Payment deployments. When to create a System: One per product, platform, or team boundary.

Resource

A Resource is a deployment target—the actual infrastructure where your code runs.
PropertyDescription
nameHuman-readable name
kindType (e.g., Kubernetes/Cluster, AWS/Lambda)
identifierUnique identifier
metadataKey-value pairs for classification
configResource-specific configuration
versionCurrent version/state
Examples: Kubernetes cluster, EC2 instance, Lambda function, VM. How created: Via Resource Providers (auto-sync from K8s, AWS, GCP) or API.
name: prod-us-east-1
kind: Kubernetes/Cluster
identifier: k8s-prod-use1
metadata:
  region: us-east-1
  environment: production
  tier: critical
config:
  server: https://k8s.example.com

Environment

An Environment represents a logical deployment stage (dev, staging, prod) that groups resources using selectors.
PropertyDescription
nameEnvironment name
systemIdParent system
resourceSelectorSelector determining which resources belong
directoryOptional path for hierarchical organization
Key concept: Environments are dynamic. When you add a new resource matching the selector, it automatically joins the environment.
name: Production
resourceSelector: resource.metadata["environment"] == "production"

Deployment

A Deployment represents a service or application you want to deploy.
PropertyDescription
nameDeployment name
slugURL-friendly identifier
descriptionWhat this deployment does
systemIdParent system
resourceSelectorOptional filter for which resources can run this
jobAgentIdWhich job agent executes deployments
jobAgentConfigConfiguration passed to the job agent
Examples: “API Service”, “Frontend App”, “Payment Processor”.

Version

A Version is a specific build or release of a deployment, typically created by your CI pipeline.
PropertyDescription
deploymentIdParent deployment
tagVersion identifier (e.g., v1.2.3, sha-abc123)
nameOptional human-readable name
statusbuilding, ready, or failed
metadataArbitrary metadata (git commit, build number)
configVersion-specific configuration
jobAgentConfigOverrides deployment’s job agent config
Status meanings:
  • building — Still being built, won’t be deployed
  • ready — Ready for deployment (default for policies)
  • failed — Build failed, won’t be deployed
# CI creates a version after building
curl -X POST ".../deployments/{id}/versions" \
  -d '{
    "tag": "v1.2.3",
    "status": "ready",
    "metadata": {"commit": "abc123"}
  }'

Release Target

A Release Target is the combination of a Deployment, Environment, and Resource. It represents a specific place where a deployment can be released.
Release Target = Deployment × Environment × Resource
Example:
  • Deployment: “API Service”
  • Environment: “Production”
  • Resource: “us-east-1 cluster”
  • Release Target: “API Service on Production/us-east-1”
Automatic creation: Release targets are computed from the intersection of:
  1. Environment’s resource selector → which resources
  2. Deployment’s resource selector (if any) → further filtering

Release

A Release is an instance of deploying a specific Version to a Release Target.
PropertyDescription
versionIdWhich version to deploy
deploymentIdWhich deployment
environmentIdWhich environment
resourceIdWhich resource
statusCurrent release status
jobIdThe job executing this release
Release lifecycle:
  1. pending — Waiting for policies (approval, progression)
  2. approved — Policies passed, job created
  3. active — Job is executing
  4. completed — Job finished successfully
  5. failed — Job failed
  6. cancelled — Release was cancelled

Job

A Job is the actual deployment task executed by a Job Agent.
PropertyDescription
releaseIdThe release this job deploys
jobAgentIdWhich agent executes this job
statuspending, in_progress, completed, failed
externalIdExternal identifier (e.g., GitHub run ID)
messageStatus message or error details
Job lifecycle:
  1. Ctrlplane creates job for approved release
  2. Job agent polls and receives the job
  3. Agent acknowledges and executes
  4. Agent updates status as it progresses
  5. Agent marks completed or failed

Job Agent

A Job Agent is the executor that performs deployments. It bridges Ctrlplane to your infrastructure.
Agent TypeWhat It Does
GitHub ActionsTriggers workflow dispatch
ArgoCDCreates/syncs ArgoCD Applications
Terraform CloudCreates workspaces, triggers runs
KubernetesApplies manifests directly

Policy

A Policy defines rules governing when and how deployments happen.
ComponentDescription
namePolicy name
selectorsWhich release targets this policy applies to
rulesThe specific rules to enforce
Policy types:
TypeDescription
ApprovalRequires manual sign-off
Environment ProgressionWait for another environment to succeed first
Gradual RolloutDeploy to targets sequentially with delays
Deployment WindowOnly deploy during certain hours
Version SelectorFilter which versions can deploy
Version CooldownMinimum time between deployments
Deployment DependencyWait for another deployment to complete
VerificationCheck metrics after deployment
Policy evaluation: When a release target needs deployment:
  1. Find all policies matching the target
  2. Evaluate each rule
  3. All pass → create job
  4. Any requires action → release is pending
  5. Any denies → release is blocked

Selector

Selectors are query expressions used to match resources, environments, or deployments.
# Match resources in production
resource.metadata["environment"] == "production"

# Match critical deployments in any region
deployment.metadata["tier"] == "critical" &&
  resource.metadata["region"] in ["us-east-1", "eu-west-1"]
Used in:
  • Environment resource selectors
  • Deployment resource selectors
  • Policy target selectors
See Selectors for full syntax.

Variables

Variables provide dynamic configuration for deployments.
TypeDescription
Deployment VariablesDefined per deployment, vary by environment
Resource VariablesDefined on resources
{
  "deploymentVariable": "replicas",
  "values": [
    { "environmentId": "dev", "value": "1" },
    { "environmentId": "prod", "value": "3" }
  ]
}

Quick Reference Table

EntityWhat It Is
SystemWorkspace grouping deployments and environments
ResourceDeployment target (cluster, VM, function)
EnvironmentLogical stage grouping resources via selectors
DeploymentService/app to deploy
VersionSpecific build of a deployment
Release TargetDeployment × Environment × Resource
ReleaseVersion being deployed to a release target
JobExecution task sent to a job agent
Job AgentExecutor (ArgoCD, GitHub Actions, etc.)
PolicyRules controlling deployments
SelectorQuery expression matching entities

Next Steps