OpenMCF logoOpenMCF

Loading...

Cloud Resource Kinds

Every deployment component in OpenMCF has a unique kind name -- AwsS3Bucket, KubernetesPostgres, GcpCloudSql. These kind names are not arbitrary strings. They are entries in the CloudResourceKind enum, a Protocol Buffer enum that serves as the canonical registry of everything OpenMCF can deploy.

The enum currently contains 360+ resource kinds spanning 17 cloud providers.

The CloudResourceKind Enum

The CloudResourceKind enum is defined in cloud_resource_kind.proto. Each entry carries metadata that maps the kind to its provider, API version, and an ID prefix:

KubernetesPostgres = 814 [(kind_meta) = {
    provider: kubernetes
    version: v1
    id_prefix: "k8spg"
}];

AwsS3Bucket = 213 [(kind_meta) = {
    provider: aws
    version: v1
    id_prefix: "s3bkt"
}];

The kind_meta annotation tells the CLI everything it needs: which provider this kind belongs to (determines the IaC module path and provider config type), which API version to use (determines the apiVersion field value), and a short ID prefix for resource identification.

The CloudResourceProvider Enum

Each provider is registered in a separate CloudResourceProvider enum with a group name that forms the apiVersion domain:

enum CloudResourceProvider {
    aws = 12 [(provider_meta) = {
        group: "aws.openmcf.org"
        display_name: "AWS"
    }];
    kubernetes = 19 [(provider_meta) = {
        group: "kubernetes.openmcf.org"
        display_name: "Kubernetes"
    }];
}

The group value directly maps to the apiVersion in manifests. A resource with provider: aws uses apiVersion: aws.openmcf.org/v1. A resource with provider: kubernetes uses apiVersion: kubernetes.openmcf.org/v1.

Provider Breakdown

ProviderComponentsapiVersion DomainExample Kinds
Kubernetes51kubernetes.openmcf.orgKubernetesPostgres, KubernetesRedis, KubernetesDeployment, KubernetesHelmRelease
OpenStack27openstack.openmcf.orgOpenStackInstance, OpenStackNetwork, OpenStackLoadBalancer, OpenStackVolume
AWS25aws.openmcf.orgAwsS3Bucket, AwsEksCluster, AwsRdsInstance, AwsLambda, AwsVpc
GCP19gcp.openmcf.orgGcpCloudSql, GcpGkeCluster, GcpGcsBucket, GcpCloudRun, GcpVpc
Scaleway19scaleway.openmcf.orgScalewayInstance, ScalewayKapsuleCluster, ScalewayRdbInstance, ScalewayVpc
DigitalOcean15digital-ocean.openmcf.orgDigitalOceanDroplet, DigitalOceanKubernetesCluster, DigitalOceanDatabaseCluster
Azure10azure.openmcf.orgAzureAksCluster, AzureKeyVault, AzureStorageAccount, AzureVpc
Civo12civo.openmcf.orgCivoKubernetesCluster, CivoDatabase, CivoComputeInstance, CivoVpc
Cloudflare8cloudflare.openmcf.orgCloudflareDnsZone, CloudflareWorker, CloudflareR2Bucket, CloudflareD1Database
Auth04auth0.openmcf.orgAuth0Client, Auth0Connection, Auth0EventStream, Auth0ResourceServer
OpenFGA3openfga.openmcf.orgOpenFgaStore, OpenFgaAuthorizationModel, OpenFgaRelationshipTuple
Confluent1confluent.openmcf.orgConfluentKafka
MongoDB Atlas1atlas.openmcf.orgMongodbAtlas
Snowflake1snowflake.openmcf.orgSnowflakeDatabase

Naming Convention

Kind names follow a consistent pattern: {Provider}{Resource}.

  • The provider prefix identifies the cloud platform: Aws, Gcp, Azure, Kubernetes, DigitalOcean, Civo, Cloudflare, OpenStack, Scaleway, Auth0, OpenFga
  • The resource suffix describes what it deploys: S3Bucket, Postgres, CloudSql, EksCluster, Vpc

This convention eliminates ambiguity. When you see GcpCloudSql in a manifest, you know immediately that this is a Google Cloud SQL resource managed through the GCP provider, not a generic SQL database abstraction.

Enum Range Allocation

The enum entries are organized by provider range:

RangeProvider
1-49Test/development
50-199Third-party services (Confluent, Atlas, Snowflake)
200-399AWS
400-599Azure
600-799GCP
800-999Kubernetes
1200-1499DigitalOcean
1500-1799Civo
1800-2099Cloudflare
2100-2299Auth0
2300-2499OpenFGA
2500-2799OpenStack
2800-2999Scaleway

Each range has room for growth. New resources for an existing provider are added within its range. New providers receive a new range.

From Kind to Deployment

The kind name is the key that unlocks the entire deployment pipeline. When you run:

openmcf pulumi up -f my-resource.yaml

The CLI reads the kind field from your manifest and uses the CloudResourceKind enum to:

  1. Resolve the provider -- determines which ProviderConfig type to use for credentials
  2. Locate the IaC module -- maps to apis/org/openmcf/provider/{provider}/{kind}/v1/iac/pulumi/ or iac/tf/
  3. Load the protobuf schema -- determines which message type to use for validation
  4. Construct the stack input -- wraps your manifest and provider config into the IaC input contract

This is why the kind name must exactly match the enum entry. kubernetespostgres will not work. Kubernetes-Postgres will not work. It must be KubernetesPostgres, matching the protobuf const validation:

string kind = 2 [(buf.validate.field).string.const = 'KubernetesPostgres'];

Browsing Available Components

The Component Catalog provides detailed documentation for every deployment component, organized by provider. Each catalog page includes the component's configuration fields, deployment behavior, and usage examples.

What's Next

  • Deployment Components -- The anatomy of what each kind maps to
  • Manifests -- How to write manifests using these kind names
  • Validation -- How kind and apiVersion values are validated
  • Component Catalog -- Browse documentation for all 360+ components

Next article

Validation

Validation Infrastructure misconfigurations that reach cloud provider APIs are expensive -- in time, in partial deployments that need cleanup, and sometimes in real cost. OpenMCF validates your manifests at multiple layers before any cloud API call is made, catching the vast majority of errors locally in milliseconds. Three Layers of Validation Layer 1: Schema-Level Validation (Protobuf + buf-validate) Every deployment component's API is defined in Protocol Buffers with validation rules...
Read next article