Skip to content

App field reference

Complete list of every App spec field. Required fields are marked. “Applies to” notes workload-type scoping where relevant; most fields apply to all types. For task-oriented usage see The App claim and Data services.

Provenance. The App XRD and composition are not in this repository — they live in Smana/crossplane-configuration, which this repo pins as a Configuration package (infrastructure/base/crossplane/configuration-aws/configuration-packages.yaml, currently ghcr.io/smana/crossplane-configuration-aws:v0.4.6). This table was reconciled by hand against that repository’s apis/app/definition.yaml (the CRD schema — types, enums, CEL rules) and apis/app/kcl/main.k (composition defaults that never appear in the schema, such as resource requests/limits or the gateway/route fallback names) at the commit tagged v0.4.6.

To regenerate: check out Smana/crossplane-configuration at the tag currently pinned above, and read apis/app/definition.yaml + apis/app/kcl/main.k in that checkout — there is no automated extractor, so this page drifts from the schema the same way any hand-maintained reference does. Re-verify after every pin bump.

Top-level

FieldTypeDefaultApplies toDescription
imageobject— (required)allContainer image (see below).
typeenum web|worker|cronweballWorkload shape.
schedulestring (cron)—cron (required for cron)CronJob schedule; only valid when type: cron.
cronobject—cronCronJob tuning (see below).
command[]string—allEntrypoint override for the main container.
args[]string—allArguments to the main container entrypoint.
imagePullSecrets[]string—allNames of image pull Secrets in the namespace.
terminationGracePeriodSecondsinteger (≥0)—allGrace period before force-kill.
autoscalingobject—web, workerHPA config (see below). Forbidden on cron.
replicasinteger (≥1)1web, workerReplica count when autoscaling is off; CronJob has no replica concept.
deploymentStrategyenum RollingUpdate|RecreateRollingUpdate (or Recreate if persistence.enabled)web, workerUpdate strategy; explicit value always wins. Meaningless for cron (no strategy on a CronJob).
pdbobject—web, workerPodDisruptionBudget (see below). Forbidden on cron.
persistenceobject—allPVC-backed storage (see below).
resourcesobjectrequests 100m/128Mi, limits 200m/256MiallRequests/limits for the main container.
onDemandbooleanfalseallSchedule only on on-demand instances.
runAsNonRootbooleantrueallRun pod as non-root (UID/fsGroup 1001).
spreadAcrossZonesbooleantrueallTopology spread across zones.
antiAffinityPresetenum soft|hardsoftallPod anti-affinity strength.
automountServiceAccountTokenbooleanfalseallAuto-mount the SA token.
securityContextobjectsecure defaultsallContainer/pod security overrides (see below).
env[]object—allEnvironment variables (value / valueFrom).
envFrom[]object—allImport env from ConfigMap/Secret, optional prefix.
initContainers[]object (max 16)—allInit containers, reduced schema (see below).
sidecars[]object (max 16)—allSidecar containers, reduced schema (see below).
extraVolumes[]object—allPassthrough pod volumes (combined with tmp).
extraVolumeMounts[]object—allPassthrough main-container volume mounts.
configsmap—allConfig files to mount (path, content).
secretsmap—allSecrets Manager paths (path, keys).
healthProbesobjectweb: HTTP defaultsallliveness/readiness/startup (see below).
serviceobjectport 8080web (Service); port also used as probe fallbackService config (see below).
gatewayobject—web onlyDedicated Gateway (see below).
routeobject—web onlyHTTPRoute config (see below).
networkPoliciesobjectdisabledallCilium policies (see below).
kvStoreobjectdisabledallValkey (see below).
sqlInstanceobjectdisabledallPostgreSQL (see below).
objectStoreobjectdisabledallObject storage + workload identity, per cloud (see below).
externalSecrets[]object—allAWS Secrets Manager sync (see below).
observabilityobjectdisabledallTraces/metrics/alerting (see below).
Correction from the old field reference: persistence was previously marked “Applies to: web, worker”. That’s wrong — the Deployment and the CronJob share the same pod-builder (_podSpec, apis/app/kcl/main.k:465, reused by the CronJob’s job template at main.k:630), and the persistence volume/mount are added to that shared spec unconditionally (main.k:357-366). A cron App can mount a PVC. deploymentStrategy still doesn’t apply to cron — that field only ever sets Deployment.spec.strategy, which a CronJob doesn’t have.

image

FieldTypeDefaultDescription
repositorystring— (required)Container image repository.
tagstringlatestImage tag.
pullPolicyenum Always|Never|IfNotPresentIfNotPresentImage pull policy.

cron (type: cron)

FieldTypeDefaultDescription
concurrencyPolicyenum Allow|Forbid|ReplaceForbidConcurrent execution handling.
backoffLimitinteger (≥0)3Retries before a job fails.
activeDeadlineSecondsinteger (≥1)—Hard time cap for the job.
restartPolicyenum OnFailure|NeverOnFailureJob pod restart policy.
successfulJobsHistoryLimitinteger3Successful jobs to retain.
failedJobsHistoryLimitinteger3Failed jobs to retain.

autoscaling

FieldTypeDefaultDescription
enabledbooleanfalseEnable the HPA.
minReplicasinteger (≥1)1Minimum replicas (must be ≤ maxReplicas).
maxReplicasinteger (≥1)5Maximum replicas.
targetCPUUtilizationPercentageinteger 1–10070Target CPU utilization.

pdb

FieldTypeDefaultDescription
enabledbooleanfalseEnable the PDB.
minAvailableinteger (≥1)1Minimum available pods. Not a schema default — applied by the composition when unset (main.k:127,829).
unhealthyPodEvictionPolicyenum IfHealthyBudget|AlwaysAllowAlwaysAllowUnhealthy pod eviction policy.

persistence

FieldTypeDefaultDescription
enabledbooleanfalseRender a PVC.
sizestring (e.g. 10Gi)— (required when enabled)Requested storage size.
mountPathstring— (required when enabled)Mount path on the main container.
storageClassstringcluster defaultStorageClass name.
accessModes[]enum ReadWriteOnce|ReadWriteMany|ReadOnlyMany[ReadWriteOnce]PVC access modes. RWO forces Recreate on a Deployment and forbids autoscaling.

resources

FieldTypeDefaultDescription
requests.cpustring100mCPU request.
requests.memorystring128MiMemory request.
limits.cpustring200mCPU limit.
limits.memorystring256MiMemory limit.

securityContext

FieldTypeDefaultDescription
allowPrivilegeEscalationbooleanfalseAllow privilege escalation.
readOnlyRootFilesystembooleantrueRead-only root filesystem.
runAsNonRootbooleantrueRequire non-root.
capabilities.drop[]string[ALL]Capabilities to drop.
enableWritableTmpbooleantrueProvide a writable /tmp emptyDir.

initContainers[] / sidecars[]

Reduced container schema. ports is sidecars only. Names must be unique; the app’s own name is reserved (rejected by an admission CEL rule on the XRD, not the composition).

FieldTypeRequiredDescription
namestringyesContainer name (unique; not the app’s own name).
imagestringyesImage in plain repo:tag form.
command[]stringnoEntrypoint override.
args[]stringnoArguments.
env[]objectnoEnvironment variables (same shape as top-level env).
envFrom[]objectnoImport env from ConfigMap/Secret.
resourcesobjectnoRequests/limits.
volumeMounts[]objectnoPassthrough volume mounts.
securityContextobjectnoOverride for allowPrivilegeEscalation, readOnlyRootFilesystem, runAsNonRoot, capabilities.drop (defaults inherited).
ports[]object (name, containerPort, protocol=TCP)no (sidecars only)Ports exposed by the sidecar (not added to the Service automatically).

healthProbes

Blocks: liveness, readiness, startup. Each block:

FieldTypeDefaultDescription
typeenum http|tcp|grpc|exechttpProbe type.
pathstring/healthz (liveness), /readyz (readiness)HTTP path (http type).
portinteger 1–65535falls back to the http service port, else service.port/8080Probe port.
command[]string—Command for exec type.
initialDelaySecondsintegerliveness 30, readiness 5, startup 0Initial delay.
periodSecondsintegerliveness 10, readiness 5, startup 10Probe period.
failureThresholdintegerliveness/readiness 3, startup 30Failures before failed.

service

FieldTypeDefaultDescription
portinteger 1–655358080Main container/Service port (named http).
extraPorts[][]object—Extra Service ports: name, port, targetPort (defaults to port), protocol (TCP default).

gateway (web only)

FieldTypeDefaultDescription
enabledbooleanfalseCreate a dedicated Gateway.
gatewayClassNamestringciliumGateway class. Composition default (main.k:857) — not a schema default.
namestring<app>-gatewayGateway name. Composition default (main.k:842).
namespacestringapp namespaceGateway namespace. Composition default.
listeners[][]objectone HTTP:80 listenername, port, protocol (HTTP|HTTPS), hostname. Composition default when omitted (main.k:869-878).

route (web only)

FieldTypeDefaultDescription
enabledbooleanfalseCreate an HTTPRoute.
internetFacingbooleanfalsefalse → private, true → public. Domains are per-cluster, read from the EnvironmentConfig: aws-0 uses .priv.aws.ogenki.io / .cloud.ogenki.io, gcp-0 uses .priv.gcp.ogenki.io / .gcp.cloud.ogenki.io.
hostnamestring— (required when enabled)Hostname prefix (domain auto-added).
rules[][]objectroute all to service.port at /backendPort (required), pathPrefix (default /). Composition default when omitted (main.k:923-927).

networkPolicies

FieldTypeDefaultDescription
enabledbooleanfalseEnable Cilium policies (default-deny when on).
ingress[][]object—fromEndpoints, fromEntities, toPorts.
egress[][]object—toEndpoints, toEntities, toCIDR, toFQDNs, toPorts.

kvStore

FieldTypeDefaultDescription
enabledbooleanfalseEnable the KV store.
sizeenum small|medium|largesmallStore size.
typeenum valkey|redisvalkeyAccepted but ignored. The backend is Valkey-only (SPEC-012 CL-5, main.k:1009); the field is kept for API compatibility.

sqlInstance

FieldTypeDefaultDescription
enabledbooleanfalseEnable the PostgreSQL instance.
sizeenum small|medium|largesmallInstance size.
storageSizestring (e.g. 20Gi)—Storage size.
instancesinteger3Number of instances (HA).
primaryUpdateStrategystringunsupervisedPrimary update strategy.
createSuperuserbooleanfalseCreate a superuser.
performanceInsightsobjectdisabledpg_stat_statements / auto_explain tuning (see below).
databases[][]object—name (required), owner (required).
roles[][]object—name (required), superuser (required), comment, inRoles.
atlasSchemaobject—Migration Git url, ref, path.
postgresqlobject—parameters (map), pg_hba ([]string).
backupobject—schedule, retentionPolicy (default 15d), bucketName (required if schedule set).

sqlInstance.performanceInsights

FieldTypeDefaultDescription
enabledbooleanfalseEnable pg_stat_statements.
explain.sampleRatenumber 0.0–1.00.2Fraction of slow queries auto_explain captures.
explain.minDurationinteger (ms, ≥-1)1000Minimum query duration to trigger auto_explain; 0 logs everything, -1 disables it.
logStatementenum none|ddl|mod|allnoneWhich SQL statements Postgres logs via log_statement.

objectStore

An object-storage bucket, implemented per cloud: S3 on aws-0, GCS on gcp-0, from the same claim. The bucket’s name and location are owned by the platform — a claim states what it needs, not where it lands.

FieldTypeDefaultDescription
enabledbooleanfalseEnable the bucket.
permissionsenum readwrite|readonly|customreadwriteAccess the workload receives on the bucket.
versioningbooleanfalseKeep non-current object versions.
retentionDaysinteger 1–365—Object retention in days. GCP only — see below.

There is no top-level region: the composition reads it from the cluster’s own EnvironmentConfig, so the same claim is portable. There is no providerConfigRef either — the composition knows its own provider.

retentionDays currently takes effect on GCP only. It renders a GCS lifecycle rule that deletes objects past that age. On AWS it is accepted and stored but does nothing — no S3 lifecycle configuration renders yet, so the same claim’s uploads never expire on aws-0. This is a known asymmetry in a field meant to be cloud-neutral, tracked for an S3 implementation; until then, do not rely on retentionDays for AWS data retention.

Cloud-specific knobs

Anything with no honest cloud-neutral meaning is quarantined in an optional per-cloud block, per ADR-0007. Both are ignored on the other cloud.

FieldTypeDefaultDescription
aws.customPolicystring—IAM policy JSON. Required when permissions: custom.
aws.regionstringcluster regionOverrides where the bucket lands. Rarely needed.
gcp.locationstringcluster regionOverrides where the bucket lands. Rarely needed.
gcp.storageClassenum STANDARD|NEARLINE|COLDLINE|ARCHIVESTANDARDGCS storage class.
permissions: custom is AWS-only. A custom policy is IAM JSON, which has no GCP equivalent, so the XRD enforces aws.customPolicy whenever permissions: custom — a claim setting custom without it is rejected at admission. On GCP the composition degrades custom to read-only rather than silently granting write.
Renamed from s3Bucket. The old field named an AWS service in a cloud-neutral contract, and its region pattern could not express a GCP region at all. spec.s3Bucket no longer exists; customPolicy moved under aws.

secrets

A map keyed by an arbitrary name you choose; unlike externalSecrets[] below, each entry mounts straight into the pod as environment variables — no separate Kubernetes Secret object, no envFrom round-trip. Confirmed as a distinct field in the pinned XRD schema; no claim in this repository uses it today (every live claim goes through externalSecrets[] instead).

FieldTypeDefaultDescription
pathstring— (required)Path to the secret in AWS Secrets Manager.
keys[]string—Keys to fetch from the secret; omit for all keys.

externalSecrets[]

FieldTypeDefaultDescription
namestring— (required)Kubernetes Secret name to create.
remoteRefstring— (required)Path in AWS Secrets Manager.
refreshIntervalstring (e.g. 1h)1hSync interval.

observability

FieldTypeDefaultDescription
traces.enabledbooleanfalseEnable OTLP tracing.
traces.endpointstringVictoriaTraces in observabilityOTLP traces endpoint; falls back to the in-cluster VictoriaTraces service (main.k:130,159).
traces.samplingRatenumber 0.0–1.01.0Trace sampling rate.
metrics.enabledbooleanfalseEnable metrics (VMServiceScrape for web).
metrics.endpointstringvmagent in observabilityOTLP metrics endpoint; falls back to the in-cluster vmsingle service (main.k:131,178).
metrics.pathstring/metricsScrape path.
metrics.intervalstring30sScrape interval.
alertingRules.groups[][]object—VMRule groups (name (required), interval, rules (required)).