Skip to content

API Reference#

Tenant Operator#

Packages#

tenantoperator.stakater.com/v1alpha1#

Package v1alpha1 contains API Schema definitions for the tenantoperator v1alpha1 API group

Resource Types#

AppProjectConfig#

AppProject contains details about argocd AppProjects

Appears in: - ArgoCDConfig

Field Description Default Validation
sourceRepos string array SourceRepos contains list of repository URLs which can be used for deployment
namespaceResourceBlacklist GroupKind array NamespaceResourceBlacklist contains list of blacklisted namespace level resources
clusterResourceWhitelist GroupKind array ClusterResourceWhitelist contains list of whitelisted cluster level resources
ArgoCD#

Appears in: - IntegrationConfigSpec

Field Description Default Validation
namespace Namespace Namespace should contain the name of the namespace in which to deploy ArgoCD AppProjects Required: {}
namespaceResourceBlacklist GroupKind array NamespaceResourceBlacklist contains list of blacklisted namespace level resources
clusterResourceWhitelist GroupKind array ClusterResourceWhitelist contains list of whitelisted cluster level resources
ArgoCDConfig#

ArgoCDConfig contains details about source repositories and AppProjects

Appears in: - ExtensionsSpec

Field Description Default Validation
appProject AppProjectConfig AppProject contains details about argocd AppProjects
onDeletePurgeAppProject boolean OnDeletePurgeAppProject is used to enable or disable the AppProject purge feature Optional: {}
ArgoCDConfigStatus#

ArgoCDStatus defines the observed state of the ArgoCD extension

Appears in: - ExtensionsStatus

Field Description Default Validation
appProjectState boolean
argoNamespace string
conditions Condition array
Endpoint#

Endpoint is used to connect to an application

Appears in: - ManagedApp

Field Description Default Validation
url string
secretReference SecretReference
Extensions#

Extensions is the Schema for the extensions API

Field Description Default Validation
apiVersion string tenantoperator.stakater.com/v1alpha1
kind string Extensions
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
spec ExtensionsSpec
status ExtensionsStatus
ExtensionsSpec#

ExtensionsSpec defines the desired state of Extensions

Appears in: - Extensions

Field Description Default Validation
tenantName string TenantName is the name of the tenant to which the extension belongs Required: {}
argoCD ArgoCDConfig ArgoCDConfig defines ArgoCD configurations for the tenant
ExtensionsStatus#

ExtensionsStatus defines the observed state of Extensions

Appears in: - Extensions

Field Description Default Validation
argocd ArgoCDConfigStatus
Ingress#

Appears in: - IngressConfig

Field Description Default Validation
host string Host specifies the hostname for the ingress
tlsSecretName string TLSSecretName is the name of the secret containing the TLS certificate Optional: {}
IngressConfig#

Appears in: - Provision

Field Description Default Validation
keycloak Ingress
console Ingress
gateway Ingress
ingressClassName string ingressClassName is the ingress class name Optional: {}
IntegrationConfig#

IntegrationConfig is the Schema for the integrationConfigs API

Field Description Default Validation
apiVersion string tenantoperator.stakater.com/v1alpha1
kind string IntegrationConfig
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
spec IntegrationConfigSpec
status IntegrationConfigStatus
IntegrationConfigSpec#

IntegrationConfigSpec defines the desired state of IntegrationConfig

Appears in: - IntegrationConfig

Field Description Default Validation
openshift OpenshiftConfig Openshift is the config containing labels and annotations
tenantRoles TenantRoles TenantRoles sets the default Owner/Editor/Viewer and/or custom roles for each tenant { default:map[editor:map[clusterRoles:[edit]] owner:map[clusterRoles:[admin]] viewer:map[clusterRoles:[view]]] }
nexus ManagedNexus Nexus is the config for managed Nexus.
rhsso ManagedRHSSO Nexus is the config for managed RHSSO.
vault ManagedVault Nexus is the config for managed Vault.
argocd ArgoCD ArgoCD contains details about argocd Applications and AppProjects
provision Provision Provision is used to enable/disable the provision feature such as mto-console and showback { console:true showback:true }
IntegrationConfigStatus#

IntegrationConfigStatus defines the observed state of IntegrationConfig

Appears in: - IntegrationConfig

Field Description Default Validation
roleBindingsToDelete object (keys:string, values:string array) RoleBindingsToDelete contains all of the rolebindings that have been whenever the roles cache config map gets updated
ManagedApp#

ManagedApp is the config for a managed application.

Appears in: - ManagedNexus - ManagedRHSSO

Field Description Default Validation
enabled boolean false
endpoint Endpoint
sso SSO
ManagedNexus#

ManagedNexus is the config for Nexus.

Appears in: - IntegrationConfigSpec

Field Description Default Validation
ManagedApp ManagedApp
ManagedRHSSO#

ManagedRHSSO is the config for RedHat Single Sign-On.

Appears in: - IntegrationConfigSpec

Field Description Default Validation
ManagedApp ManagedApp
realm string
ManagedVault#

ManagedVault is the config for Vault.

Appears in: - IntegrationConfigSpec

Field Description Default Validation
enabled boolean false
address string
accessorPath string
roleName string
sso VaultSSO
MatchNamespaceLabel#

Appears in: - TenantRoles

Field Description Default Validation
labelSelector LabelSelector LabelSelector is the label selector that will be used to find namespaces to apply roles to
UserRoles UserRoles Custom roles applied to the namespaces selected by the label selector Required: {}
Metadata#

Appears in: - OpenshiftConfig

Field Description Default Validation
labels object (keys:string, values:string)
annotations object (keys:string, values:string)
NamespaceAccessPolicy#

NamespaceAccessPolicy contains access and deny policies for namespaces

Appears in: - OpenshiftConfig

Field Description Default Validation
deny Policy
OpenshiftConfig#

OpenshiftConfig is the config containing labels and annotations

Appears in: - IntegrationConfigSpec

Field Description Default Validation
project Metadata Project contains labels and annotations applied to the namespace
group Metadata Group contains labels and annotations applied to the group
sandbox Metadata Sandbox contains labels and annotations applied to the sandbox
privilegedNamespaces string array PrivilegedNamespaces contains list of privileged namespaces regex
privilegedServiceAccounts string array PrivilegedServiceAccounts contains list of privileged serviceAccounts regex
namespaceAccessPolicy NamespaceAccessPolicy NamespaceAccessPolicy contains groups/users which are denied access over managed namespaces
clusterAdminGroups string array ClusterAdminGroups contains groups which are admins of tenants
Policy#

Policy contains policies relating to privilegedNamespaces

Appears in: - NamespaceAccessPolicy

Field Description Default Validation
privilegedNamespaces PrivilegedNamespaces
PolicyMembers#

Appears in: - PrivilegedNamespaces

Field Description Default Validation
users string array
groups string array
PrivilegedNamespaces#

PrivilegedNamespaces contains groups/users

Appears in: - Policy

Field Description Default Validation
users string array
groups string array
Provision#

Appears in: - IntegrationConfigSpec

Field Description Default Validation
console boolean Console is used to enable/disable the mto-console true Optional: {}
showback boolean Showback is used to enable/disable the showback feature true Optional: {}
ingress IngressConfig the following are used to configure the ingress for the provisioned services
trustedRootCert string TrustedRootCert is the name of the secret containing the trusted root CA certificate
This certificate is used for SSL/TLS communication with other services
Optional: {}
SSO#

SSO contains details for single sign on

Appears in: - ManagedApp

Field Description Default Validation
clientName string
accessorID string
SecretReference#

SecretReference contains details of a secret

Appears in: - Endpoint

Field Description Default Validation
name string
namespace string
TenantRoles#

TenantRoles is used to configure custom RBAC rules for tenants

Appears in: - IntegrationConfigSpec

Field Description Default Validation
default UserRoles DefaultRoles contains the default roles that will be applied to each tenant. Required field. { editor:map[clusterRoles:[edit]] owner:map[clusterRoles:[admin]] viewer:map[clusterRoles:[view]] }
custom MatchNamespaceLabel array CustomRoles is an optional Label selector method to apply roles to specific namespaces.
These roles will override the existing Default Roles
UserRoles#

UserRoles is the list of roles applied to owners/editors/viewers

Appears in: - MatchNamespaceLabel - TenantRoles

VaultSSO#

Appears in: - ManagedVault

Field Description Default Validation
clientName string

tenantoperator.stakater.com/v1beta1#

Package v1beta1 contains API Schema definitions for the tenantoperator v1beta1 API group

Resource Types#

AccessControl#

AccessControl defines the access control settings for IntegrationConfig

Appears in: - IntegrationConfigSpec

Field Description Default Validation
rbac RBAC { tenantRoles:map[default:map[editor:map[clusterRoles:[edit]] owner:map[clusterRoles:[admin]] viewer:map[clusterRoles:[view]]]] }
namespaceAccessPolicy NamespaceAccessPolicy
privileged Privileged
ArgoCDIntegration#

ArgoCD defines the ArgoCD integration settings

Appears in: - Integrations

Field Description Default Validation
clusterResourceWhitelist GroupKind array ClusterResourceWhitelist contains list of whitelisted cluster level resources
namespaceResourceBlacklist GroupKind array NamespaceResourceWhitelist contains list of whitelisted namespace level resources
namespace Namespace Namespace should contain the name of the namespace in which to deploy ArgoCD AppProjects Required: {}
Components#

Components defines the components settings for IntegrationConfig

Appears in: - IntegrationConfigSpec

Field Description Default Validation
console boolean false
showback boolean false
showbackOpts ShowbackOpts ShowbackOpts is used to configure the showback for the Component
ShowbackOpts is deprecated and will be removed in a future release. See docs.stakater.com/mto/latest for more details on the replacement for showback configuration.
ingress IngressConfig the following are used to configure the ingress for the Component's services
prometheus PrometheusComponentConfig Defines configuration for prometheus component Optional: {}
opencost OpenCostComponentConfig Defines configuration for opencost component Optional: {}
postgres PostgresComponentConfig Defines configuration for postgres component Optional: {}
dex DexComponentConfig Defines configuration for dex component Optional: {}
finopsOperator FinOpsOperator Defines configuration for finops operator component Optional: {}
dexConfigOperator DexConfigOperatorConfig Defines configuration for dex config operator component Optional: {}
Custom#

Appears in: - ShowbackOpts

Field Description Default Validation
CPU string
spotCPU string
RAM string
spotRAM string
GPU string
storage string
zoneNetworkEgress string
regionNetworkEgress string
internetNetworkEgress string
provider string
description string
projectId string
awsSpotDataBucket string
awsSpotDataRegion string
awsSpotDataPrefix string
spotLabel string
spotLabelValue string
Deny#

Deny defines the deny settings for namespace access policy

Appears in: - NamespaceAccessPolicy

Field Description Default Validation
privilegedNamespaces PrivilegedNamespaces
DependencyMode#

Underlying type: string

DependencyMode describes how a dependency is provided

Validation: - Enum: [Managed External]

Appears in: - DexComponentConfig - OpenCostComponentConfig - PostgresComponentConfig - PrometheusComponentConfig

Field Description
Managed DependencyModeManaged indicates the operator should provision and manage the dependency
External DependencyModeExternal indicates the dependency is supplied by the user
DexComponentConfig#

Appears in: - Components

Field Description Default Validation
mode DependencyMode Managed Enum: [Managed External]
values RawExtension Values allows customization of the Prometheus Helm chart values when mode is Managed
external DexExternalConfig External defines information required when using an externally managed Dex deployment
DexConfigOperatorConfig#

Appears in: - Components

Field Description Default Validation
values RawExtension Values allows customization of the Prometheus Helm chart values
DexExternalConfig#

Appears in: - DexComponentConfig

Field Description Default Validation
issuer string Issuer is the URL of the Dex issuer, used for OIDC discovery
ExternalServerConfig#

ExternalServerConfig stores references to an external Prometheus deployment

Appears in: - OpenCostComponentConfig - PrometheusComponentConfig

Field Description Default Validation
serverURL string ServerURL is the base URL that the operator should use for query API access
FinOpsOperator#

FinOpsOperator defines the configuration for FinOps Operator components See https://docs.stakater.com/finops-operator/latest for more details

Appears in: - Components

Field Description Default Validation
values RawExtension Values allows customization of the FinOps Operator Helm chart values when mode is Managed Optional: {}
Ingress#

Appears in: - IngressConfig

Field Description Default Validation
host string Host specifies the hostname for the ingress (legacy per-component mode).
tlsSecretName string TLSSecretName is the name of the secret containing the TLS certificate. Optional: {}
path string Path is the path prefix under the shared host in consolidated mode.
Defaults: Console "/", Gateway "/gateway", Dex "/dex", FinOps "/finops".
Optional: {}
IngressConfig#

Appears in: - Components

Field Description Default Validation
host string Host, when set, enables consolidated mode: all components are served under
this single shared hostname via distinct path prefixes. When empty, the
per-component Console/Gateway/Dex/FinOpsGateway hosts are used (legacy).
Optional: {}
tlsSecretName string TLSSecretName is the TLS secret for the shared host (consolidated mode). Optional: {}
console Ingress
gateway Ingress
dex Ingress
finopsGateway Ingress
ingressClassName string ingressClassName is the ingress class name Optional: {}
IntegrationConfig#

IntegrationConfig is the Schema for the integrationconfigs API

Field Description Default Validation
apiVersion string tenantoperator.stakater.com/v1beta1
kind string IntegrationConfig
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
spec IntegrationConfigSpec
status IntegrationConfigStatus
IntegrationConfigSpec#

IntegrationConfigSpec defines the desired state of IntegrationConfig

Appears in: - IntegrationConfig

Field Description Default Validation
accessControl AccessControl { rbac:map[tenantRoles:map[default:map[editor:map[clusterRoles:[edit]] owner:map[clusterRoles:[admin]] viewer:map[clusterRoles:[view]]]]] }
components Components
metadata Metadata Refer to Kubernetes API documentation for fields of metadata.
integrations Integrations
tenantPolicies TenantPolicies
IntegrationConfigStatus#

IntegrationConfigStatus defines the observed state of IntegrationConfig

Appears in: - IntegrationConfig

Field Description Default Validation
roleBindingsToDelete object (keys:string, values:string array)
conditions Condition array Status conditions
Integrations#

Integrations defines the integration settings for IntegrationConfig

Appears in: - IntegrationConfigSpec

Field Description Default Validation
argocd ArgoCDIntegration
vault VaultIntegration
MatchNamespaceLabel#

Appears in: - TenantRoles

Field Description Default Validation
labelSelector LabelSelector LabelSelector is the label selector that will be used to find namespaces to apply roles to
UserRoles UserRoles Custom roles applied to the namespaces selected by the label selector
Metadata#

Metadata defines the metadata settings for IntegrationConfig

Appears in: - IntegrationConfigSpec

Field Description Default Validation
groups MetadataType Groups contains labels and annotations applied to the groups
namespaces MetadataType Namespaces contains labels and annotations applied to the namespaces
sandboxes MetadataType Sandboxes contains labels and annotations applied to the sandbox
MetadataType#

Appears in: - Metadata

Field Description Default Validation
labels object (keys:string, values:string)
annotations object (keys:string, values:string)
NamespaceAccessPolicy#

NamespaceAccessPolicy defines the namespace access policy settings

Appears in: - AccessControl

Field Description Default Validation
deny Deny
OpenCostComponentConfig#

OpenCostComponentConfig describes how OpenCost is configured for showback features

Appears in: - Components

Field Description Default Validation
mode DependencyMode Managed Enum: [Managed External]
values RawExtension Values allows customization of the OpenCost Helm chart values when mode is Managed
external ExternalServerConfig External defines information required when using an externally managed OpenCost deployment
PolicyRule#

PolicyRule defines the policy rule

Appears in: - VaultPolicy

Field Description Default Validation
path string Path is the path to the resource
capabilities string array Capabilities is the list of capabilities
PostgresComponentConfig#

PostgresComponentConfig describes how Postgres is configured for application persistence

Appears in: - Components

Field Description Default Validation
mode DependencyMode Managed Enum: [Managed External]
values RawExtension Values allows customization of the Postgres Helm chart values when mode is Managed
external PostgresExternalConfig External defines information required when using an externally managed Postgres instance
PostgresExternalConfig#

PostgresExternalConfig stores references to an external Postgres instance

Appears in: - PostgresComponentConfig

Field Description Default Validation
secretRef SecretRef SecretRef references a secret containing a DSN or discrete connection details
Privileged#

Privileged defines the privileged settings for IntegrationConfig

Appears in: - AccessControl

Field Description Default Validation
namespaces string array
serviceAccounts string array
users string array
groups string array
PrivilegedNamespaces#

PrivilegedNamespaces defines the list of privileged namespaces and associated users/groups

Appears in: - Deny

Field Description Default Validation
users string array
groups string array
PrometheusComponentConfig#

PrometheusComponentConfig describes how Prometheus is configured for tenant operations

Appears in: - Components

Field Description Default Validation
mode DependencyMode Managed Enum: [Managed External]
values RawExtension Values allows customization of the Prometheus Helm chart values when mode is Managed
external ExternalServerConfig External defines information required when using an externally managed Prometheus
Quota#

Quota is the Schema for the quotas API

Field Description Default Validation
apiVersion string tenantoperator.stakater.com/v1beta1
kind string Quota
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
spec QuotaSpec
status QuotaStatus
QuotaSpec#

Appears in: - Quota

Field Description Default Validation
resourcequota ResourceQuotaSpec ResourceQuota defines the allocated ResourceQuota for the tenant
limitrange LimitRangeSpec LimitRange defines the allocated LimitRange for the namespace inside tenant Optional: {}
QuotaStatus#

QuotaStatus defines the observed state of Quota

Appears in: - Quota

Field Description Default Validation
TenantQuotaStatus TenantQuotaStatus
conditions Condition array Status conditions for quota
RBAC#

RBAC defines the RBAC settings for IntegrationConfig

Appears in: - AccessControl

Field Description Default Validation
tenantRoles TenantRoles TenantRoles sets the default Owner/Editor/Viewer and/or custom roles for each tenant { default:map[editor:map[clusterRoles:[edit]] owner:map[clusterRoles:[admin]] viewer:map[clusterRoles:[view]]] }
SecretRef#

SecretReference defines the reference to a secret

Appears in: - PostgresExternalConfig - ShowbackOpts - VaultAccessInfo

Field Description Default Validation
name string
namespace string
ShowbackOpts#

Appears in: - Components

Field Description Default Validation
custom Custom Custom is used to define custom pricing for opencost. If not provided, the default pricing will be used.
Custom field is deprecated and will be removed in a future release. Please use the spec.components.finopsOperator.priceBook field instead to configure custom pricing for OpenCost.
Optional: {}
cloudPricingSecretRef SecretRef CloudPricingSecretRef is the reference to the secret containing the opeconst config for AWS/Azure.
This field is deprecated and will be removed in a future release. Please use the spec.components.opencost.cloudIntegrationSecret field instead to configure the cloud integration for OpenCost.
Optional: {}
retentionPeriod string RetentionPeriod defines the retention period of prometheus server
This field is deprecated and will be removed in a future release. Please use the spec.components.prometheus.values.server.retention field instead to configure the retention period for Prometheus.
7d
TenantPolicies#

Appears in: - IntegrationConfigSpec

Field Description Default Validation
network TenantPoliciesNetwork
TenantPoliciesNetwork#

Appears in: - TenantPolicies

Field Description Default Validation
disableIntraTenantNetworking boolean
disableNodePortServices boolean
disableHostPorts boolean
TenantQuotaStatus#

Appears in: - QuotaStatus

Field Description Default Validation
tenants object (keys:string, values:TenantResourceStatus)
TenantResourceStatus#

Appears in: - TenantQuotaStatus

Field Description Default Validation
status ResourceQuotaStatus
TenantRoles#

Appears in: - RBAC

Field Description Default Validation
default UserRoles DefaultRoles contains the default roles that will be applied to each tenant. Required field. { editor:map[clusterRoles:[edit]] owner:map[clusterRoles:[admin]] viewer:map[clusterRoles:[view]] }
custom MatchNamespaceLabel array CustomRoles is an optional Label selector method to apply roles to specific namespaces.
These roles will override the existing Default Roles
UserRoles#

Appears in: - MatchNamespaceLabel - TenantRoles

VaultAccessInfo#

VaultAccessInfo defines the access information for Vault

Appears in: - VaultIntegration

Field Description Default Validation
accessorPath string
address string
roleName string
secretRef SecretRef
VaultConfig#

VaultConfig defines the Vault configuration

Appears in: - VaultIntegration

Field Description Default Validation
ssoClient string
commonSecretsPath string CommonSecretsPath defines a secrets path in Vault which is shared by all tenants Optional: {}
VaultIntegration#

Vault defines the Vault integration settings

Appears in: - Integrations

Field Description Default Validation
enabled boolean false
authMethod string AuthMethod defines the authentication method for Vault, Possible values are: "kubernetes", "token" kubernetes Enum: [kubernetes token]
accessInfo VaultAccessInfo AccessInfo defines the access information for Vault
config VaultConfig Config defines the Vault configuration
policies VaultPolicy array Policies defines custom Vault policies Optional: {}
VaultPolicy#

VaultPolicy defines the Vault policy details

Appears in: - VaultIntegration

Field Description Default Validation
name string Name is the name of the policy
rules PolicyRule array Rules is the policy rules
tenantRoles string array TenantRoles is the list of tenant roles to apply the policy to

tenantoperator.stakater.com/v1beta3#

Package v1beta3 contains API Schema definitions for the tenantoperator v1beta3 API group

Resource Types#

AccessControl#

Appears in: - TenantSpec

Field Description Default Validation
owners Members owners represents the list of owners
editors Members editors represents the list of editors
viewers Members viewers represents the list of viewers
HostValidationConfig#

Appears in: - TenantSpec

Field Description Default Validation
denyWildcards boolean DenyWildcards indicates whether wildcard host names are allowed or not
If true, wildcard host names are not allowed
If false, wildcard host names are allowed
false Optional: {}
Type: boolean
allowedRegex string AllowedRegex is a regular expression that defines the allowed host names
If specified, host names must match this regex to be allowed
Optional: {}
Type: string
allowed string array Allowed is a list of allowed host names
If specified, host names must be in this list to be allowed
Optional: {}
Type: array
IngressClassEntry#

Appears in: - IngressClassStatus

Field Description Default Validation
name string
IngressClassStatus#

Appears in: - TenantStatus

Field Description Default Validation
available IngressClassEntry array
Metadata#

Appears in: - Namespaces

Field Description Default Validation
common Metadata commonmetadata applies given labels and annotations
sandbox Metadata sandboxmetadata applies given labels and annotation across sandbox namespaces
specific MetadataOnNamespaces array specificmetadata applies given labels and annotation across specific namespaces
Namespaces#

Appears in: - TenantSpec

Field Description Default Validation
sandboxes Sandboxes sandboxes is used to enable or disable the sandbox feature
withoutTenantPrefix Namespace array WithoutTenantPrefix will create new namespaces mentioned in it
withTenantPrefix Namespace array WithTenantPrefix will create new namespaces mentioned in it and add a prefix of the tenant name to them
onDeletePurgeNamespaces boolean ondeletepurgenamespaces is used to enable or disable the namespace purge feature false
metadata Metadata Refer to Kubernetes API documentation for fields of metadata.
NamespacesStatus#

Appears in: - TenantStatus

Field Description Default Validation
commonStatus Metadata CommonStatus stores the previous state of labels and annotation applied across all tenant namespaces, if mentioned in spec
sandboxStatus Metadata SandboxStatus stores the previous state of labels and annotation applied across all sandbox namespaces, if mentioned in spec
specificStatus MetadataOnNamespaces array SpecificStatus stores the previous state of labels and annotations applied across specific tenant namespaces, if mentioned in spec
PodPriorityClassEntry#

Appears in: - PodPriorityClassStatus

Field Description Default Validation
name string
PodPriorityClassStatus#

Appears in: - TenantStatus

Field Description Default Validation
available PodPriorityClassEntry array
QuotaEntry#

Appears in: - QuotaStatus

Field Description Default Validation
name string
QuotaStatus#

Appears in: - TenantStatus

Field Description Default Validation
available QuotaEntry array
Sandboxes#

Appears in: - Namespaces

Field Description Default Validation
enabled boolean enabled is used to enable or disable the sandbox feature
private boolean private is used to enable or disable the private sandbox feature
StorageClassEntry#

Appears in: - StorageStatus

Field Description Default Validation
name string
StorageStatus#

Appears in: - TenantStatus

Field Description Default Validation
available StorageClassEntry array
Tenant#

Tenant is the Schema for the tenants API

Field Description Default Validation
apiVersion string tenantoperator.stakater.com/v1beta3
kind string Tenant
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
spec TenantSpec
status TenantStatus
TenantSpec#

TenantSpec defines the desired state of Tenant

Appears in: - Tenant

Field Description Default Validation
quota string Quota field is used to link relevant Tenant Operator Quota CR Required: {}
accessControl AccessControl AccessControl defines the list of admins, editors and viewers
namespaces Namespaces namespaces defines namespaces and their metadata
desc string Desc can contains description about the tenant
hostValidationConfig HostValidationConfig HostValidationConfig defines the allowed ingress and route host names for the tenant Optional: {}
TenantStatus#

TenantStatus defines the observed state of Tenant

Appears in: - Tenant

Field Description Default Validation
namespaces NamespacesStatus namespacesStatus stores the previous state of namespaces, if mentioned in spec
sandboxState boolean SandboxState stores the previous state of sandbox field, if mentioned in spec
deployedSandboxes object (keys:string, values:string) DeployedSandboxes has the map for created sandbox environments so they can be synced with spec
deployedNamespaces string array DeployedNamespaces has the string for created namespaces so they can be synced with spec
storageClasses StorageStatus StorageClasses is the status for currently available StorageClasses for the tenant
ingressClasses IngressClassStatus IngressClasses is the status for currently available IngressClasses for the tenant
podPriorityClasses PodPriorityClassStatus PodPriorityClasses is the status for currently available PodPriorityClasses for the tenant
quota QuotaStatus Quota is the status for the tenant's Quota
conditions Condition array Status conditions for tenant

Template Operator#

Packages#

templates.stakater.com/v1alpha1#

Package v1alpha1 contains API Schema definitions for the templates.stakater.com v1alpha1 API group

Resource Types#

ClusterTemplateInstance#

ClusterTemplateInstance is the Schema for the clustertemplateinstances API

Field Description Default Validation
apiVersion string templates.stakater.com/v1alpha1
kind string ClusterTemplateInstance
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
spec ClusterTemplateInstanceSpec
status ClusterTemplateInstanceStatus
ClusterTemplateInstanceSpec#

ClusterTemplateInstanceSpec defines the desired state of ClusterTemplateInstance

Appears in: - ClusterTemplateInstance

Field Description Default Validation
template string Template is used to tell what to deploy in matched namespaces
selector LabelSelector Selector is used to filter namespaces where template needs to be deployed
sync boolean Sync is used to keep deployed instance and template in sync
parameters TemplateInstanceParameter array Parameters hold the values of the defined parameters in the template Optional: {}
TemplateInstanceParameter#

Appears in: - ClusterTemplateInstanceSpec - TemplateInstanceSpec

Field Description Default Validation
name string Name is the name of the parameter to set
value string Value is the value of the parameter to set
ClusterTemplateInstanceStatus#

ClusterTemplateInstanceStatus defines the observed state of ClusterTemplateInstance

Appears in: - ClusterTemplateInstance

Field Description Default Validation
conditions Condition array Status conditions Optional: {}
deployedNamespaces object (keys:string, values:DeployedNamespaceState) DeployedNamespaces is a list of namespaces where template has been deployed along with its state. Optional: {}
mappedSecrets object (keys:string, values:map[string]MappedResourcesState) MappedSecrets is a list of secrets which have been mapped along with its state. Optional: {}
mappedConfigmaps object (keys:string, values:map[string]MappedResourcesState) MappedConfigmaps is a list of configmaps which have been mapped along with its state. Optional: {}
templateManifestsHash string TemplateManifestsHash is used to ignore false-positive template.manifests update events Optional: {}
templateResourceMappingHash string TemplateResourceMappingHash is used to ignore false-positive template.resourceMappings update events Optional: {}
namespaceCount integer NamespaceCount tells the number of namespaces CTI matches Optional: {}
Template#

Template is the Schema for the templates API

Field Description Default Validation
apiVersion string templates.stakater.com/v1alpha1
kind string Template
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
resources TemplateResources Optional: {}
spec TemplateSpec
status TemplateStatus Optional: {}
parameters TemplateParameter array Parameters can be used to replace certain parts of the template. A parameter is referenced
by this format: ${NAME}, to parse the value as an expression write ${{NAME}} instead. Besides the
parameters defined here, the following predefined parameters can be used:
- ${NAMESPACE}: the namespace where the template instance was created
- ${TENANT}: the tenant name of the tenant that owns the namespace (if any)
Optional: {}
TemplateResources#

TemplateResources defines a templates resources

Appears in: - Template

Field Description Default Validation
manifests EmbeddedResource array manifest represents kubernetes resources that will be deployed into the target namespace Optional: {}
helm HelmConfiguration helm defines the configuration for a helm deployment Optional: {}
resourceMappings ResourceMapping ResourceMappings defines the secrets/configmaps which will be mapped into the target namespaces Optional: {}
gotemplate string gotemplate is a Go template with Sprig functions support which will be rendered to generate Kubernetes resources. Optional: {}
EmbeddedResource#

EmbeddedResource holds a kubernetes resource

Appears in: - TemplateResources

HelmConfiguration#

HelmConfiguration holds the helm configuration

Appears in: - TemplateResources

Field Description Default Validation
releaseName string The helm release name. If omitted the template name will be used Optional: {}
setValues HelmSetValue array Values in the form of name=value that will be passed to the helm command during
helm template
Optional: {}
values string The additional helm values to use. Expected block string Optional: {}
chart HelmChart Tells us where to find the helm chart to deploy
HelmSetValue#

HelmSetValue defines a name=value pair that will be passed to helm template

Appears in: - HelmConfiguration

Field Description Default Validation
name string The path of the value to set
value string The value to set
forceString boolean ForceString specifies if the parameter --set or --set-string should be used Optional: {}
HelmChart#

HelmChart holds the information needed to find a chart to deploy

Appears in: - HelmConfiguration

Field Description Default Validation
repository HelmChartRepository Load helm chart from a repository Optional: {}
HelmChartRepository#

HelmChartRepository defines a helm repository where TO can load a chart from

Appears in: - HelmChart

Field Description Default Validation
name string Name of the chart to deploy
version string Version is the version of the chart to deploy Optional: {}
repoUrl string The repo url to use Optional: {}
username HelmSecretRef The username to use for the selected repository Optional: {}
password HelmSecretRef The password to use for the selected repository Optional: {}
HelmSecretRef#

HelmSecretRef holds a secret reference to a secret

Appears in: - HelmChartRepository

Field Description Default Validation
key string
name string
namespace string Optional: {}
ResourceMapping#

Appears in: - TemplateResources

Field Description Default Validation
secrets Resource array Secrets consist of secrets which will be mapped to matching namespaces Optional: {}
configMaps Resource array ConfigMaps consist of configMaps which will be mapped to matching namespaces Optional: {}
Resource#

Appears in: - ResourceMapping

Field Description Default Validation
name string Name is the name of the resource Required: {}
namespace string Namespace is the namespace where the resource lives Required: {}
TemplateSpec#

Appears in: - Template

TemplateStatus#

Appears in: - Template

TemplateParameter#

Appears in: - Template

Field Description Default Validation
name string Name is the name of the parameter
value string Value is the default value of the parameter Optional: {}
required boolean If required is true, the template instance must
define this parameter, otherwise the deployment will fail.
Optional: {}
validation string Validation takes a regular expression as value to
verify the provided value does match expected values.
Optional: {}
TemplateInstance#

TemplateInstance is the Schema for the templatesinstance API

Field Description Default Validation
apiVersion string templates.stakater.com/v1alpha1
kind string TemplateInstance
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
spec TemplateInstanceSpec
status TemplateInstanceStatus Optional: {}
TemplateInstanceSpec#

TemplateInstanceSpec holds the expected cluster status of the template instance

Appears in: - TemplateInstance

Field Description Default Validation
template string The template to instantiate. This is an immutable field
sync boolean If true the template instance will keep the deployed resources in sync with the template. Optional: {}
parameters TemplateInstanceParameter array Parameters hold the values of the defined parameters in the template Optional: {}
TemplateInstanceStatus#

TemplateInstanceStatus describes the current status of the template instance in the cluster

Appears in: - TemplateInstance

Field Description Default Validation
status InstanceDeploymentStatus Status holds the template instances status
message string A human readable message indicating details about why the namespace is in this condition. Optional: {}
reason string A brief CamelCase message indicating details about why the namespace is in this state. Optional: {}
templateHash string TemplateHash is used to ignore false-positive template update events Optional: {}
templateManifests string TemplateManifests are the manifests that were rendered before Optional: {}
mappedSecrets object (keys:string, values:MappedResourcesState) MappedSecrets is a list of secrets which have been mapped along with its state. Optional: {}
mappedConfigmaps object (keys:string, values:MappedResourcesState) MappedConfigmaps is a list of configmaps which have been mapped along with its state. Optional: {}
observedAt Time LastAppliedAt indicates when the template was last applied Optional: {}
InstanceDeploymentStatus#

Underlying type: string

InstanceDeploymentStatus describes the status of template instance deployment as {"Deployed", "Failed", ""}

Appears in: - DeployedNamespaceState - MappedResourcesState - TemplateInstanceStatus

Field Description
Deployed InstanceDeploymentStatusDeployed describes a succeeded instance deployment
Failed InstanceDeploymentStatusFailed describes a failed instance deployment
`` InstanceDeploymentStatusPending describes a not yet deployed instance
DeployedNamespaceState#

Appears in: - ClusterTemplateInstanceStatus

Field Description Default Validation
templateManifests string TemplateManifests are the manifests that were rendered before Optional: {}
status InstanceDeploymentStatus
MappedResourcesState#

Appears in: - ClusterTemplateInstanceStatus - TemplateInstanceStatus

Field Description Default Validation
reason string Reason of resource mapping if failed Optional: {}
status InstanceDeploymentStatus

FinOps#

Packages#

finops.stakater.com/v1alpha1#

Package v1alpha1 contains API Schema definitions for the finops v1alpha1 API group.

Resource Types#

AWSOptions#

AWSOptions defines AWS-specific options.

Appears in: - FinOpsProviderSpec

Field Description Default Validation
cloudIntegrationSecret string CloudIntegrationSecret is the Azure Subscription ID. Optional: {}
pricingModelSource string PricingModelSource indicates how the pricing model is provided to OpenCost.
e.g., "Pricebook" if derived from PriceBook CRs.
Optional: {}
AzureOptions#

AzureOptions defines Azure-specific options.

Appears in: - FinOpsProviderSpec

Field Description Default Validation
cloudIntegrationSecret string CloudIntegrationSecret is the Azure Subscription ID. Optional: {}
pricingModelSource string PricingModelSource indicates how the pricing model is provided to OpenCost.
e.g., "Pricebook" if derived from PriceBook CRs.
Optional: {}
Compatibility#

Compatibility defines compatibility requirements for subscriptions bound to this offering

Appears in: - OfferingSpec

Field Description Default Validation
requiredOfferings ObjectReference array RequiredOfferings lists offerings that must be covered by an active subscription in
the same family (the connected tree sharing a root ancestor) for a subscription to
this offering to activate. Coverage spans the whole family EXCEPT the subscription's
own subtree: ancestors, siblings, uncles, and cousins all count; the subscription's
own children and descendants do not. A root subscription's subtree is the entire
family, so a requirement-bearing root can never be covered.
Optional: {}
CostBucket#

Appears in: - SubscriptionStatus

Field Description Default Validation
granularity string Granularity is the time granularity of this bucket (e.g., hour, day, month). Enum: [hour day month]
start Time Start is the start time of the bucket (inclusive).
endExclusive Time EndExclusive is the end time of the bucket (exclusive).
current integer Current is the current accumulated spend for the period in micro-currency units. Optional: {}
projected integer Projected is the projected spend for the full period cycle in micro-currency units. Optional: {}
breakdown CostMetric array Breakdown contains the cost breakdown by component. Optional: {}
CostJob#

CostJob is the Schema for the costjobs API.

Field Description Default Validation
apiVersion string finops.stakater.com/v1alpha1
kind string CostJob
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
spec CostJobSpec
status CostJobStatus
CostJobSpec#

CostJobSpec defines the desired state of CostJob.

Appears in: - CostJob

Field Description Default Validation
type CostJobType Type of the cost collection job, e.g., "ResourceCostCollection" ResourceCostCollection Enum: [ResourceCostCollection SubscriptionChargeCollection]
Optional: {}
databaseInitTimeout Duration DatabaseInitTimeout is the timeout for database initialization 2m Optional: {}
kubernetesOperationTimeout Duration KubernetesOperationTimeout is the timeout for Kubernetes API operations 1m Optional: {}
openCostFetchTimeout Duration OpenCostFetchTimeout is the timeout for fetching data from OpenCost 2m Optional: {}
databaseInsertTimeout Duration DatabaseInsertTimeout is the timeout for database insert operations 3m Optional: {}
databaseViewsRefreshTimeout Duration DatabaseViewsRefreshTimeout is retained for API compatibility and has no
effect. The cost ingestion job no longer refreshes any database view: the
mv_provider_allocations_summary materialized view it used to rebuild on
every run had no readers and was dropped in migration 14.
Deprecated: no-op. Setting this value changes nothing.
Optional: {}
statusUpdateTimeout Duration StatusUpdateTimeout is the timeout for status update operations 1m Optional: {}
httpClientTimeout Duration HTTPClientTimeout is the timeout for HTTP client requests 90s Optional: {}
interval Duration 24h
resources ResourceRequirements Resources overrides compute resources for the generated CronJob's loader container.
Setting this replaces the whole block, so a partial value does not inherit the
template defaults for the keys it omits. Unset means the operator defaults apply.
Optional: {}
CostJobStatus#

CostJobStatus defines the observed state of CostJob

Appears in: - CostJob

Field Description Default Validation
lastExecutionTime Time Last execution time
lastSuccessfulExecutionTime Time Last successful execution time
lastExecutionStatus string Status of the last execution Enum: [Success Failed Error Pending]
executionHistory ExecutionRecord array History of the last 10 executions
CostJobType#

Underlying type: string

Validation: - Enum: [ResourceCostCollection SubscriptionChargeCollection]

Appears in: - CostJobSpec

Field Description
ResourceCostCollection
SubscriptionChargeCollection
CostMetric#

Appears in: - CostBucket

Field Description Default Validation
name MeterName Name is the name of the cost metric (e.g., "cpuHour", "pvGbHour"). Enum: [subscription cpuHour gpuHour ramGbHour pvGbHour networkGb]
Required: {}
current integer Current is the current accumulated value in micro-currency units. Optional: {}
projected integer Projected is the projected value in micro-currency units. Optional: {}
ExecutionRecord#

ExecutionRecord represents a single execution attempt

Appears in: - CostJobStatus

Field Description Default Validation
executionTime Time The time when this execution started
status string Status of the execution (Success, Failed, Error) Enum: [Success Failed Error]
duration string Duration of the execution
error string Error message if the execution failed
FinOpsProvider#

FinOpsProvider is the Schema for the finopsproviders API.

Field Description Default Validation
apiVersion string finops.stakater.com/v1alpha1
kind string FinOpsProvider
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
spec FinOpsProviderSpec
status FinOpsProviderStatus
FinOpsProviderSpec#

ProviderOptions holds provider-specific configuration options. Exactly one of AWS, GCP, Azure, or OnPrem must be set. These validations operate on the Go field names (AWS, GCP, Azure, OnPrem). Se https://opencost.io/docs/configuration/ for possible options todo: +kubebuilder:validation:XValidation:rule="has(self.Aws) || has(self.Gcp) || has(self.Azure) || has(self.OnPrem)", message="At least one provider option (awsoptions, gcpoptions, azureoptions, onpremoptions) must be set" todo: +kubebuilder:validation:XValidation:rule="(has(self.Aws) ? 1 : 0) + (has(self.Gcp) ? 1 : 0) + (has(self.Azure) ? 1 : 0) + (has(self.OnPrem) ? 1 : 0) == 1", message="Exactly one provider option (awsoptions, gcpoptions, azureoptions, onpremoptions) must be set"

Appears in: - FinOpsProvider

Field Description Default Validation
awsoptions AWSOptions AWS specific options. Optional: {}
gcpoptions GCPOptions GCP specific options. Optional: {}
azureoptions AzureOptions Azure specific options. Optional: {}
onpremoptions OnPremOptions OnPrem specific options. Optional: {}
FinOpsProviderStatus#

FinOpsProviderStatus defines the observed state of FinOpsProvider.

Appears in: - FinOpsProvider

Field Description Default Validation
observedGeneration integer ObservedGeneration reflects the generation of the most recently observed spec. Optional: {}
conditions Condition array Conditions represent the latest available observations of the FinOpsProvider's state. Optional: {}
lastSyncTime Time LastSyncTime is the timestamp of the last successful sync of OpenCost configuration. Optional: {}
GCPOptions#

GCPOptions defines GCP-specific options.

Appears in: - FinOpsProviderSpec

Field Description Default Validation
cloudIntegrationSecret string CloudIntegrationSecret is the Azure Subscription ID. Optional: {}
pricingModelSource string PricingModelSource indicates how the pricing model is provided to OpenCost.
e.g., "Pricebook" if derived from PriceBook CRs.
Optional: {}
Lifecycle#

Lifecycle defines lifecycle behavior for subscriptions

Appears in: - OfferingSpec

Field Description Default Validation
onParentDeactivate ParentDeactivateAction OnParentDeactivate toggles whether subscriptions to this offering should be deactivated when their parent subscription is deactivated
- Deactivate: this subscription also deactivates.
- Orphan: this subscription stays active independently, while retaining the parent reference for traceability.
Deactivate Enum: [Deactivate Orphan]
allowOverride boolean AllowOverride allows the subscription to override the lifecycle settings Optional: {}
Margins#

Margins defines pricing adjustments. AbsoluteMicros and FactorMilli are mutually exclusive — pick one mode per meter. Both must be non-negative: a negative margin would drive the per-unit price (and thus the usage charge) below zero, which usage meters don't support. Express a discount with a factorMilli below 1000 (e.g. 980 = 0.98x), not a negative absoluteMicros.

Appears in: - Meter

Field Description Default Validation
absoluteMicros integer AbsoluteMicros is an additive margin in micro-currency units (10^-6 of the currency)
1,000,000 micros = 1.00 currency unit
Example: 0.02 cents = 0.0002 currency units = 200 micros
Optional: {}
factorMilli integer FactorMilli is a multiplicative factor in milli-units
1000 = 1.000x, 1020 = 1.020x (adds 2%), 980 = 0.980x (discount 2%)
Optional: {}
Meter#

Meter defines pricing adjustments for a specific meter

Appears in: - Pricing

Field Description Default Validation
name MeterName Name is the name of the meter along with unit (e.g., "cpuHour", "ramGbHour"). Enum: [subscription cpuHour gpuHour ramGbHour pvGbHour networkGb]
Required: {}
margins Margins Margins adjusts the price derived from raw usage for this meter.
You can specify either:
- absoluteMicros: an additive margin in micro-currency units (10^-6 of the currency), or
- factorMilli: a multiplicative factor in milli-units (1000 = 1.000x, 1020 = 1.020x).
Optional: {}
MeterName#

Underlying type: string

MeterName defines the name of a usage meter for pricing adjustments

Validation: - Enum: [subscription cpuHour gpuHour ramGbHour pvGbHour networkGb]

Appears in: - CostMetric - Meter - ResolvedMeter

Field Description
subscription
cpuHour
gpuHour
ramGbHour
pvGbHour
networkGb MeterNetworkGB bills total data transferred (transfer + receive) per GiB.
No time dimension — the rate is per-GB, not per-GB-hour — hence no "Hour".
ObjectReference#

Appears in: - Compatibility - SubscriptionParent - SubscriptionSpec

Field Description Default Validation
name string Required: {}
namespace string Namespace of the referenced object. Must be set explicitly — references are
never resolved against the referrer's namespace, so the same reference always
means the same object no matter where it is authored. MinLength guards against
an empty string, which +required alone would accept.
MinLength: 1
Required: {}
Offering#

Offering describes a cost driving entity It owns the rules for how the base cost for that entity is collected and calculated

Field Description Default Validation
apiVersion string finops.stakater.com/v1alpha1
kind string Offering
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
spec OfferingSpec
status OfferingStatus
OfferingSpec#

OfferingSpec defines the desired state of Offering.

Appears in: - Offering

Field Description Default Validation
pricing Pricing Pricing specifies how the price for this offering is calculated Required: {}
compatibility Compatibility Compatibility can be used for ensuring that any subscription created for this offering
has the required offerings in its parents or siblings
Optional: {}
lifecycle Lifecycle Lifecycle defines how subscriptions to this offering behave during certain lifecycle events Optional: {}
OfferingStatus#

OfferingStatus defines the observed state of Offering.

Appears in: - Offering

Field Description Default Validation
resolvedPricing ResolvedPricing ResolvedPricing contains the effective pricing derived from the offering spec Optional: {}
conditions Condition array Conditions represent the latest available observations of the Offering's state Optional: {}
ready ConditionStatus Ready indicates whether the offering is ready to be subscribed to (i.e., all required offerings are present and no circular dependencies detected)
OnPremOptions#

OnPremOptions defines On-Premise specific options.

Appears in: - FinOpsProviderSpec

Field Description Default Validation
pricingModelSource string PricingModelSource indicates how the pricing model is provided to OpenCost.
e.g., "Pricebook" if derived from PriceBook CRs.
Optional: {}
ParentDeactivateAction#

Underlying type: string

ParentDeactivateAction defines the behavior when a parent subscription is deactivated.

Validation: - Enum: [Deactivate Orphan]

Appears in: - Lifecycle - SubscriptionLifecycle

Field Description
Deactivate
Orphan
PriceBook#

PriceBook is the Schema for the pricebooks API

Field Description Default Validation
apiVersion string finops.stakater.com/v1alpha1
kind string PriceBook
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
spec PriceBookSpec
status PriceBookStatus
PriceBookSpec#

PriceBookSpec defines the desired state of PriceBook

Appears in: - PriceBook

Field Description Default Validation
currency string The base currency for financial reporting and calculations (e.g., EUR, USD). Pattern: ^[A-Z]\{3\}$
Required: {}
valuationMode string The mode of valuation - either 'currency' for direct monetary rates or 'percent' for weighted scoring. Enum: [currency percent]
Required: {}
rates PriceRates Rates used for valuation in 'currency' mode. Defines cost per unit of resource. Required if valuationMode is 'currency'. Optional: {}
PriceBookStatus#

PriceBookStatus defines the observed state of PriceBook

Appears in: - PriceBook

Field Description Default Validation
active boolean Active indicates whether this PriceBook instance is currently designated as the active one
used for pricing calculations. This field is managed by the operator.
Optional: {}
ready ConditionStatus Ready indicates whether this PriceBook's rates are valid and it is usable
for pricing resolution. Managed by the operator.
Optional: {}
observedGeneration integer ObservedGeneration reflects the generation of the most recently observed spec. Optional: {}
conditions Condition array Conditions represent the latest available observations of the PriceBook's state. Optional: {}
activePricing object (keys:string, values:string) ActivePricing mirrors the OpenCost custom-pricing document (default.json)
this PriceBook has applied to OpenCost. Populated only on the active, ready
PriceBook (the one driving OpenCost); nil on every other PriceBook.
Managed by the operator.
Optional: {}
PriceRates#

PriceRates defines the cost rates for different resources. Each rate is a non-negative decimal string (e.g. "0.031"); empty means "unset". The pattern ^([0-9]+(\.[0-9]+)?)?$ rejects malformed values at admission while allowing empty.

Appears in: - PriceBookSpec

Field Description Default Validation
cpuHour string Cost per vCPU-hour (e.g., 0.031). Pattern: ^([0-9]+(\.[0-9]+)?)?$
Optional: {}
spotCPUHour string Cost per vCPU-hour (e.g., 0.031). Pattern: ^([0-9]+(\.[0-9]+)?)?$
Optional: {}
ramGbHour string Cost per GB-hour of RAM (e.g., 0.004). Pattern: ^([0-9]+(\.[0-9]+)?)?$
Optional: {}
spotRAMGbHour string Cost per GB-hour of spotRAM (e.g., 0.004). Pattern: ^([0-9]+(\.[0-9]+)?)?$
Optional: {}
pvGbHour string Cost per GB-hour of Persistent Volume (e.g., 0.00012). Pattern: ^([0-9]+(\.[0-9]+)?)?$
Optional: {}
gpuHour string Cost per GPU-hour (e.g., 1.8). Pattern: ^([0-9]+(\.[0-9]+)?)?$
Optional: {}
networkGiB string Cost per GiB of network data transferred (e.g., 0.09). Pattern: ^([0-9]+(\.[0-9]+)?)?$
Optional: {}
Pricing#

Pricing defines pricing rules for the offering

Appears in: - OfferingSpec

Field Description Default Validation
resourcePricing Meter array ResourcePricing defines per-meter pricing adjustments applied to raw usage.
Each meter can optionally define:
- includedUsage: an amount of usage included for free per subscription (same unit as the meter)
- margins: either an absolute add-on (in micro-currency) or a multiplicative factor (in milli-units)
Optional: {}
subscriptionFee SubscriptionFee SubscriptionFee defines the recurring fee charged for the subscription being active,
independent of resource usage
Optional: {}
ResolvedIncludedUsage#

ResolvedIncludedUsage contains the resolved included usage with its unit of measurement

Appears in: - ResolvedMeter

Field Description Default Validation
value integer Value is the amount of free usage included per subscription
unit string Unit is the unit of measurement (e.g., "GbHour", "CoreHour")
ResolvedMeter#

ResolvedMeter contains the effective per-unit price for a specific meter

Appears in: - ResolvedPricing

Field Description Default Validation
name MeterName Name is the meter name (e.g., "cpuHour", "ramGbHour") Enum: [subscription cpuHour gpuHour ramGbHour pvGbHour networkGb]
Required: {}
unitPriceMicros integer UnitPriceMicros is the effective per-unit price in micro-currency units (10^-6)
includedUsage ResolvedIncludedUsage IncludedUsage is the free usage included per subscription for this meter Optional: {}
ResolvedPricing#

ResolvedPricing contains the effective pricing that consumers see. It is derived from the offering spec and stamped on status during reconciliation.

Appears in: - OfferingStatus

Field Description Default Validation
resolvedAt Time ResolvedAt is the timestamp when pricing was last resolved
meters ResolvedMeter array Meters contains per-meter resolved unit prices after margins are applied.
Empty when no resource pricing is configured.
subscriptionFee SubscriptionFee SubscriptionFee contains the resolved subscription fee, if configured Optional: {}
Subscription#

Subscription is the Schema for the subscriptions API.

Field Description Default Validation
apiVersion string finops.stakater.com/v1alpha1
kind string Subscription
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
spec SubscriptionSpec
status SubscriptionStatus
SubscriptionFee#

SubscriptionFee defines the recurring fee charged for the subscription being active, independent of resource usage.

Billing model: - The fee accrues over time in discrete "ticks" of length period. - Each tick contributes priceMicros to the total. - Ticks are aligned according to tickAlignment.

Tick alignment: - ActivatedAt: ticks start at status.activatedAt (tick boundaries are: activatedAt + N*period). Best for per-subscription billing cycles (common for add-ons). - HourBoundary / DayBoundary / MonthBoundary: ticks align to wall-clock boundaries. Best for synchronized billing windows across subscriptions (common for reporting).

Charging rule (deterministic per time window): For a time bucket [start, endExclusive), the subscription fee charged in that bucket is:

ticks(t) = number of full tick boundaries strictly before time t
feeInBucket = priceMicros * (ticks(endExclusive) - ticks(start))

This ensures exports are idempotent: the same [start, endExclusive) always yields the same fee.

Minimum commitment (minPeriods): - minPeriods defines the minimum number of periods to bill once the subscription becomes active. - If the subscription deactivates before minPeriods have elapsed, the remaining periods are billed as an adjustment at deactivation time, so the total billed periods is at least minPeriods.

All monetary values are expressed in micro-currency units (10^-6 of the currency).

Appears in: - Pricing - ResolvedPricing

Field Description Default Validation
period string Period is the tick interval. Its interpretation depends on tickAlignment:
- ActivatedAt: a Go duration string (e.g., "1h", "30m", "24h").
- HourBoundary: an integer number of hours (e.g., "1", "2").
- DayBoundary: an integer number of days (e.g., "1", "7").
- MonthBoundary: an integer number of months (e.g., "1", "3", "12").
tickAlignment TickAlignment TickAlignment defines where tick boundaries occur.
ActivatedAt: ticks start at status.activatedAt (tick boundaries are: activatedAt + N*period).
Best for per-subscription billing cycles (common for add-ons).
HourBoundary / DayBoundary / MonthBoundary: ticks align to wall-clock boundaries.
Best for synchronized billing windows across subscriptions (common for reporting).
For boundary-aligned modes, the first tick after activation covers a partial period
and is prorated: charge = priceMicros * actualDuration / periodDuration.
For MonthBoundary, the period duration denominator is a fixed 365.25/12 days (30.4375 days).
Enum: [ActivatedAt HourBoundary DayBoundary MonthBoundary]
minPeriods integer MinPeriods is the minimum number of full tick periods before deletion is allowed.
The collection job keeps the subscription finalizer until at least minPeriods ticks
have elapsed since activation. The subscription continues accruing charges normally
until the finalizer is removed.
Minimum: 1
Optional: {}
priceMicros integer PriceMicros is the price per tick, in micro-currency units Minimum: 1
Required: {}
SubscriptionLifecycle#

Appears in: - SubscriptionSpec

Field Description Default Validation
onParentDeactivate ParentDeactivateAction OnParentDeactivate controls what happens when the parent subscription deactivates:
- Deactivate: this subscription also deactivates.
- Orphan: this subscription stays active independently, while retaining the parent reference for traceability.
Orphan only detaches the parent lifecycle link; compatibility requirements are still enforced.
An orphan whose required offering was covered only by the now-deactivated parent (and by no
active sibling) is still deactivated, because keeping it active would violate the requirement.
Deactivate Enum: [Deactivate Orphan]
targetRef TargetReference TargetRef ties the lifecycle of the subscription to a target resource.
The subscription will not activate until the target status is Ready.
When the target is deleted, the subscription will be deactivated.
Optional: {}
SubscriptionParent#

Appears in: - SubscriptionSpec

Field Description Default Validation
subscriptionRef ObjectReference SubscriptionRef is a reference to the parent subscription. Required: {}
SubscriptionSpec#

SubscriptionSpec defines the desired state of Subscription. A Subscription creates a binding to an Offering, starting the clock and instantiating the offering. Effectively it starts consuming the cost-driving entity from a billing perspective.

offeringRef and parent are immutable: both determine what the subscription is billed for and which subscriptions provide its compatibility coverage, and a subscription's activation is a billing epoch that cannot be re-pointed.

Appears in: - Subscription

Field Description Default Validation
offeringRef ObjectReference OfferingRef is the reference to the Offering which is being subscribed to. Required: {}
parent SubscriptionParent Parent is an optional reference to a parent subscription for traceability.
For example, a storage subscription attached to a VM would reference the VM subscription.
Optional: {}
usageSources UsageSource array UsageSources defines from where the data for the resource usage of this subscription comes. Optional: {}
lifecycle SubscriptionLifecycle Lifecycle allows overriding lifecycle behavior if the Offering permits it.
If both parent and targetRef are set:
- activation requires BOTH (parent active AND target Ready)
- deactivation happens if EITHER stops applying, except parent deactivation is ignored when onParentDeactivate=Orphan
Note: onParentDeactivate=Orphan only governs the parent lifecycle link. It does not
exempt the subscription from its offering's compatibility requirements: if the deactivating
parent was the only active provider of a required offering, the subscription is still
deactivated for the coverage gap.
Optional: {}
SubscriptionStatus#

SubscriptionStatus defines the observed state of Subscription. Non-active subscriptions are ignored by scrape jobs. A subscription becomes active when: - parent.SubscriptionRef is set and the parent is active, and/or - targetRef is set and the target is Ready. Unset references are ignored. If neither reference is set, the subscription activates after spec validation.

Appears in: - Subscription

Field Description Default Validation
ready ConditionStatus Ready indicates whether the subscription is active and ready.
activatedAt Time ActivatedAt is the time when the subscription became active. Optional: {}
deactivatedAt Time DeactivatedAt is the time when the subscription was deactivated. Optional: {}
compatibilityRoot string CompatibilityRoot is the metadata.uid of this subscription's root ancestor,
resolved once by the controller. It identifies the connected family used
for compatibility coverage.
Optional: {}
costs CostBucket array Costs contains rolling cost summaries for the current hour, day, and month.
When populated, contains exactly 3 entries — one per granularity. // +optional
conditions Condition array Conditions represent the latest available observations of the Subscription's state. Optional: {}
TargetReference#

Appears in: - SubscriptionLifecycle

Field Description Default Validation
apiVersion string APIVersion is the API version of the target resource.
kind string Kind is the kind of the target resource.
namespace string Namespace is the namespace of the target resource. Optional: {}
name string Name is the name of the target resource.
TickAlignment#

Underlying type: string

TickAlignment defines where tick boundaries occur for subscription fee billing.

Validation: - Enum: [ActivatedAt HourBoundary DayBoundary MonthBoundary]

Appears in: - SubscriptionFee

Field Description
ActivatedAt ActivatedAt: ticks start at status.activatedAt (tick boundaries are: activatedAt + N*period).
Best for per-subscription billing cycles (common for add-ons).
HourBoundary HourBoundary ticks align to wall-clock hour boundaries (e.g., 1:00, 2:00, etc.).
DayBoundary DayBoundary ticks align to wall-clock day boundaries (e.g., 1 calender day).
MonthBoundary MonthBoundary ticks align to wall-clock month boundaries (e.g., 1st of each month).
UsageSource#

Appears in: - SubscriptionSpec

Field Description Default Validation
resourceType string ResourceType is the type of resource to track (e.g., Deployment, StatefulSet, Pod). Enum: [Deployment StatefulSet Pod DaemonSet Job CronJob ReplicaSet]
name string Name is the name of the specific resource instance. Optional: {}
namespace string Namespace is the namespace of the resource. Optional: {}

Hibernation Operator#

Packages#

hibernation.stakater.com/v1beta1#

Resource Types#

ClusterResourceSupervisor#

ClusterResourceSupervisor is the Schema for the resourcesupervisors API

Field Description Default Validation
apiVersion string hibernation.stakater.com/v1beta1
kind string ClusterResourceSupervisor
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
spec ClusterResourceSupervisorSpec
status ClusterResourceSupervisorStatus
ClusterResourceSupervisorSpec#

ClusterResourceSupervisorSpec defines the desired state of ClusterResourceSupervisor

Appears in: - ClusterResourceSupervisor

Field Description Default Validation
schedule Hibernation Required: {}
namespaces Namespaces Namespaces is a list of namespaces to which the schedule will be applied Optional: {}
argocd ArgoCDHibernation ArgoCD contains details about ArgoCD to which the schedule will be applied
ClusterResourceSupervisorStatus#

ClusterResourceSupervisorStatus defines the observed state of ClusterResourceSupervisor

Appears in: - ClusterResourceSupervisor

Field Description Default Validation
nextReconcileTime Time NextReconcileTime contains the next time at which the namespace resources will sleep or wake up
currentStatus Status CurrentStatus shows the state the tenant's resources Enum: [sleeping running error]
sleepingNamespaces SleepingNamespace array SleepingResources contains the previous states for each of the deployments currently scaled down
watchedNamespaces string array WatchedNamespaces contains the list of namespaces that are being watched by the ClusterResourceSupervisor
ignoreNamespaces string array IgnoreNamespaces contains the list of namespaces that are being ignored by the ClusterResourceSupervisor
ResourceSupervisor#

ResourceSupervisor is the Schema for the resourcesupervisors API

Field Description Default Validation
apiVersion string hibernation.stakater.com/v1beta1
kind string ResourceSupervisor
metadata ObjectMeta Refer to Kubernetes API documentation for fields of metadata.
spec ResourceSupervisorSpec
status ResourceSupervisorStatus
ResourceSupervisorSpec#

ResourceSupervisorSpec defines the desired state of ResourceSupervisor API

Appears in: - ResourceSupervisor

Field Description Default Validation
schedule Hibernation Required: {}
ResourceSupervisorStatus#

ResourceSupervisorStatus defines the observed state of ResourceSupervisor

Appears in: - ResourceSupervisor

Field Description Default Validation
nextReconcileTime Time NextReconcileTime contains the next time at which the namespace resources will sleep or wake up
currentStatus Status CurrentStatus shows the state the tenant's resources Enum: [sleeping running error]
Status#

Underlying type: string

Validation: - Enum: [sleeping running error]

Appears in: - ClusterResourceSupervisorStatus - ResourceSupervisorStatus