Skip to main content

Chart Values

Table of Contents​


Global​

KeyTypeDefaultDescription
global.imageRegistrystring""Override the registry host for ALL images. When set, replaces the per-image .registry. Use for air-gapped mirror deployments.
global.imagePullSecretslist[]Image pull Secrets used by every pod (names of pre-created dockerconfigjson Secrets).
nameOverridestring""Override the chart name (part of resource names).
fullnameOverridestring""Fully override the generated resource name prefix.
commonLabelsobject{}Extra labels added to every resource.
commonAnnotationsobject{}Extra annotations added to every resource.

Pod Security Context​

Applied at the pod level across all components. Compatible with restricted Pod Security Admission and OpenShift SCCs.

KeyTypeDefaultDescription
podSecurityContext.enabledbooltrueSet to false to omit the pod security context entirely.
podSecurityContext.runAsNonRootbooltrueRequire the container to run as a non-root user.
podSecurityContext.runAsUserint65532UID to run containers as.
podSecurityContext.runAsGroupint65532GID to run containers as.
podSecurityContext.fsGroupint65532fsGroup for volume ownership.
podSecurityContext.seccompProfile.typestringRuntimeDefaultSeccomp profile type.

Container Security Context​

Applied to all app containers (licensed, dashboard, activityd).

KeyTypeDefaultDescription
containerSecurityContext.enabledbooltrueToggle the container security context.
containerSecurityContext.runAsNonRootbooltrueRun the container as a non-root user.
containerSecurityContext.runAsUserint65532Container UID.
containerSecurityContext.runAsGroupint65532Container GID.
containerSecurityContext.allowPrivilegeEscalationboolfalsePrevent privilege escalation.
containerSecurityContext.readOnlyRootFilesystembooltrueMount the root filesystem read-only.
containerSecurityContext.privilegedboolfalseDisable privileged mode.
containerSecurityContext.capabilities.droplist["ALL"]Drop all Linux capabilities.
containerSecurityContext.seccompProfile.typestringRuntimeDefaultSeccomp profile type.

Service Account & RBAC​

KeyTypeDefaultDescription
serviceAccount.createbooltrueCreate ServiceAccounts for chart components.
serviceAccount.annotationsobject{}Annotations for the created ServiceAccounts (e.g. for IRSA).
rbac.createbooltrueCreate least-privilege Roles and RoleBindings. The keygen Job's ServiceAccount may only create the delegate Secret/ConfigMap; the dashboard may only patch the licensed Deployment.

licensed​

The stateless seat arbitrator — the core service that tenon CLI clients talk to for checkout, heartbeat, and checkin.

KeyTypeDefaultDescription
licensed.image.registrystringregistry-gitlab.tangramflex.techImage registry.
licensed.image.repositorystringpro/flex-cli/licensing-self-host/licensedImage repository path.
licensed.image.tagstring"0.3.0"Image tag. Must be pinned explicitly to a release tag.
licensed.image.pullPolicystringIfNotPresentImage pull policy.
licensed.replicaCountint2Number of licensed replicas. Stateless — safe to scale for HA.
licensed.leaseTTLstring4hFloating (shared-pool) lease time-to-live. A dead client's seat frees itself after this.
licensed.nodeLockTTLstring2160hNode-locked lease TTL (machine-bound seats).
licensed.service.typestringClusterIPService type. Use NodePort for k3d/dev environments.
licensed.service.portint8080Service port.
licensed.service.nodePortstring""NodePort (only when type=NodePort). Empty = auto-assign.
licensed.resources.requests.cpustring25mCPU request.
licensed.resources.requests.memorystring32MiMemory request.
licensed.resources.limits.memorystring128MiMemory limit.
licensed.podDisruptionBudget.enabledbooltrueCreate a PodDisruptionBudget for licensed.
licensed.podDisruptionBudget.minAvailableint1Minimum available licensed pods during voluntary disruptions.
licensed.autoscaling.enabledboolfalseEnable a HorizontalPodAutoscaler for licensed.
licensed.autoscaling.minReplicasint2HPA minimum replicas.
licensed.autoscaling.maxReplicasint6HPA maximum replicas.
licensed.autoscaling.targetCPUUtilizationPercentageint80HPA CPU utilization target.
licensed.fipsboolfalseEnable Go FIPS 140-3 mode at runtime (requires a FIPS-built image).
licensed.extraEnvlist[]Extra environment variables for licensed (list of {name, value}).
licensed.nodeSelectorobject{}Node selector for licensed pods.
licensed.tolerationslist[]Tolerations for licensed pods.
licensed.affinityobject{}Affinity rules for licensed pods.

adminToken​

The shared admin credential for licensed's protected read APIs and for activityd.

KeyTypeDefaultDescription
adminToken.existingSecretstring""Use an existing Secret instead of generating one. The Secret must contain key token.

activity​

Controls the Action Events subsystem: activityd and its SQLite activity store.

KeyTypeDefaultDescription
activity.enabledbooltrueEnable Action Events. When false, no activityd is deployed, POST /v1/actions accepts and discards, and activity reads return 404.
activity.retentionDaysint365Events older than this are deleted. Also the window in which an expired lease may still read its own history.
activity.lateAcceptDaysint7How long after a lease expires its offline-spooled actions are still accepted.
activity.maxActionsPerLeasePerHourint1000Abuse guard: maximum accepted actions per lease per clock hour.
activity.bufferMaxLenint500000Hard cap on the Valkey ingest buffer if activityd is down.
activity.logToStdoutbooltrueLog every event as a structured JSON line on licensed's stdout (for SIEM integration).
activity.persistence.sizestring10Giactivityd database PVC size. (~5 MB/day for 50 users × 200 runs.)
activity.persistence.storageClassstring""StorageClass for the data PVC. Empty = cluster default.
activity.persistence.accessModestringReadWriteOncePVC access mode.
activity.backup.enabledbooltrueTake online SQLite snapshots.
activity.backup.intervalstring24hSnapshot interval (Go duration).
activity.backup.keepint14Number of newest snapshots to keep.
activity.backup.existingClaimstring""Use an existing PVC for snapshots. Empty = chart creates one.
activity.backup.sizestring10GiSize of the chart-created backup PVC.
activity.backup.storageClassstring""StorageClass for the backup PVC. Empty = cluster default.
activity.activityd.resources.requests.cpustring25mCPU request for activityd.
activity.activityd.resources.requests.memorystring64MiMemory request for activityd.
activity.activityd.resources.limits.memorystring256MiMemory limit for activityd.
activity.activityd.nodeSelectorobject{}Node selector for the activityd pod.
activity.activityd.tolerationslist[]Tolerations for the activityd pod.
activity.activityd.affinityobject{}Affinity for the activityd pod.
activity.activityd.extraEnvlist[]Extra environment variables for activityd.

dashboard​

The operator web UI for viewing seat status, pool controls, and activity events.

KeyTypeDefaultDescription
dashboard.enabledbooltrueDeploy the operator dashboard.
dashboard.image.registrystringregistry-gitlab.tangramflex.techImage registry.
dashboard.image.repositorystringpro/flex-cli/licensing-self-host/dashboardImage repository path.
dashboard.image.tagstring"0.3.0"Image tag. Must be pinned explicitly.
dashboard.image.pullPolicystringIfNotPresentImage pull policy.
dashboard.replicaCountint1Dashboard replica count.
dashboard.service.typestringClusterIPService type. Expose via ingress or port-forward.
dashboard.service.portint8080Service port.
dashboard.ingress.enabledboolfalseCreate a Kubernetes Ingress for the dashboard.
dashboard.ingress.classNamestring""IngressClass to use (e.g. nginx). Empty = cluster default IngressClass.
dashboard.ingress.annotationsobject{}Ingress annotations (e.g. cert-manager, nginx).
dashboard.ingress.hostslist(see values.yaml)Hostnames and paths routed to the dashboard.
dashboard.ingress.tlslist[]TLS blocks. Reference an existing Secret or one cert-manager creates.
dashboard.resources.requests.cpustring25mCPU request.
dashboard.resources.requests.memorystring32MiMemory request.
dashboard.resources.limits.memorystring128MiMemory limit.
dashboard.nodeSelectorobject{}Node selector for dashboard pods.
dashboard.tolerationslist[]Tolerations for dashboard pods.
dashboard.affinityobject{}Affinity for dashboard pods.
dashboard.auth.enabledbooltrueRequire admin sign-in for mutating actions (Release-all, Restart). Viewing is always read-only without sign-in.
dashboard.auth.existingSecretstring""Use an existing Secret instead of generating one (keys: admin-user, admin-password).
dashboard.auth.adminUserstringadminAdmin username.

valkey​

Bundled single-node Valkey (Redis-compatible) for seat-state storage.

KeyTypeDefaultDescription
valkey.enabledbooltrueDeploy a bundled single-node Valkey. Set false to use an external instance.
valkey.externalAddrstring""External Valkey address (host:port) when enabled: false.
valkey.existingPasswordSecretstring""Name of a pre-created Secret holding a Valkey password (enables AUTH).
valkey.existingPasswordSecretKeystringpasswordKey within the password Secret.
valkey.image.registrystringdocker.ioValkey image registry.
valkey.image.repositorystringvalkey/valkeyValkey image repository.
valkey.image.tagstring8-alpineValkey image tag.
valkey.image.pullPolicystringIfNotPresentImage pull policy.
valkey.fsGroupint999fsGroup for the Valkey pod (matches the valkey uid/gid in the official image).
valkey.persistence.enabledbooltruePersist seat state (AOF) on a PVC so seats survive a Valkey restart.
valkey.persistence.sizestring1GiPVC size.
valkey.persistence.storageClassstring""StorageClass. Empty = cluster default CSI.
valkey.persistence.accessModestringReadWriteOncePVC access mode.
valkey.resources.requests.cpustring50mCPU request.
valkey.resources.requests.memorystring64MiMemory request.
valkey.resources.limits.memorystring256MiMemory limit.

keygen​

The Helm pre-install/pre-upgrade hook that generates the in-enclave delegate keypair.

KeyTypeDefaultDescription
keygen.enabledbooltrueRun the in-enclave keygen Job. Idempotent — never rotates an existing key.
keygen.delegateSecretstringlicensed-delegateSecret the keygen Job writes the delegate private key into. Never leaves the enclave.
keygen.delegatePubConfigMapstringlicensed-delegate-pubConfigMap the keygen Job writes the delegate public key into (for the operator to KMS-sign).
keygen.backoffLimitint3Kubernetes Job backoffLimit.

trust​

The KMS-signed delegation and KMS root public key applied by the operator after keygen.

KeyTypeDefaultDescription
trust.secretNamestringlicensed-trustName of the Secret holding delegation.json + root-pub.pem. Normally applied out-of-band after KMS signing.
trust.waitForTrustbooltrueBlock licensed from starting until the trust Secret exists. When false, licensed will crash-loop until trust is present.
trust.delegationstring""Inline delegation.json content. If set (e.g. --set-file trust.delegation=delegation.json), the chart creates the trust Secret for you (single-step install).
trust.rootPublicKeystring""Inline root-pub.pem content. Pair with trust.delegation.

networkPolicy​

Default-deny + explicit-allow NetworkPolicies (recommended for enclaves).

KeyTypeDefaultDescription
networkPolicy.enabledbooltrueInstall default-deny + explicit-allow NetworkPolicies.
networkPolicy.clientNamespaceslist[]Namespaces (by name) whose pods may reach licensed:8080. Empty = same namespace only.
networkPolicy.clientCIDRslist[]Additional ingress CIDRs allowed to reach licensed:8080 (e.g. the enclave LAN).
networkPolicy.dashboardFromNamespaceslist[]Namespaces allowed to reach the dashboard on port 8080. Set to your ingress controller namespace (e.g. ingress-nginx) when exposing the dashboard via ingress under a strict CNI.